0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32的正交编码器驱动电机设计

西西 来源:博客园 作者:鸽纸 2020-09-10 16:25 次阅读

1。编码器原理

什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。

这里使用了TI12模式,例如当T1上升沿,T2在低电平时;T1下降沿,T2在高电平时,向上计数,这样的好处是当有毛刺产生的时候,会自动+1 -1过滤掉毛刺。

2。编码器的中断

由于编码器是基于定时器的,所以编码器的中断实际上就是定时器的中断。也就是说定时器是每隔一定时间加一个数(或减一个数 ),当数到达预设值时就产生中断,而编码器是每一个有效脉冲就加一个数(或减一个数 ),当数到达预设值时就产生中断。若预设值为1000则编码器与定时器中断不同的是,当编码器反转时值到达999产生一次中断,而当编码器正转到达0时同 样产生一次中断。在硬件上这两个中断是没法区分的,这也就造成了有种情况的误判。

3。STM32编码器没有考虑的情况

想象一下,如果编码器的预设值为1000,当某次我们使得编码器正转产生中断后,立即反转则又该怎么办呢?根据上面的说法,这时候会产生两次一样的中断。 如果在算法上没有处理的话,极有可能认为是行走了两次正向。但实际上并没有。所以这个时候必须结合方向来判断行走的情况(判断方向使用的是DIR寄存器 位)或者在产生中断后读一次count寄存器位(看看是999还是0,以此来判断当前的方向)。只有上一次为正且这一次同样为正,距离才是相加的。

4。STM32f1系列定时器16位的问题

我用STM32的定时器3工作于编码器方式,可以正常得到编码器位置,但由于现在只有16位计数,位数不够,我想扩展到32位,可以先用定时器内部连接,将定时器3 的溢出送到定时器2,用定时器2做高位,在正转的时候正常,但反向的时候出错。换了个思路,做个每10ms产生一次的中断,在中断中调用下面的代码,下述代码中MAX_COUNT是 比 10ms内可能出现的计数最大值还要大的值,ENCODER_TIM_PERIOD是定时器的period值,最好比MAX_COUNT大,然后定义一个32位的有符号变量,如currentCount,然后每隔10ms执行一次currentCount += Enc_GetCount();只需要去读取currentCount的值就可以得到位移信息了。

s16 Enc_GetCount(void)

{

static u16 lastCount = 0;

u16 curCount = ENCODER_TIM-》CNT;

s32 dAngle = curCount - lastCount;

if(dAngle 》= MAX_COUNT){

dAngle -= ENCODER_TIM_PERIOD;

}else if(dAngle 《 -MAX_COUNT){

dAngle += ENCODER_TIM_PERIOD;

}

lastCount = curCount;

return (s16)dAngle;

}

5。其它一些得到的信息

1.编码器有个转速上限,超过这个上限是不能正常工作的,这个是硬件的限制,原则上线数越多转速就越低,这点在选型时要注意,编码器的输出一般是开漏的,所以单片机的io一定要上拉输入状态。

2.定时器初始化好以后,任何时候CNT寄存器的值就是编码器的位置信息,正转他会加反转他会减这部分是不需要软件干预的,初始化时给的TIM_Period 值应该是码盘整圈的刻度值,在减溢出会自动修正为这个数。加超过此数值就回0.

3.如果要扩展成多圈计数需要溢出中断,程序上圈计数加减方向位就行了。

4.每个定时器的输入脚可以通过软件设定滤波

5.应用中如果没有绝对位置信号或者初始化完成后还没有收到绝对位置信号前的计数只能是相对计数。收到绝对位置信号后重新修改一次CNT的值就行了。码盘一般都有零位置信号,结合到定时器捕获输入就行。上电以后要往返运动一下找到这个位置。

6.即便有滤波计数值偶尔也会有出错误的情况,一圈多计一个或少计一个数都是很正常的特别是转速比较高的时候尤其明显,有个绝对位置信号做修正是很有必要的。绝对位置信号不需要一定在零位置点,收到这个信号就将CNT修正为一个固定的数值即可。

7.开启定时器的输入中断可以达到每个步计数都作处理的效果,但是高速运转的时候你可能处理不过来.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    41

    文章

    3357

    浏览量

    131424
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348519
  • 定时器
    +关注

    关注

    23

    文章

    3145

    浏览量

    112007
