![]() |
ColeYao 发表于 2024-7-18 09:57 可以看一下我的 T 型速度规划函数: 梯形加减速规划的函数为 t_curve_compute, 它的思路为: 任意时刻,我们计算从当前位置减速停到目标位置,所需要的减速度为多少。 如果算出来的减速度比用户设置的目标减速度弱,那么表示当前还不着急开始减速,当前要么保持匀速,要么加速运行(如果当前速度小于目标速度)。 如果算出来的减速度比用户设置的目标减速度强,那么表示要开始减速了,再不减速要超过指定目标,没法停在指定目标。 由于我们是周期性运算,上一个周期计算出来不用减速,这一个周期计算出来需要减速,理论上是要在这两个周期之间的某个时间点就应该减速,我们推迟了一小会才开始减速, 说明我们用较高的速度已经移动了一段位移,如果此时按照用户设定的减速度开始减速,那么一定无法不超过目标位置。 这种离散计算带来的误差,我们通过适当放大用户设定的减速度来解决(代码中乘以 1.2 倍放大)。 最后,为了防止到目标位置停不下来,反复振荡,所以判断如果到达目标位置时,电机速度很慢,就直接停止。 (如果过快,要先超过再掉头,譬如用户临时修改目标位置到很近的位置。) 由于 T 型规划结尾处可能有点速度上的小跳动,由于最后还有一级 pid 可以起到平滑滤波的效果,所以没有不良影响。 |
本帖最后由 ColeYao 于 2024-7-18 10:33 编辑 dukedz 发表于 2024-7-18 09:34 考虑过使用PID位置环和速度环,起步时正常(经过适当调参数和修正可以做到比较理想的速度S曲线),主要是停的时候既要准确停在指定位置,又要恰好减速为0比较不好把握(简单粗暴的办法是1)到指定位置了,但速度不为零,直接让速度指定为0;2)还没到指定位置,速度已经为0了,再使用一个低速走到指定位置,这两个办法能实现目的,但给人的观感会较差),因此需要通过一定的策略来调整,最常见的就是仿生学,绝大多数人骑车或开车停在红绿灯前的停止线附近都停的很好,理论上单片机如果理解了其中的原理也能做到,并且比人做得更精准! |
本帖最后由 ColeYao 于 2024-7-18 09:32 编辑 dukedz 发表于 2024-7-18 09:19 步进电机不允许停的时候有轻微偏差,这是机器使用场合决定的,我这边一台设备,每几分钟走一次位移,每次位移偏差1-2个脉冲的时候,12小时左右运行是正常的,如果是运行24小时以上则会出现最终位置有几毫米的偏差,可能导致最终运行不正常,最终方案是加了编码器校正(如果步进电机没有走步偏差的话就可以省掉这个编码器,之所以加这个编码器是因为这个步进电机驱动是10多年前写的,没有加减速,因此很慢的时候就有失步现象,如果是现在写的话,应该可以省去编码器)。 |
本帖最后由 dukedz 于 2024-7-18 09:30 编辑 我的做法是下图,用户设置的目标位置先经过速度规划(或者理解成插补),然后再用 pid 追,梯形速度曲线经过 pid 柔和之后有点 s 曲线的感觉。 因为有速度规划,所以 pid 导致的位置超出很小,因为这套做法和 foc 伺服器一致,更高级的 foc 都做不到绝对的不超位置,为何要求步进一点都不超? ![]() 其它步进电机控制器往往会考虑精准输出指定数量的 STEP 脉冲,而我们不是,我们把步进电机当作普通有刷或无刷电机,譬如参见 CDFOC 的框图,开头的模块是相同的,只是精简很多。 我们使用位置环 PID 来让当前位置追随目标位置,PID 输出的速度值直接控制 pwm 输出的频率,pwm 输出的脉冲数会通过另一个 timer 记录下来,当作编码器读到的真实位置。 如果发多了一些脉冲出去,位置环 PID 会自动控制电机反转,直到当前位置等于目标位置。 更高级的 FOC 等伺服驱动器,也没法做到走到目标位置后,一点都不超,步进电机完全可以按照 FOC 伺服方式来控制,不用担心性能问题。 使用 PID 追随位置,虽然使用的是梯形加减速,但是被 PID 柔和之后,实际波形比较接近 S 型加减速,这样就同时拥有 T 型的简单、快速和 S 型柔和的优点。 如果我们需要增加真实的编码器做闭环,代码改起来会很容易,改为把编码器读到的位置信息喂给位置环 PID 即可。 这样,无论是有刷、无刷六步换相、无刷 FOC、步进电机,都是使用相同的控制架构,更加简单灵活。 我的代码(wiki 页面有中文说明): https://github.com/dukelec/cdstep 打不开可试试临时使用代理: https://kkgithub.com/dukelec/cdstep |
本帖最后由 ColeYao 于 2024-8-25 07:38 编辑 之前的4)的步进电机控制的速度曲线图详见之前的帖子: https://bbs.21ic.com/icview-3282010-1-1.html 步进电机运行使用PID加减速控制方式的策略讨论 ![]() https://bbs.21ic.com/icview-3345978-1-1.html [技术讨论] [size=1em]步进电机运动控制(PID控制)效果图分享 本帖中较完美步进电机PID控制速度波形图的生成策略请参考另一个帖子: http://www.51hei.com/bbs/dpj-236875-1.html 展示两个较完美S曲线的速度曲线图 |