基于江科大标准库的编码器测速

一、原理部分

转得越快方波的频率就越高,取任意一相的频率便可以知道速度。正转和反转是极性的问题,不是绝对的,就是一个相的信号要么提前要么滞后。

编码器接口的设计逻辑是:首先把A相和B相的所以边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减。到底是增还是减?计数的方向是由另一相的状态来确定。当出现某个边沿时,我们判断另一相的高低电平。如果对应另一项的状态出现在上面的表里那就是正转反之就是反转。

定时器的预分频器和CCR寄存器与编码器接口无关。我们之前一直在使用的72MHz的内部时钟和在时基单元初始化时设置的计数方向并不会使用。

编码器接口的输出部分就是去控制CNT的计数时钟和计数方向,CNT的自增和自减就是这个硬件设计自己弄好的,根据上面的那张表来看,自行判断自增还是自减,我们看软件上面的CNT显示出来的值就知道编码器有没有接反了。

其中的预分频器一般是选择不分频,一般设置ARR为65535。但是我不知道为什么我的编码器的反转计数不是65535往下减,而是4的后面一长串数字。

正转是向上计数,反转是向下计数。这个是规定的,电路就是这么设置的。假设用TI1FP1接的是A相,那么A相看A相的上升沿。如果此时B相对应的电平是低电平,那么这个时候就是正转,向上计数反之向下计数。

表里面的在TI1和TI2上计数,就是AB相的上升沿下降沿都会看,并且判断此时相对信号的电平来判断是正转还是反转是向上计数还是向下计数。如果是仅在TI1计数或者是仅在TI2计数,那么这个时候就看的是A相的上升沿或者是下降沿或者是B相的上升沿或者是下降沿然后来看相对信号的电平来判断上升沿还是下降沿。

一般选择的是在TI1和TI2上面计数,这种计数方式精度最高。正交编码器的抗噪声原理也在这节课里面,感兴趣可以了解一下。

二、代码部分

调整编码器的极性:比如接一个编码器发现它数据的加减方向反了,想要正转的方向结果自减了,可以换AB相的引脚(其实这个没太听明白)。它这个好像是在标准库里面写代码,可以软件控制反不反相,我一般使用的是hal库,所以应该只需要外接的线换一下。

测编码器的位置:读出CNT的值。测量编码器的速度和方向:每隔一段时间取出一次CNT,然后把CNT清零,这就是测频法测量速度。

用江科大的OLED显示可以显示负数。

这个代码里面有三个点:

1、uint只能返回正数 int就能够显示负数

2、如果没有清零函数,就是可以测量轮子转一圈的脉冲,可以一直加

3、编码器测速的话,就是首先你要加一个清零函数,然后在一个定时器中断里面读取这个编码值,如果是10ms,那么测出来的就是10ms的一个速度,可以把这个速度放到pid里面去用作速度环

相关推荐
star learning white13 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
新晨单片机设计14 小时前
S006A-基于STM32单片机温湿度检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
逐步前行16 小时前
ESP32-S3-分区表(Partition Table)
单片机
星河单片机16 小时前
STM32驱动HS‑S37A水位传感器+OLED完整实验讲解
stm32·单片机·嵌入式硬件
代码不接地16 小时前
【EDA】0.公共部分&元件库设计
嵌入式硬件
糖糖单片机设计17 小时前
STM32水稻苗大棚环境监测系统
stm32·单片机·嵌入式硬件
star learning white19 小时前
STM32入门学习3
stm32·单片机·学习
jianqiang.xue19 小时前
审查技能库(上):内存安全四件套
stm32·单片机·物联网·架构·esp32
XiHongShi201619 小时前
cpuz分享,建议保存
单片机·学习
恒锐丰科技林技术员19 小时前
EG2226 全桥驱动芯片:高压电机逆变驱动的高性价比方案
经验分享·嵌入式硬件·硬件工程