基于MCU+FPGA时间切片,MCU端实现运动规划,FPGA接收规划后的指令数据,精确产生信号脉冲。
基本思想是把一段运动分割成N个小时间段,按时间段将运动过程进行切片分割,一个时间段称为一个时间单位T,时间单位可以分割至微秒或者毫秒级。MCU接收来自FPGA的位置反馈信息由MCU通过程序规划进行时间片段的切割划分,将每一个时间单位T内的运动控制参数数据发送给FPGA,由FPGA发出精确脉冲指令传给伺服驱动器驱动电机。
[后面以T=5毫秒为例] ,ARM/MCU作为决策机构负责运动的规划,运动数据参数通过总线下发给FPGA,FPGA作为底层执行机构,负责精确地生成脉冲信号。
基于以下三种方式实现精确的电机脉冲信号控制:
1、基于脉冲个数,MCU下发每个5毫秒内的脉冲个数,FPGA根据每个5毫秒的脉冲个数生成脉冲信号;
2、基于脉冲频率,MCU下发每个5毫秒内的脉冲频率,FPGA根据每个5毫秒的脉冲个数生成脉冲信号;
3、MCU下发一整段运动的运动参数,包括脉冲个数和加速度,最大速度,FPGA根据加速度等运动参数自动规划生成符合要求的脉冲信号,实现加速,匀速,减速运动控制。
【本方案难点在于如何解决不同频率下脉冲个数的精度问题,实现任意频率变化下的总脉冲个数的精确闭环,不会产生控制误差】
运动过程切片如下所示:
--------------------------------------------------------------------------------------------------------------------------------
一、编码器位置反馈输入模块
该模块将正交编码器通过高速光耦输入的AB相信号进行解码,得到当前伺服系统精确的的位置信息。编码器的原理是根据A,B相的相位差,即相位的领先或滞后来判断编码器转轴旋转方向,根据编码器旋转产生的脉冲来计数。如果电机正转,也就是电机主轴按顺时针方向旋转时,A相输出超前B相90度。如果反转也就是电机主轴按逆时针方向旋转时,A相滞后B相90度。电机每转一周,索引相即Z还输出一个零位脉冲,可作为编码器的机械零位。
编码器解码模块的功能是判断电机转动方向,对编码器脉冲计数。工作方法是:
判断方向:如果B相从低变高的时候A是高电平,则表示电机正转,如果B相从低变高的时候A是低电平,则表示电机反转。
脉冲计数:设置一个32位的计数器,该计数器在复位的时候可以清零,也可以通过指令清零。计数的逻辑是对A,B相变化沿进行计数。当电机正转时,A的上升沿、A的下降沿、B的上升沿、B的下降沿各加1;当电机反转时,A的上升沿、A的下降沿、B的上升沿、B的下降沿各减1;
于是正转时每接收到一个脉冲计数器加了4,反转时每接收到一个脉冲计数器减了4,实现4倍频计数。计数精度提高了4倍,这样就提高了定位精度。
AB相的时序关系见下图;
部分仿真波形:
下面以第三种情况,MCU给运动参数,包括加速度,脉冲个数,目标频率,下发给FPGA,FPGA自动执行梯形加减速规划为例:给出仿真波形:
如下:
为方便截图,将仿真数据设置偏小。
设置频率加速度为100hz/5ms^2,目标频率=2000hz,脉冲个数=300。频率从零开始逐次递增100HZ,达到2000hz以后 开始保持一段,之后开始减速。直到执行完300个脉冲。
___________________________________________________________________________
微信号:tecliu_23