视频
提高部分-第4讲 编码器的使用(1)_哔哩哔哩_bilibili
编码器简介
编码器分类
增量编码器: 着重计算的是位移和速度。
磁电式+增量编码器
霍尔传感器会通过霍尔效应,将磁场信号变成脉冲信号的输出 单片机通过检测脉冲信号 就能测量出位移和速度了。 速度计算:已知转一圈的总脉冲数, 利用 某一段时间 单片机接收到的脉冲数/总脉冲数就知道(转速/某时间)
为什么要有 A B两个霍尔传感器通道,且A B两个通道 有一定的错位?
错位会有90°相位差(如下图所示)
答:因为 不止需要测量它的速度,还需要测量转向。
例如:磁盘在逆时针旋转时 a在前,b在后 此时 a先获得上升沿, 90°后 b 获得这个上升沿。
光电式+增量编码器
利用光电系统,将位移转换成计数脉冲,用脉冲个数计算位移和速度。
编码器参数
分辨率(编码器单位)(在实际中叫精度)
编码器总分辨率 = 编码器 一圈所计算的脉冲数(但由于定时器会倍频 所以计算时要乘以倍频系数) 在淘宝上看的分辨率=物理分辨率 实际分辨率=物理分辨率 * 定时器倍频数(一般是 4 )
假如 编码器PPR = 10 4分频 则 编码器总分辨率 为 10*4=40
PPR(也称为 多少线)
2、PPR:PPR是指编码器在一个完整的旋转周期内输出的脉冲数。编码器通过光电或磁性传感器来检测旋转运动,并将其转换为脉冲信号输出。
SR
1、SR:SR是指编码器在一个完整的旋转周期内输出的离散步数。表示编码器的输出信号在一个旋转周期内的离散变化次数。例如,编码器的分辨率为1000SR,那么在一个完整的旋转周期内会输出1000个离散的步数。
精度(实际上是一个误差值)
是 编码器输出 和 实际值 的 误差值
最大响应频率
最大转速
电机减速比
直流减速电机 会有电机减速比
例如 减速比 30:1 编码器 算出:300转 /分 所以 实际转轴输出转速 = 300/30 =10转/分
增量式编码器倍频技术
输出脉冲波形信号 的两种形式
1.占空比50%的方波,通道A和通道B 相位差 90°
2.正弦波 这类模拟信号 通道A和通道B 相位差 90°
基于方波的编码器倍频技术 分辨率倍频(更精准了)
编码器计数规则:
码盘透过光线时 输出1(高电平)
通过检测 高电平的数量来判断转过的位置
通过 检测A和B谁先到达高电平来 判定 运动的方向
我们将 检测高低电平变化的 思路 转换为 使用单个通道 上升沿 和下降沿 进行计数的模式 就能实现倍频
如下图 累计脉冲计数
如果 通道A 上升沿 和下降沿 都计数 一次 就能得到 X2的图形
如果是 A B 相组合(A B通道相差1/4个周期) 上升沿 和下降沿 就能得到 X4 的图形
编码器接口介绍
为什么叫 带有方向的 外部时钟
增量式编码器旋转的话就会输出相应的脉冲信号 脉冲信号作为 定时器 的外部时钟来源(定时器的时钟其实相当于这种脉冲信号) 定时器的时钟就是桉数计时的
脉冲信号来得越快 编码器计数就越快 旋转速度就和计数的快慢 就形成了一个连接
有方向 就是 A B两相
通过方向的识别 编码器是正转还是反转 对应成了 计数器是 增加还是 减少
STM32编码器接口框图
编码器产生两路脉冲信号 a b 输入到 定时器的 通道一和通道二(通道三和通道四不支持编码器模式)
编码器常用测速方法
测量方法:
对于 电机 转速 的测量 可以把 增量式 编码器 安装在电机上 用编码器的轴连接电机的轴, 用控制器(STM32)对编码器进行计数 最后通过 特定的方法 求出电机的转速。
测速方法:三种(M法、T法、MT法)
电机测速 M法:频率测量法 用定时器计时 溢出中断
M法:
n(转速 r/s)= M0(编码器单位时间内的脉冲数) / (T0(单位时间)* C(单圈的脉冲数))
即 单位时间内的脉冲数 / 单圈的脉冲数
推导方法:
M0 / T0 = 1秒的总脉冲数 M1
M1 / C = 1秒转过多少圈(转速)
在理想 测量过程中 开始测量到结束测量(一个测量周期内) 得到的脉冲数 恰好是整数个脉冲数。
但实际上 开始计时时刻 和结束计时时刻 可能在 一个周期的任意一个位置
会使我们最大会有两个脉冲的误差。
在速度越高时,2个脉冲误差的误差就比较小,
但在低速时,M0只有几个脉冲 此时2个脉冲误差的误差值就比较大.
例: 已知 编码器转过一圈 脉冲数 4000, 在 2 S 内 测出来 产生脉冲数为 8000 可以理解为
转过了2圈用了2S 转速就为1圈/秒。
电机测速 T法:周期测量法
T法:
n(转速 r/s)= F1(测量的脉冲频率) / ( C(单圈的脉冲数) * M2(测量的脉冲数)) = 1 / C * TE(编码器两个脉冲之间的时间)
推导方法 :
1 / F1 = T1(周期), T1 * M2 = TE
TE * C = T2 (编码器转一圈所用的时间)
1秒 / T2 (即1秒内转过多少圈 (转速) )
T法更适合测低速 和M法相反
电机测速:MT法
F0和C都为常数 转速n由 M0 和M1决定
STM32的编码器接口
(TM32定时器功能 编码器功能高级定时器 1 8 通用定时器 2 5 才有)
通过 计数方向 是+/- 得到 编码器 的 旋转方向 向上计数--正向 向下计数---反向
假设: TI1:编码器通道A T12:编码器通道B
TI1FP1:反向后的TI1 = 反向后的编码器通道A TI2FP2:反向后的TI2 = 反向后的编码器通道B
相反信号的电平:计数时,所参考的 另一个通道的电平
这些电平决定了 计数器的技术方向
通过上表整理得到下表:
TI1比TI2 提前1/4 个周期
如果以 TI1边沿为检测边沿 当检测到TI1的上升沿(高电平)时 TI2为 低电平 此时计数器就向上计数一次
当T1 为下降沿时 TI2为高电平 计数器 依旧 向上计数一次
TI1比TI2落后1/4 个周期
以 TI1的边缘 作为检测边缘
当检测到TI1上升沿时 TI2为高电平 此时 计数器 向下 计数一次
下一个时刻 检测 TI1的 下降沿 TI2为低电平 此时 计数器 再向下 技术一次
代码实现方式:(时基初始化结构体 编码器初始化结构体)
高级定时器 1 8 通用定时器 2 5 都有 编码器接口
对于STM32结构体中对于编码器的意义
EncoderMode :
编码器模式 可以选择 通道A计数 通道B计数 A/B双通道计数
(实际上是选择 2倍频还是4倍频)
通道A 和通道B 的设置 是一样的!!
IC1/IC2Polarity:
输入捕获信号 极性选择 在编码器当中 选择 反向或不反向 一般选择不反向
在输入捕获模式中 用于选择 触发的边沿 但是在编码器模式中 用于输入的信号是否反向(这个和编码器计数触发边沿没有关系!!),只是用于匹配电机和编码器的旋转方向
如果编码器的计数方向 与实际电机的旋转方向相反 只需要修改这一个选项就能匹配电机的旋转方向。 而不用再去修改硬件电路的连接。
选择 输入信号是否反向 用于 设定编码器输出的运动方向与实际的运动方向是相同还是相反 RISING是相同??
IC1Selection :
选择 输入通道 是直连还是非直连 但 编码器模式 只能用于直连
ICPrescaler 和 ICFilter :
对输入信号的 分频和滤波 在实际采样中会对采得的信号 进行补偿 所以这两个选项很少用
电机测速
电机滤波 --冒泡排序
int i,j,temp;
int data[10]={1,5,4,3,9,10,15,14,6,0};
for(i=10,i>=1;i--)
{
for(j=0;j<i-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
一阶低通滤波
Y(n) = q*X(n)+(1-q)*Y(n-1)