请教下,同时控制3个伺服电机XYZ轴
请教下,怎么同时控制3个伺服电机XYZ轴?因为3个电机都有加速过程和减速过程,一个电机运行的时候,总会被其他2个干扰,最高脉冲是50khz。另外给STC一个建议,能不能针对伺服电机和步进电机的控制,出一些相关的寄存器,毕竟这2种电机在工控领域是必不可少的,谢谢
STC芯官网有开源案例的 可以参考www.STCAI.com
伺服电机你是指发方波脉冲信号吧?
方案1:使用STC8H系列、STC32G12K128系列,使用3路PWM工作于高速脉冲输出方式,3路最高50KHz没有任何问题,MCU跑24MHz以上,PWM中断设为优先级,其余中断均低优先级。
方案2:使用STC8G系列,使用PCA工作于高速脉冲输出方式,3路最高50KHz没有任何问题,MCU跑24MHz以上,PCA中断设为优先级,其余中断均低优先级。
方案3:使用STC8H系列、STC32G12K128系列,使用3个定时器工作于高速脉冲输出方式,3路最高50KHz没有任何问题,MCU跑24MHz以上,PWM中断设为优先级,其余中断均低优先级。
梁工 发表于 2022-12-20 11:00
伺服电机你是指发方波脉冲信号吧?
方案1:使用STC8H系列、STC32G12K128系列,使用3路PWM工作于高速脉冲输 ...
同时使用3路脉冲是没问题的,但是有加减速过程比较麻烦,在运行过程中还要减去已运行的步数和计算总的步数 本帖最后由 梁工 于 2023-2-6 13:31 编辑
如果要控制步数,则启动前就已经确定了总步数,加减速、目标速度等等参数都已经计算好,按一定的时间节拍来处理加减速即可。我以前做过6个电机的控制,用的是STC8A8K64S4A12(现在改版为STC8A8K64D4),4路PCA+Timer3+Timer4,6路电机。
如果使用STC8H、STC32G等等,则可以用8路电机,因为有8路PWM,每路都可以工作于匹配比较方式。 梁工 发表于 2022-12-20 18:15
如果要控制步数,则启动前就已经确定了总步数,加减速、目标速度等等参数都已经计算好,按一定的时间节拍来 ...
你好,能不能给个思路,假设
电机1的开始转速是1khz,目标转速是50khz,总步数是10万步
电机2的开始转速是3khz,目标转速是40khz,总步数是10万步
2个同时转,怎么样处理加减速? sky999 发表于 2022-12-20 19:33
你好,能不能给个思路,假设
电机1的开始转速是1khz,目标转速是50khz,总步数是10万步
电机2的开始转速 ...
计算好各个参数后(由当前转速、加减速时间、目标转速加减速步进量),然后启动电机,用固定节拍(时间间隔)进行加减速处理。线性加减速最简单方便,S型则较为复杂些。 本帖最后由 一轮明月 于 2023-1-18 07:56 编辑
sky999 发表于 2022-12-20 19:33
你好,能不能给个思路,假设
电机1的开始转速是1khz,目标转速是50khz,总步数是10万步
电机2的开始转速 ...
我做过相关案例,当时想用PWM做伺服电机驱动3轴,但后来改用定时器中断,因为硬件PWM我没有找到精确计数方式就用中断脉冲的计数.
刹车减速是自己做的S形减速算法,脉冲起始和结束先找到预刹车脉冲数然后逐步修改脉冲周期,例如1万步就是1万个脉冲设计转速1Khz,比如调试轨道必须在起始2秒和结束2秒先刹车才能不发冲,那就各分出2K脉冲做刹车,剩下6K的脉冲才是设计脉冲,那启动的2K就由2HZ>10HZ>60hz...>600HZ>800HZ这样按周期发命令改变脉冲周期直到脉冲数满2K就发设计脉冲并计数,计数到最后2K的脉冲又反过来逐减直到脉冲发完周期到2HZ.
这是个死办法,但只要S曲线算法和调试的预留脉冲适合那启动和结束基本不发冲.
老早我就提出过这种问题,针对步进伺服专门开发寄存器
我们现在用32晶振33兆4轴也才勉强100K
关键是算法,用简单点算法吧,每步固定步数吧!(我们是其他算发),尽量不要用每一步都计算,尽量定时器中断内时间短。50K应该没问题.
32单片机频率还是只有几十兆,将就用吧!
有一点注意
定时器是溢出值,PWM是比较值
32单片机只有2个PWM定时器
如果其他地方不用理论可以控制7轴,越多就要求单片机速度快,处理中断时间短,或是目标频率降低