Simulink 自动代码生成电机控制:STM32 Encoder编码器的使用指南

目录

Encoder 原理

STM32 Encoder 计数原理

模型仿真

模拟Encoder

基于Encoder计算角度和速度

关于启动的仿真

代码生成

运行演示

总结


总结一下基于STM32的Encoder接口的电机运行,相应的仿真和实验都是基于一个1024脉冲的增量式光电编码器,关于模型的建模也是基于实际的实验电机和实际的编码器。

Encoder 原理

实物图如下,2500P/R就是电机机械转360一共有2500个脉冲,实验用的是1024脉冲的,下图仅作参考

 线序

 内部结构

 对于工程应用来说,只需要知道它输出的信号有什么含义。如下:

A和B分别是脉冲数,不同的编码器可能电机转一圈的脉冲数不一样,精度越高,脉冲数越多

定义正转A超前,反转B超前

Z则表示电机已经转完一圈,如下图,机械一圈对应的电角度是2*2pi, 因为实验用的小电机是两对极的。

 从编码器的原理来看,想要得到电机的角度就需要计算脉冲数,当转速很高,脉冲频率也会很高,这个时候靠定时器来采样脉冲数变会变得不现实。这个时候就需要专用的Encoder接口了。

STM32 Encoder 计数原理

Stm32就提供了一个Encoder接口,根据其原理配置了Encoder的接口,工作原理如下,A对应TI1, B对应TI2,电机正向转动时计数器根据输入的AB信号,每一个上升沿加1,每一个下降沿也加1,这样对于1024脉冲的编码器,转一圈计数值就是4096。也可以配置成其他模型,这里我们配置成4096个计数值。

 Z信号的输入配置成一个外部中断,每触发一次把计数值清零,这样的话角度的计算值就限制在了0-4096也就对应成0-4pi的电角度了。如果不用外部中断触发的话直接读取计数器的值,这样角度就会从0-2^32。F401的Timer 2 计数寄存器是32位的。计算角度时对4096取模即可。这里实验配置成0-2^32。

模型仿真

根据STM32的Encoder接口可以知道,MCU底层能传递的只有0-2^32,反向递减的计数信息,因此生成代码的部分需要读取计数值,模拟Encoder的输出的角度信息,也就是模拟MCU的Encoder接口,最后加上控制系统把系统闭环。

模拟Encoder

如下,分别模拟了实际Encoder的信号以及STM32Encoder接口的输出,和实物一致。

 ABZ,以及当前电机的电角度

正转:                                                          反转:

 

 经过STM32的Encoder接口后,取模后

正转:                                                                反转:

基于Encoder计算角度和速度

底层Encoder接口拿到了脉冲计数,因此应用层需要把计算值转换成角度和速度信息,这部分是要生成代码的。在MCU里,角度的计算也放到ADC中断,也就是FOC计算的周期,这里是10Khz.

 两者角度完全重合在一起

 实际转速和Encoder计算的速度

关于启动的仿真

由于仿真的时候Encoder的初始计数值是0,电机的初始角度也是0,所以电机能正常启动并运行,但是实际中电机的初始角度和Encoder不可能完全在0位置对应且不变,这里通过模拟改变电机的初始位置。

如电机的初始位置改成10度,电机的实际位置和Encoder计算的角度就会有一个固定角度差,相电流也会因此变大。

 这个时候这里通过给定初始角度和Id, 让电机固定在一个初始位置,如0,这样就已知电机的初始角度为0,同时清除Encoder的计数值。如下是启动角度的变化:

其中,黄色是电机的真实角度,蓝色是Encoder计算出来的角度,红色是重置计数值的编码器的计数值计算出来的角度。电机初始不在零位置。

 

代码生成

底层只需要读取出Encoder的计数值,传递给模型生成的接口,启动前固定初始位置标志Encoder_Rest状态标志,当固定初始位置时把Encoder的计数值初始为0。

 集成代码,并下载到MCU

运行演示

在小风扇上安装一个编码器,并和开发板的Hall接口连接(接口支持Hall和Encoder),编码器和电机用联轴器连接,简单固定下进行测试。

 

ABZ编码器运行演示

总结

本实验通过仿真模拟了STM32单片机的Encoder接口,并对其进行角度计算,从仿真系统上实现了整个过程,也把启动和运行的流程通过模型生成代码在硬件上实现,验证了模型的可靠性。

物联沃分享整理
物联沃-IOTWORD物联网 » Simulink 自动代码生成电机控制:STM32 Encoder编码器的使用指南

发表评论