赞
踩
1、(2021年2月3日)板子基本焊接完成,尚缺NTC和3.3k的电阻;给板子刷了3.5-24V的固件,能运行,但是连接不上odrivetool,初步怀疑是MCU型号不同于原版导致的
“Downloading json data from ODrive… (this might take a while)”
2、(2021年2月6日22点12分)测试了USB、LCD和五向按键;五向按键封装貌似不太对,好像画反了,取下过程中被烫坏了,无法进行进一步测试
测试程序链接:https://pan.baidu.com/s/1QJ3SYRpDHGpmQnp_Ul7HLw 提取码:LCNB
3、(2021年2月7日17点35分)首次连接24V电源,连接时有火花以及爆响,不过板子还算正常;测量了两片DRV8301的GVDD/DVDD/AVDD电压以及buck电路的输出电压(测量位置均非引脚)
DC005转XT30电源线:
电压测量结果如下:
参考值
GVDD | DVDD | AVDD | |
---|---|---|---|
典型值 | 11V | 3.3V | 6V |
最大值 | 13V | 3.6V | 8V |
Axis0
GVDD | DVDD | AVDD | buck | |
---|---|---|---|---|
修正前 | 0V(遗失) | 3.36V | 6.64V | 12.00V |
修正后 | 11.11V | 3.36V | 6.64V | 12.00V |
Axis1
GVDD | DVDD | AVDD | buck | |
---|---|---|---|---|
修正前 | 11.12V | 3.35V | 0.53V | 4.99V |
修正后 | 11.12V | 3.35V | 6.66V | 4.99V |
其中轴0所属DRV8301的GVDD电压测量值近乎0,检查后发现是焊接问题:AVDD与GND引脚连锡,处理后GVDD输出为11.11V
其中轴1所属DRV8301的AVDD电压测量值近乎0,检查后发现是焊接问题:AVDD引脚悬空,处理后AVDD连接到的电容引脚上测得6.66V
4、(2021年2月7日21点54分)测试串口通信,重要参考资料:ODrive干货 #3 ODriveTool 指令大全 - codenocold - CSDN
序号 | 指令 | 说明 |
---|---|---|
1 | r vbus_voltage | 打印总线电压 |
2 | r axis0.fet_thermistor.temperature | 打印轴0的MOS管温度 |
3 | r axis0.encoder.config.cpr | 打印轴0编码器每圈脉冲数 |
4 | r axis0.encoder.config.use_index | 打印轴0编码器是否使用index信号 |
5 | r axis0.encoder.config.mode | 打印轴0编码器类型 |
6 | f 0 | 打印轴0 位置和速度 |
7 | r axis0.motor.phase_current_rev_gain | 打印相电流增益倒数 |
5、(2021年2月8日00点49分)搭建了实验平台;焊接了编码器信号转接板;测用逻辑分析仪直接测量了编码器的引脚,得到波形,验证编码器正常运行; 使用f 0指令查询位置和速度,拨动编码器,二者值变化,控制器与编码器连接正常
6、(2021年2月8日03点04分)配置板子
序号 | 指令 | 说明 |
---|---|---|
1 | w config.dc_bus_undervoltage_trip_level 10 | 设置低压阈值 |
2 | r config.dc_bus_undervoltage_trip_level | 查询低压阈值 |
3 | w config.dc_bus_overvoltage_trip_level 30 | 设置高压阈值 |
4 | r config.dc_bus_overvoltage_trip_level | 查询高压阈值 |
5 | w config.dc_max_positive_current 30 | 设置正向电流阈值 |
6 | r config.dc_max_positive_current | 查询正向电流阈值 |
7 | w config.dc_max_negative_current -5 | 设置逆向电流阈值 |
8 | r config.dc_max_negative_current | 查询逆向电流阈值 |
9 | w axis0.motor.config.pole_pairs 7 | 设置电机极对数 |
10 | r axis0.motor.config.pole_pairs | 查询电机极对数 |
11 | w axis0.motor.config.calibration_current 3 | 设置电机校准电流 |
12 | r axis0.motor.config.calibration_current | 查询电机校准电流 |
13 | w axis0.motor.config.resistance_calib_max_voltage 2 | 设置电机校准电压 |
14 | r axis0.motor.config.resistance_calib_max_voltage | 查询电机校准电压 |
15 | w axis0.motor.config.motor_type 0 | 设置电机类型:大电流电机 |
16 | r axis0.motor.config.motor_type | 查询电机类型 |
17 | w axis0.motor.config.current_lim 15 | 设置电机运行最大电流限制 |
18 | r axis0.motor.config.current_lim | 查询电机类型 |
19 | w axis0.motor.config.requested_current_range 40 | 设置电机电流采样范围 |
20 | r axis0.motor.config.requested_current_range | 查询电机电流采样范围 |
21 | w axis0.encoder.config.mode 0 | 设置编码器类型:增量式编码器 |
22 | r axis0.encoder.config.mode | 查询编码器类型 |
23 | w axis0.encoder.config.use_index 0 | 设置编码器index:无index |
24 | r axis0.encoder.config.use_index | 查询编码器index |
25 | w axis0.encoder.config.cpr 2400 | 设置编码器cpr:600线*4 |
26 | r axis0.encoder.config.cpr | 查询编码器cpr |
27 | w axis0.encoder.config.bandwidth 3000 | 设置编码器带宽 |
28 | r axis0.encoder.config.bandwidth | 查询编码器带宽 |
29 | w axis0.config.calibration_lockin.current 10 | 设置开环运行时的电流,单位为 [A],根据负载调整,以电机能够正常转动为准 |
30 | r axis0.config.calibration_lockin.current | 查询开环运行时的电流 |
31 | w axis0.config.calibration_lockin.ramp_time 0.4 | 设置电流爬升时间,表示电流从零爬升到设定的 current 值所需要的时间 |
32 | r axis0.config.calibration_lockin.ramp_time | 查询电流爬升时间 |
33 | w axis0.config.calibration_lockin.ramp_distance 3.1415927410125732 | 设置电流爬升时电角度转动距离,单位为 [rad],配合 ramp_time 参数来缓慢锁定转子相位,可以通过调整 ramp_time、ramp_distance 使编码器索引校准启动的更平顺 |
34 | r axis0.config.calibration_lockin.ramp_distance | 查询电流爬升时电角度转动距离 |
35 | w axis0.config.calibration_lockin.accel 20 | 设置转速爬升的加速度,单位为 [rad/s^2] |
36 | r axis0.config.calibration_lockin.accel | 查询转速爬升的加速度 |
37 | w axis0.config.calibration_lockin.vel 40 | 设置编码器索引校准的运行速度,单位为 [rad/s] |
38 | r axis0.config.calibration_lockin.vel | 查询码器索引校准的运行速度 |
39 | w axis0.controller.config.vel_limit 50 | 设置电机最大转速,单位为 [turn/s],例如:此处我们配置为 50 转/秒 |
40 | r axis0.controller.config.vel_limit | 查询电机最大转速 |
41 | w axis0.controller.config.pos_gain 30 | 设置控制器控制增益:位置环增益 |
42 | r axis0.controller.config.pos_gain | 查询制器控制增益 |
43 | w axis0.controller.config.vel_gain 0.06 | 设置控制器控制增益:速度环增益 |
44 | r axis0.controller.config.vel_gain | 查询控制器控制增益 |
45 | w axis0.controller.config.vel_integrator_gain 0.3 | 设置控制器控制增益:速度环增益 |
46 | r axis0.controller.config.vel_integrator_gain | 查询控制器控制增益 |
47 | w axis0.trap_traj.config.vel_limit 30 | 设置梯形轨迹模式下电机匀速时的转速为 30 转/秒 |
48 | r axis0.trap_traj.config.vel_limit | 查询梯形轨迹模式下电机匀速时的转速 |
49 | w axis0.trap_traj.config.accel_limit 5 | 设置梯形轨迹模式下电机加速时的加速度,单位为 [turn/s^2],此处配置为 5,表示电机从静止加速到 5 转/秒 需要一秒钟的时间 |
50 | r axis0.trap_traj.config.accel_limit | 查询梯形轨迹模式下电机加速时的加速度 |
51 | w axis0.trap_traj.config.decel_limit 5 | 设置梯形轨迹模式下电机减速时的加速度,单位为 [turn/s^2],此处配置为 5,表示电机从静止加速到 5 转/秒 需要一秒钟的时间 |
52 | r axis0.trap_traj.config.decel_limit | 查询梯形轨迹模式下电机减速时的加速度 |
53 | w axis0.controller.config.input_mode 5 | 设置输入模式为梯形轨迹模式 |
54 | r axis0.controller.config.input_mode | 查询输入模式 |
55 | w axis0.controller.config.input_mode 5 | 设置输入模式为梯形轨迹模式 |
56 | r axis0.controller.config.input_mode | 查询输入模式 |
57 | w axis0.requested_state 4 | 校准电机 |
6、(2021年2月9日02点40分)笔者使用的是2312S无刷电机,网上无详细资料,找到了2212电机的参数作为参考
名称 | 数值 |
---|---|
KV | 980 |
定子外径 | 22mm |
定子高度 | 12mm |
定子槽数 | 12个 |
极数 | 14个 |
空载电流 | 0.3A |
电机电阻 | 133mΩ |
最大连续电流 | 15A |
最大连续功率 | 300W |
最大锂电池节数 | 2-4S |
建议电调 | 20A |
转子直径 | 27.5mm |
出轴直径 | 3.175mm |
电机长度 | 30mm |
电机含轴总长度 | 32mm |
重量 | 58.5g |
7、(2021年2月12日3点7分)vmware虚拟机中安装了ubuntu 20.04LTS,安装odrive以及相关环境后,成功连接上板子,怀疑windows驱动有问题
8、(2021年2月13日19点59分)将电流采样电阻由10mΩ换回原版的500uΩ,校准后电机可以运动
序号 | 指令 | 说明 |
---|---|---|
1 | odrv0.axis0.motor.config.phase_inductance | 相电感 |
2 | odrv0.axis0.motor.config.phase_resistancee | 相电感 |
3 | odrv0.axis0.motor.config.pole_pairs | 极对数 |
4 | odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION | 校准电机 |
5 | odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION | 校准编码器(无index) |
6 | odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL | 进入闭环模式 |
7 | odrv0.axis0.controller.input_pos = 50 | 运动到指定位置 |
8 | odrv0.axis0.requested_state = AXIS_STATE_IDLE | 释放电机 |
9、(2021年2月21日23点51分)几条有用的指令
序号 | 指令 | 说明 |
---|---|---|
1 | odrv0.axis0.config.startup_motor_calibration | ODrive上电后是否自动进行电机校准 |
2 | odrv0.axis0.config.startup_encoder_offset_calibration | ODrive上电后是否自动进行编码器偏移校准 |
3 | odrv0.axis0.config.startup_closed_loop_control | ODrive上电后是否自动进入闭环控制 |
4 | odrv0.axis0.config.enable_step_dir | 是否启用 step/dir 输入控制 |
5 | odrv0.axis0.config.turns_per_step | step/dir 每步对应电机转动圈数 |
6 | odrv0.axis0.config.step_gpio_pin | axis0 step 对应的 GPIO |
7 | odrv0.axis0.config.dir_gpio_pin | axis0 dir 对应的 GPIO |
10、(2021年2月25日18点45分)参数整定
(1)逐渐增加vel_gain ,每次增加 30% 左右,直到电机出现轻微的震荡
逐渐增加 pos_gain ,每次增加 30% 左右,直到您看到有些过冲
逐渐减小 pos_gain ,直到过冲消失
最终参数
名称 | 数值 |
---|---|
vel_integrator_gain | 0.005 |
vel_gain | 0.1 |
pos_gain | 50 |
测试结果
抖动(竖坐标单位:rad)
11、(2021年2月25日18点45分)测试axis1
C相上管损坏,GS电阻30欧,DS电阻0.5欧,GD电阻0.5欧(正常都是M欧)
现象:栅极12V不受控制,A相到C相导通,插上电机就短路
12、(2021年3月2日13点34分)odrive连接到电脑后悔显示两个接口:interface0和interface2,使用zadig将interface2的驱动替换成libusb-win32或者libusbK成功在windows10下连接odrive
13、(2021年3月2日13点34分)windows下,anaconda中新建了一个环境专门用于调试ODrive,安装odrive后运行odrivetool报错如下
解决方式:
python D:\anaconda\Scripts\pywin32_postinstall.py -install
其中路径请视情况更改
14、(2021年3月14日18点20分)axis1仍然报错1024,抱着试一试的心态,(省略),将axis1的C相上管的栅极飞线到GND,重启板子,不再报1024。
MOTOR_ERROR_CURRENT_LIMIT_VIOLATION
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。