ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定

目录

  • 一、硬件接线
  • 二、程序演示
    • 2.1、官方代码操作
    • 2.2、移植后的代码操作
  • 三、测量原理
    • 3.1、测量电阻
    • 3.2、测量电感
  • 四、代码说明
  • 五、电流环PI参数整定


ODrive、VESC和SimpleFOC 教程链接汇总:请点击

一、硬件接线

驱动板 购买链接:某宝购买
电机 购买链接:某宝购买

二、程序演示

2.1、官方代码操作

请先将驱动板刷机v0.5.6版本,当然也可以v0.5.1版本,结果是一样的,
按照标准ODrive操作,下图:

ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第1张图片

odrv0.erase_configuration()
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.calibration_current = 5
odrv0.save_configuration()
odrv0.reboot()   //v0.5.1版本需要这个指令

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
odrv0.axis0.error
odrv0.axis0.motor.config.phase_resistance
odrv0.axis0.motor.config.phase_inductance


只是测量电阻电感,不需要配置太多参数,
1、测量的电机一定要Hign_Current类型,云台电机不需要检测,会报错,
2、校准电流如果设置太大,电机可能会发热,太小测不准。

2.2、移植后的代码操作

  • 在MyProject.h文件中设置参数,下图:
    ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第2张图片

  • 编译烧写,

  • 发送指令“C”(不需要回车换行),3秒钟后电机“嘀”一声,校准完毕,打印测量结果,同时打印整定后的电流环PI参数。下图:
    ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第3张图片

三、测量原理

3.1、测量电阻

测量电阻的原理很简单,下图:
在ODrive代码中,设定了测量电流 I,根据检测到的电流不断调整 U,大概3秒钟,最终稳定电流到设定值,
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第4张图片

3.2、测量电感

我没有找到理论依据,只能讲下ODrive的测量过程:
1、施加固定电压 R_calib_max_voltage(默认为2),
2、输出电压交替调整方向,相当于电感上的电压一下正一下负,
3、待稳定后,测量相邻两次电流差为 dI,相邻两次间隔时间为dt,如下公式求出电感。
4、因为线圈两端的电压交替变换,使得电机产生振动,发出“嘀”的一声。
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第5张图片

四、代码说明

电阻电感测量的相关代码在motor.c文件中,可自行查看,上面也讲过了原理,所以就不再细说,
此处主要讲下测量函数调用的过程,这也是我迷惑了我很久的部分,

4.1、主循环中等待3秒,下图:
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第6张图片

4.2、测量工作在中断中进行,下图:
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第7张图片

4.3、电流变换和SVPWM也在更新中断中,所以会与测量函数产生冲突,用标志位的方式处理,下图:
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第8张图片

4.4、看上面这几行代码,也许你会觉得并没有特别之处,
但在官方代码中,电阻电感测量部分的变量和函数全部被打包为“类”,代码运行直接调用类,函数被函数指针指向后调用,非常具有隐蔽性,所以很长时间里,只是看到代码运行好像是这个逻辑,但却不明白怎么实现的:
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第9张图片
ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第10张图片

最初移植的时候,我也用函数指针实现中断中的函数运行,但是发现函数指针太不直观了,非常容易被忽视和忘记更改指针,所以用了标志位的方法,不高级但却实用。

五、电流环PI参数整定

ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定_第11张图片

1、电流环的PI参数通过电阻电感计算生成,
2、电阻电感测量时肯定会有误差,如果不同电路,不同MOS测试,误差肯定更大,
3、但闭环控制的效果非常好,没有因为误差导致失控,
4、把PI参数放入SimpleFOC代码中,没有任何改善,
5、我尝试查找电流环能够如此稳定的原因,并希望用来改善SimpleFOC的控制效果,但没有实现,
6、只能说ODrive的架构和算法相得益彰,拆开就失效了。



(完)



你可能感兴趣的:(ODrive,ODrive,电机驱动器,stm32)