做平衡小车的基本都知道平衡小车的控制可以分为三部分的叠加: 直立控制, 速度控制, 方向控制. 直立控制是最主要的 这三部分控制是最终叠加来输出一个值来控制电机转速的. 我看了一些资料有说到直立控制周期为5ms, 速度控制周期为100ms. 然后为了不太影响到直立控制, 要把速度控制的较为缓慢和平滑, 说是把速度控制的输出变化量平均分配到20步5ms的控制周期中. (暂时不考虑方向控制 假设直立控制输出量:b; 速度控制输出量:s; 最终给电机的控制量(5ms每次): P) 我的理解是:
理解一. P = b+s/20 * i; (i初始值为1 然后++i/5ms, i满20后又为1)
理解二. P = b+s/20;
大家感觉哪个才是正确的呢??? 求解啊!!!
2019-1-21 09:47:27
嗯,飞思卡尔官方给出的那个程序没用过,不过看你给出的代码确实是你说的那样,“输出是在上次输出的基础之上慢慢改变的,是增量的”。不过,一定要有上一次速度的状态(g_nMotorOutSpeedOld),形成无论何时电机的速度都是渐变的。不知道飞思卡尔这种设计方案怎么样,我项目中的机子鲁棒性不太好,我之前的速度控制方式实现出来的效果不太好。
嗯,飞思卡尔官方给出的那个程序没用过,不过看你给出的代码确实是你说的那样,“输出是在上次输出的基础之上慢慢改变的,是增量的”。不过,一定要有上一次速度的状态(g_nMotorOutSpeedOld),形成无论何时电机的速度都是渐变的。不知道飞思卡尔这种设计方案怎么样,我项目中的机子鲁棒性不太好,我之前的速度控制方式实现出来的效果不太好。
举报
2019-1-21 10:14:00
我曾经做过一个项目关于平衡小车的,直立控制、速度控制以及方向控制都采用5ms控制周期,比较接近你的理解二,理解一应该是有问题。
我曾经做过一个项目关于平衡小车的,直立控制、速度控制以及方向控制都采用5ms控制周期,比较接近你的理解二,理解一应该是有问题。
举报
2019-1-21 10:23:22
看到一个类似理解一的
上图是飞卡官方给的<<直立车参考设计方案>>的速度控制的代码.
红框部分的子程序是每隔5ms调用的(另一个是每隔100ms调用一次), 这很像我的理解一啊. 只不过他的输出是在上次输出的基础之上慢慢改变的,是增量的.
看到一个类似理解一的
上图是飞卡官方给的<<直立车参考设计方案>>的速度控制的代码.
红框部分的子程序是每隔5ms调用的(另一个是每隔100ms调用一次), 这很像我的理解一啊. 只不过他的输出是在上次输出的基础之上慢慢改变的,是增量的.
举报