打印
[应用相关]

编码器及定时器中断

[复制链接]
529|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
编码器工作原理

编码器是一种将角位移或者角速度转换成一串电数字脉冲的旋转式传感器。分为光电编码器和霍尔编码器。

通过在电机的传动轴上加装一个码盘,电机带动码盘转动, 而发射机与接收器成一对:

    当光线穿过码盘孔的时候,接收器收到高电平
    当光线被码盘阻断的时候,接收器收到低电平

定义从低电平变为高电平的那一瞬间(时刻)叫作上升沿;从高电平变为低电平的那一瞬间(时刻)叫作下降沿。由此,通过计算单位时间内的上升沿次数、下降沿次数并用其除以码盘的孔数就可以计算出电机转速。为提高精度,通常同时获得上升沿、下降沿次数并求取平均值后进行计算。

使用特权

评论回复
沙发
在水一方00|  楼主 | 2022-7-30 23:32 | 只看该作者

使用特权

评论回复
板凳
在水一方00|  楼主 | 2022-7-30 23:33 | 只看该作者
常用的霍尔编码器也称AB相编码器,它通过电路信号的变化来获取电机的转速,为了得到电机转动的方向,此类编码器通过两个相近的发射器、接收器(A相、B相)同时接收信号值:

使用特权

评论回复
地板
在水一方00|  楼主 | 2022-7-30 23:34 | 只看该作者

使用特权

评论回复
5
在水一方00|  楼主 | 2022-7-30 23:42 | 只看该作者
引脚配置

博主所用的编码器电机型号为JGB37-520,其减速比为30F

使用特权

评论回复
6
在水一方00|  楼主 | 2022-7-30 23:44 | 只看该作者
1.引脚查询

博主所用开发版上封装了四个六线编码器电机接口,以电机接口MOTORA为例,学习如何使用编码器。

使用特权

评论回复
7
在水一方00|  楼主 | 2022-7-30 23:44 | 只看该作者
    AOUT1、AOUT2(1、6引脚)连接电机驱动TB6612FNG,用于控制电机正反转
    2、5引脚分别接GND和VCC,用于编码器供电
    PB3、PA15(3、4引脚)为编码器AB相,用于获取编码器数据。

使用特权

评论回复
8
在水一方00|  楼主 | 2022-7-30 23:45 | 只看该作者

使用特权

评论回复
9
在水一方00|  楼主 | 2022-7-30 23:45 | 只看该作者
2.设置引脚

打开CubeMX,设置编码器引脚。点击PB3引脚可以发现存在TIM2_CH2定时器通道,而PB15存在TIM2_CH1定时器通道。由此,我们可以设置2号定时器为编码器模式进行编码器数据的读取。

使用特权

评论回复
10
在水一方00|  楼主 | 2022-7-30 23:46 | 只看该作者

使用特权

评论回复
11
在水一方00|  楼主 | 2022-7-30 23:46 | 只看该作者
点击上方Pinout&Configuration子页面并点击左侧Timers选项卡,选择TIM2并将Combined Channels设置为Encoder Mode,此时默认将设置引脚PA0和PA1为定时器模式,需要点击PB3设置为TIM2_CH2,同时PB15将自动设置为TIM2_CH1。

使用特权

评论回复
12
在水一方00|  楼主 | 2022-7-30 23:47 | 只看该作者
随后,点击界面下方Parameter Settings将Encoder Mode设置为Encoder Mode TI1 and TI2,即表示同时检测上升沿和下降沿。

使用特权

评论回复
13
在水一方00|  楼主 | 2022-7-30 23:48 | 只看该作者

使用特权

评论回复
14
在水一方00|  楼主 | 2022-7-30 23:48 | 只看该作者
随后开启编码器所在定时器的中断,旋转下方菜单NVIC Settings并勾选Enable。

使用特权

评论回复
15
在水一方00|  楼主 | 2022-7-30 23:49 | 只看该作者

使用特权

评论回复
16
在水一方00|  楼主 | 2022-7-30 23:50 | 只看该作者
3.开启定时器中断

为保证编码器能够不断的读取信息,需要额外开启一个定时器,采用设置频率进行中断执行。选中3号定时器,进行如下设置:

    Clock Source:Internal Clock
    分频频率:7200 - 1
    计数周期:100 - 1
    auto-reload preload:Enable

使用特权

评论回复
17
在水一方00|  楼主 | 2022-7-30 23:50 | 只看该作者
即设置一个周期为10ms的定时器中断,随后再NVIC Settings选项下勾选Enable,开启中断。

使用特权

评论回复
18
在水一方00|  楼主 | 2022-7-30 23:51 | 只看该作者

使用特权

评论回复
19
在水一方00|  楼主 | 2022-7-30 23:52 | 只看该作者
4.中断优先级

由于编码器中断必须在定时器10ms中断内发送,故而编码器中断优先级高于定时器中断。在上方选项卡中确保页面在Pinout&Configuration子页面,选择左侧System Core选项卡下NVIC选项并将TIM3定时器优先级设置为1。

使用特权

评论回复
20
在水一方00|  楼主 | 2022-7-30 23:52 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

583

帖子

0

粉丝