首页 > 代码库 > 利用网售的PID调制工具配置电机PID参数

利用网售的PID调制工具配置电机PID参数

STM32F103C8代码:

https://github.com/MontaukLaw/PID_Control_With_STM32F103

套件购买地址:

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.lbDUDR&id=532496279494&_u=s124ig7aecc

电机购买地址:

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.lbDUDR&id=20965620027&_u=s124ig777dc

 

这个系统, 总体来说就是利用上位机的图形, 去直观的修改pid值, 通过pwm输出控制电机转速.

技术分享

 

1. 我使用了套件里面的评估板, 跟在别的地方买的冯哈勃电机, 带垃圾减速器,加垃圾编码器, 修改店家提供的源码, 通过这个叫MiniBalance的上位机程序, 可以直观的看到当前速度跟目标速度, 甚至当前的pwm.

2. 电源使用12伏供电, 速度的采样周期大约是10ms, 但是上位机最多只有20hz的速度, 所以看到的速度变化最快也就是50ms.

3. pwm的调制周期是5ms, 使用增量式调节, 公式是...算了, 自己去看github代码注释吧, 直接粘贴不了.

4. P.I. 这两个系数,是我研究了一会儿, 慢慢的出来的, 最后出来的曲线如上图, 以及文章最后的图:

5. 其实我很早就有这种想法, 利用串口把当前的速度啊, pwm啊, 设定值之类, 传到上位机, 然后用Java写个上位机程序, 方便PID系数的整定, 但是后来一直没接触到这类应用, 这次算是用一天时间解决一个问题.

6. 剩下的问题就是, 思岚的STM32示例代码里面的PID算法是位置式的, 可能需要修改这部分代码.

7. BB Ver 3.0上面的PID算法可能也需要修改.

8. 套件的电机驱动板上的编码器接口丝印, 信号引脚A0跟A1, 跟实际所使用的引脚PA0跟PA1是反过来的, 这点需要注意, 浪费了我一个小时.

9. 值得注意的是, 这个case中, PWM的输出量, 最大是3600, 而速度值, 在10ms下面, 如果不除一下或者换算成实际单位,毫米或者米之类, 10ms的编码器脉冲在12伏, PWM~100%下可能有1300次脉冲, 所以, Kp跟Ki很小, 稍微大点就会跑到最大值, 回不来了...

10. 图中的显示值都除了10, 因为minibalance这个上位机程序只能保留小数点前面3位.

 

 

 

技术分享

 

PS: 另外, PWM调制之后, 这个电机可能出现高频啸叫, 原本的调制周期是10K, 后来改成20K, 啸叫消失了...算是意外收获吧.

利用网售的PID调制工具配置电机PID参数