ARM(MCU)+FPGA实现伺服电机脉冲信号精确控制

基于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值