收藏 人收藏

    评论

    相关推荐

    编码器安装对电机测速的影响?

    有一台异步电机55KW安装欧姆龙的差分编码器CWZ1X,编码器安装在轴端托盘架子上,用三条螺栓固定在电机上,托盘和电机绝对是同心的,
    发表于 03-06 17:34

    伺服电机编码器故障及维修 伺服电机编码器调零对位方法

    伺服电机编码器是用来测量电机转动角度和速度的重要部件。然而,由于长时间运行、环境因素等原因,编码器可能会出现故障,影响电机的准确运行。下面
    的头像 发表于 02-14 18:06 3572次阅读

    伺服电机编码器调零对位方法

    伺服电机编码器调零对位是指通过调整编码器的零位来使得电机的位置精准对位。编码器是一种能够将物理量转换为电信号的装置,它可以测量
    的头像 发表于 01-25 11:32 1263次阅读

    求一份CS32L010F8U6的电机编码器捕获的代码

    使用CS32L010F8U6,电机编码器AB相输入,正交编码器电机正反转获取输出对应脉冲数与方向,求一份测试代码
    发表于 01-23 15:49

    磁性编码器和光电编码器的比较

    伺服电机编码器是一种关键的反馈装置,用于测量和控制电机的转速和位置。在选择伺服电机编码器时,常常面临一个选择:使用磁电
    的头像 发表于 01-18 10:29 650次阅读

    编码器种类及编码器原理

    编码器是一种将机械运动转换为数字电信号的传感器。当驾驶员想要控制电机旋转时,U、V、W三相电气输出驱动电机运行。为了将电机转到某个位置或角度
    的头像 发表于 01-17 17:02 614次阅读
    <b class='flag-5'>编码器</b>种类及<b class='flag-5'>编码器</b>原理

    伺服电机编码器原理及编码器分类

    伺服电机编码器原理 伺服编码器这个基本的功能与普通编码器是一样的,比如增量型的有A,A反,B,B反,Z,Z反等信号,除此之外,伺服编码器还有
    的头像 发表于 09-25 14:07 1062次阅读

    伺服电机编码器原理及编码器分类

    伺服编码器这个基本的功能与普通编码器是一样的,比如增量型的有A,A反,B,B反,Z,Z反等信号,除此之外,伺服编码器还有着跟普通编码器不同的地方,那就是伺服
    的头像 发表于 09-22 14:19 571次阅读

    伺服电机编码器分类

    伺服电机编码器是安装在伺服电机上用来测量磁极位置和伺服电机转角及转速的一种传感器,从物理介质的不同来分,伺服电机
    的头像 发表于 08-25 08:09 1793次阅读
    伺服<b class='flag-5'>电机</b><b class='flag-5'>编码器</b>分类

    伺服电机编码器原理及编码器分类

    伺服编码器这个基本的功能与普通编码器是一样的,比如增量型的有A,A反,B,B反,Z,Z反等信号,除此之外,伺服编码器还有着跟普通编码器不同的地方,那就是伺服
    的头像 发表于 08-23 10:58 972次阅读

    伺服电机编码器

    伺服电机编码器 伺服电机编码器是安装在伺服电机上用来测量磁极位置和伺服电机转角及转速的一种传感器
    发表于 06-26 14:01 978次阅读

    玩转电机驱动——电机编码器

    编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角 位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。(对于电机测速来说应该
    发表于 05-16 16:27 2次下载
    玩转<b class='flag-5'>电机</b><b class='flag-5'>驱动</b>——<b class='flag-5'>电机</b><b class='flag-5'>编码器</b>

    单级PID控制带编码器的直流减速电机速度

    STM32 Cubemax(七) —— 单级PID控制带编码器的直流减速电机速度目录 STM32 Cubemax(七) —— 单级PID控制带编码器
    发表于 05-16 15:51 3次下载
    单级PID控制带<b class='flag-5'>编码器</b>的直流减速<b class='flag-5'>电机</b>速度

    STM32 Encoder编码器使用总结

    的Encoder接口的电机运行,相应的仿真和实验都是基于一个1024脉冲的增量式光电编码器,关于模型的建模也是基于实际的实验电机和实际的编码器。Encoder 原理实物图如下,2500
    发表于 05-06 09:44 2次下载
    <b class='flag-5'>STM32</b> Encoder<b class='flag-5'>编码器</b>使用总结

    STM32控制编码器电机实现速度与位置闭环控制

    本实验所基于的硬件分别为: STM32F103C8T6 主控板 TB6612FNG 直流电机驱动模块 6线正交编码器
    发表于 05-06 09:26 2次下载
    <b class='flag-5'>STM32</b>控制<b class='flag-5'>编码器</b><b class='flag-5'>电机</b>实现速度与位置闭环控制