最后更新:2022-07-22 15:44:34 手机定位技术交流文章

01 前言
在这个课程中使用的机器人控制面板有四个与编码器的电子接口,4个舵机接口,串行通信接口、SWD下载调试接口、导航远程控制接口、USB5V输出接口和方便的40PIN接口直接连接到Treeberry分支等。板载资源丰富,方便调试!它可以控制两轮、四轮差动,AKM可以转动机器人/汽车。
板上的电路接口:

机器人车的动力发展-测量汽车的速度
在上一篇文章《 STM32机器人控制开发 Tutorial No.1驱动电机(基于 HAL库) 》中介绍了关于如何使用NANO小车上的机器人控制板控制减速电机完成前进、后退和转向等基础功能,如果你需要知道如何实时测量汽车的速度?在这个章节里,你会学习如何使用纳诺驾驶板测量小汽车的速度!
准确获取车辆速度信息对控制系统具有关键的影响.编码器是一个转动传感器,将角速度或角度转换为数字脉冲。用户可以通过编码器来测量机器的速度.本文主要介绍了STM32与编码机的结合方法。详细介绍了具体的编码器原理.
在这个方程中使用的电动机是具有孔编码器的刹车电动机,它们由三个部分组成:刹车电动机、电动机和孔编码器。
孔编码器的工作原理:通过电磁转换的孔编码器,将机械位移转化为脉冲信号,输出两相A和B方波信号,A和B两相脉冲信号相差90°,通过在指定的时间检测脉冲数,和A和B相脉冲信号的相对位置,可以得到编码器的值及其运动方向.

那么,我们如何测量两个信号之间的脉冲数和相位关系?
STM32的计时器功能强大,有些计时器有编码模式,上述问题是可以解决的!通过STM32计时器的编码模式可以处理输入A、B信任数。并且可以设置STM32的编码模式,以便同时计数TI1和TI2信号的脉冲,即四倍频!检测的准确性可以提高.通过检测TI1和TI2之间的相关系,计算器可以实现上下计算,它能检测它的运动方向。

根据本文使用的减压器的参数,该电动机是11线孔编码减速机,减速比为1:30,也就是说,一个旋转圈可以输出11*30=330脉冲,经过STM32的四倍频率后,从电动机的转动中得到的脉冲数为330*4=1320,通过中断计时器,将速度采样周期设置为50ms,也就是说,每50ms都会读出计时器中的计数值。要得到最终的速度,我们还需要考虑轮胎的尺寸,根据纳诺小型车轮胎直径为65mm,因此圆C的长度是3.14*6.5:20.41厘米。参考以上参数,然后你可以计算汽车的速度。根据速度测量原理,设置在采样周期中传递的脉冲数值为N,旋转圆的电动机所获得的脉冲数为1320,圆圈在20公里.41厘米的距离上旋转。然后得到脉冲N运动的距离S=(0),2041*N/1320),除指定的采样周期时间外,可获得运动速度,完整的计算公式如下:

如何创建工程和系统配置,请参阅前文STM32机器人控制开发 Tutorial No.1驱动电机(基于 HAL库),本文主要介绍编码器相关的计时器的配置!
根据纳米驱动板的原理图,在与STM32相符的IO接口上找到双向电动机的相应的四向编码接口,并为模式配置找到相应的计时器。 如下图所示,使用两个电路的编码器分别与计时器2和3相符。

在STM32CubeMX中找到计时器2和计时器3,进行模式配置。下面是Timer2的一个例子,时间表3只能以同样的方式配置。选择计时器作为编码器模式,设置为不分频,最大数为65535,使能自动重装载,然后选择TI1和TI2的输入,实现四倍频效果。

配置完定时器2和定时器3后,需要再使用一个定时器,利用其产生50ms中断来读取当前的小车速度值,本次例程中采用定时器6产生中断。
周期为50ms,计算方法为:T=(arr+1)*(psc+1)/Tclk

当然,不要忘记了电机驱动的配置,毕竟还是得先动起来才能更好的检验其测速功能,电机的相关配置和驱动具体可参考上一篇文章。
完成配置后,由STM32CubeMX自动生成初始化代码,选择合适的编译器打开当前功能,进行驱动功能的程序开发。以下主要对编码器测速的相关代码进行解释,其余具体代码可参考例程文件。
该程序被下载到STM32机器人控制板上,并通过串行接口与高级机器通信。串行调试助理可以用于观察车辆在不同PWM值的运动速度。
下面的图显示了汽车在PWM信号占空比的10%时的速度:

