概述
1.正交编码器的原理
通常,光电式编码器的输出信号有A信号和B信号,部分还会有Z信号,也叫做零点信号,本平台使用的电机只有A/B信号,当电机旋转时,A/B两路信号输出正交脉冲信号,这是测量电机速度的依据,之所以称为正交,是A相信号和B相信号的相位差为90度,如下图所示。
电机正向旋转时,A相信号超前B相90度;在反向旋转时,B相信号超前A相90度。衡量编码器测量精度的参数为编码器线数,例如一个2500线编码器,即表示电机旋转一周,A相及B相会分别产生2500个脉冲信号。通常,编码器计数时会采用四倍频方式,即在A相上升沿,A相下降沿,B相上升沿,B相下降沿都进行计数,所以一个脉冲周期实际计数4次,2500线的编码器旋转一周可以计10000个数,精度为0.036度。
2. STM32的正交编码器接口
大部分的中高端单片机都带有正交编码器接口,将A/B相信号接入单片机编码器接口,即可以对脉冲进行计数,我们定时(例如1ms)读取脉冲个数,就可以计算出电机速度,例如1ms读到100个脉冲,以2500线编码器为例,采用了四倍步计数的情况下,电机速度计算为:100x1000x60/10000=600rpm。STM32编码器计数原理如下图,它会根据电机的旋转方向向上或向下计数,有关STM32编码器模式请查看STM32数据手册,有详细解说。
3.基于HAL库的STM32编码器接口
让我们打开CUBEMX,一起来感受一下图形化编缉程序的高效之处,打开CUBEMX后,点击File—>New Project,如下图所示
在Part Number中填写使用的芯片,这里以STM32F103C8为例,双击芯片,如下图所示。
配置晶体时钟选择外部晶振及时钟,并在选择串行SWD程序下载接口,如下图所示
STM32的大部分定时器都带有正交编码器接口,我们这里选择TIM3,引脚对应STM32的PA6和PA7,改动红框中的参数,其他参数保持不变,如下图所示。
选择工程配置参数,如下图所示
选择代码参数并点击生成代码,如下图所示。
点击OPEN PROJECT打开工程 ,如下图
4.添加代码,实现速度测量
接下来的代码里我会添加一些中文注释,以便不了解HAL库的同学能够快速知道CubeMx是如何调用HAL库的,以及CubeMx调用HAL库帮我们做了什么。
首先,新建encoder.c/.h文件,并添加图中所示代码
然后分别在main.c文件以及中断函数文件stm32f1xx_it.c中添加以下代码,ps:别忘了包含头文件encoder.h
5.速度测量实验
采用硬件仿真的方式,用手转动电机,测得速度如图所示,实验成功,如果发现抖动较大,可以对速度进行滤波,采用滑动平均滤波或一阶低通滤波算法均可。
最后
以上就是风趣百合为你收集整理的直流电机开发笔记2—正交编码器测速(基于STM32)的全部内容,希望文章能够帮你解决直流电机开发笔记2—正交编码器测速(基于STM32)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复