使用单片机做步进电机控制的时候,经常碰到一些非常伤脑筋的问题,一是写步进电机控制时许确实很麻烦,正转反转,加速减速,得研究很长时间数学公式,特别是S加减速运动;二是单片机的计算速度不行,要求脉冲速度快的话,加减速需要计算变化的脉冲频率,计算不过来,特别是两个或多个电机要联动控制或者插补基本上就不行了,两个电机运动会出现明显的偏差。
所以能不能有其他简单快速的方案了?
经过很长时间研究后,我发现常规的运动控制完全可以使用单片机+一个专用运动控制芯片HMC80xx来实现,这样的话,复杂的加减速控制程序,多个步进高精度联动都由专用运动芯片来完成,单片机只需要通过通信接口写入控制命令就可以了。
话不多说,我们来看看具体的实现方案:
由上述的系统框图和单片机与运动控制专用芯片接线图可以看出,使用一个stm32或者C51等单片机+运动芯片控制步进或伺服电机,只要使用单片机的IO口连接运动芯片的总线,然后通过IO写入指令就可以。芯片本身提供了单片机可以直接调用的API函数,实现基本的定长加减速运动,多轴直线插补,圆弧插补运动的函数,单片机程序只要按说明直接调用函数,指定参数值就可以了。
比如定长加减速运动控制函数:
q 定长运动 功能:指定一个运动轴及曲线类型、运动方向、脉冲输出模式、初始速度、运行速度、定长运动距离、开始减速位置、加速时间、减速时间,以初始速度开始加速,在指定的加速时间到时加速到运行速度恒速运行,直到脉冲输出个数大于等于减速位置设定的个数时,开始减速,在指定的减速时间到达时减速到初始速度,并在完成运动距离时停止,如果SD减速开关从OFF->ON 转换并且没有到达设定的减速位置,并且SD_EN使能,将立即开始减速,然后以低速运行完成运动距离后停止。 函数:int DeltMov(int dev,unsigned int Axs,unsigned intcurve,unsigned int Dir,unsigned char Outmod,unsigned int Vo,unsigned intVt,unsigned int Length,unsigned int StartDec,unsigned long Acctime,unsignedlong Dectime,unsigned int SD_EN,unsigned int WaitSYNC);
|