当输出占PWM信号的90%时,汽车的速度如下:

通过使用上述计时器的编码模式,读取编码器的脉冲值。最后, 得到了汽车的实际速度.可以看到,在实际运行时,即使控制的PWM信号占有相同的空间比,左和右发动机的速率仍有些偏差.为了使速度更稳定,使加速效果更快速、更平滑,PID算法可以添加,控制电动机的速度.
PID可以分为位置PID和添加PID。这里没有详细说明PID的特定控制原则,但是在这个方程中使用的添加PID被强调。
额外的PID用于改变输出的大小来控制控制控制控制数量的稳定性。与位置PID不同,额外的PID返回的值是当前控制与以前控制之间的差值,差值被用来作为新的控制的反馈。
例如,设置汽车的速度为0.2米/秒,通过编码器测量速度得到速度反馈,设置值生成偏差e,并在系统中保存前偏差e(k-1)和以前的偏差e(k-2),这些三个值通过添加PID公式 Δu(k)作为输入计算,U(k-1)在最后的PID计算后加到增加 Δu(k),该控制周期的PID输出是u(k)。输出值通过二次计算转换后,给出了可控制电动机速度的PWM占用比.然后控制汽车的发动机速度.
添加PID的公式:Kp比例系数,Ki积分系数,Kd差分系数,e(k)偏差
Δu(k)=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
学习了添加PID的基本知识后, 让我们来看看如何用代码实现算法过程!
然后在前文中写好的定时器6的中断回调函数中调用PID函数,以50ms为周期对当前速度进行调整。
一旦编译代码,下载程序到STM32机器人控制板,您就可以享受开始订阅!
对PID的参数调整,一般采用下列原则:
首先调整比例系数Kp,然后调整积分系数Ki,最后调整差分系数Kd。
在调整Kp时,从小到大调整,选择小比例系数使得输出曲线基本上符合目标线。
调整Ki以消除 Ki 的静态错误.
调整Kd以增加调制器的响应速度.
PID调制的例子:(图中只显示左轮速度曲线,右轮速度曲线大致相同)
第一组PID参数:Kp=5.0, Ki=0.0, Kd=0.0
可以看到左轮和右轮的速度比目标速度20cm/s大,因此需要继续增加Kp值。

第二组PID参数:Kp=15.0, Ki=0.0, Kd=0.0
可以看到当前的速度正在增加,接近目标速度,而Ki现在参与调整。

第三组PID参数:Kp=15.0, Ki=0.5, Kd=0.0
你可以看到当前的速率值接近目标值20,两轮周围的速率接近相同的。 通过进一步提高基,可以减少静态误差,使最终的速率值接近20。

组4PID参数:Kp=15.0, Ki=1.0, Kd=0.0
在该组中,PID参数的速度可以调整,以便看到当前速度值和目标值只有0.1–0。

然而,同时,可以观察到从0cm/s增加到20cm/s的速度需要大约1秒的时间(见下图),并且加速时间太长,因此需要添加Kd函数来增加加速系统的响应速度,以更快地达到目标值。

第五组PID参数:Kp=15.0, Ki=1.0, Kd=1.0
通过曲线,你可以看到最终速度值相对稳定,并且响应时间比以前的组调试快。但实际效果并不明显,由于差动作用通常在具有更大的惯性系统中应用,所以控制小汽车的速度的效果并不那么明显,当Kd设置太大的时候,这会引起系统振荡,难以稳定,因此,在小汽车速度控制中,可以考虑消除差动效应。即Kd=0。

本文介绍了STM32机器人控制板的功能,以编码器读取小汽车的速度,实现PID速度。这是使汽车运行平稳和速度调整的关键!对于特定的驱动程序代码,你可以参考相应的实例文件。在下一篇文章中,继续向您展示如何使用板上的远程控制接口控制电动机和驾驶机器。以及如何使用STM32处理PPM信号,与您一起解锁更多控件面板的功能!

欢迎加入我们的交流群,该群面向热爱机器人研发的朋友们,方便大家一起学习、分享、交流智能机器人创造,结识更多志同道合的小伙伴。更有不定期的社区专属福利哦!关注公众号(COONEO)即可获取入群方式。
创作不易,如果喜欢这篇内容,请您也转发给您的朋友,一起分享和交流创造的乐趣,也激励我们为大家创作更多的机器人研发攻略,让我们一起learning by doing!
本文由 在线网速测试 整理编辑,转载请注明出处。