一、背景
前面经过努力,将Arduino 的共享资源 PID AutoTune 自整定库用起来了,并进行了验证性测试,效果不错。
但那个验证是在我琢磨自整定库的平台上(掌上实验室小车)进行的,做完后回味了一下,感觉应该换到轮式驱动单元上测试一下,看看如何?
因为当初我尝试 PID 时,手工整定在轮式驱动单元上成功了,但到掌上实验室小车上却没有达到预期,说明两个平台物理特性还是有差别的。虽说两个小车的驱动电路完全一样,但两个轮子的物理尺寸不同,所用的电机虽然都是130电机,但减速比不同。
二、目的
验证针对不同物理特性的对象,PID自整定的效果如何。
三、测试方式、过程
3.1 硬件准备
因为目的就是检验一下自整定算法的适应性,为减小工作量,用两个轮式驱动单元所构成的差分驱动小车底盘作为对象,和掌上实验室小车的差别只是物理结构、尺寸不同,驱动电路完全一样:
控制板用和掌上实验室相同的STM32F103C8核心板,为便于接线,使用我自己设计的Arduino UNO扩展板:
详细介绍见:ROS学习笔记之六 – 创建基于STM32的Arduino环境
https://blog.csdn.net/embedream/article/details/91823053
轮式驱动单元内置控制和反馈电路,用杜邦线引出,对于学习而言,很方便使用,任何一块核心板都可以,只是上述扩展板上每个IO引脚都配了一对电源和地线,更方便一些:
小车供电使用最常见的充电宝,只需自己做一根USB电源线即可(这是我买的DIY套件,用笔记本电脑失效的电池拆开后组装的,4节18650):
3.2 程序准备
因控制板一样、驱动电路一样,所以程序基本无需修改,只是将对应车轮尺寸的两个常数定义修改一下。
掌上实验室小车的轮子直径 65mm,一圈60齿:
轮式驱动单元的轮子直径是 80mm,一圈是100齿:
实际接线时,发现扩展板上 PC14、PC15没有焊接插针,故换到 PB14、PB15。
此外,由于两个轮式驱动单元是对称安装,左右侧转动方向相反,故修改左侧的控制信号Ctrl2、Ctrl3定义,交换一下,以使得两个轮子的转动方向统一(实际上掌上实验室小车有同样的问题,只是那个小车上可以通过改变电机的接线方向实现)。
3.3 PID自整定过程
完全按照“掌上单片机实验室 – 检验自整定效果”一文的测试过程,实际结果如下:
左侧自整定过程:
右侧自整定过程:
3.4检验效果
将上述整定结果作为 PID 调速的默认参数:
用 90% 的 PWM 测试了一下,两侧轮子的最快转速大约是 380mm/s,故选择100、300mm/s两点作为调速验证,结果如下:
1、左侧速度 100mm/s:
2、左侧速度 300mm/s:
3、右侧速度 100mm/s:
4、右侧速度 300mm/s:
5、设置两轮速度为150mm/s,走1000mm:
PID 自整定适应性测试
从上述结果看,基本和前面的验证一致,符合预期。
由此可以得出,这个自整定的算法可以很方便地实现 PID 参数整定,而且效果不错!
四、结语
用自整定方式完成 PID 参数整定,对于PID 应用而言,无疑是个福音。
因为很多时候大家都知道需要使用 PID 控制以达到所需要的效果,但实际使用时很少得到满意的结果。
因为对象特征千差万别,没有好的手段很难获得。而且,通常对象特性包含了很多因素,就拿我测试的小车来说,输入只是 PWM,但影响速度的因素却有很多:转动阻力、车轮惯性、供电电源、测速的真实性等。
这个方式实际上是利用程序自动重复加入扰动激励,从而获得包含所有因素的响应,还是很有价值的!
以后如果遇到不同的 PID 应用场景,再多尝试几次,看看其普适性如何。
但目前为止,我认为其对于直流电机的 PID调速是完全能够胜任的!
————————————
文中程序下载:
链接:https://pan.baidu.com/s/1g_X8zD0fjST_PPmEx-_SGg
提取码:0vnx