Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

时间:2024-05-19 14:29:05

我们先来看看定时器的编码器功能模块所在的位置

Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

这里的编码器模块最终会输出读出的定时器计数到的波形数量,以及输出波形的方向

 

Timer:选择对应的定时器

Channel A Input Pin:通道A的输入引脚

Channel B Input Pin:通道B的输入引脚

PPR:编码器转一圈产生的方波

Reset couter sfter every counter read:勾选后,读取完了以后就复位,重新开始计数(一般用于记录转换成速度)。没有勾选,就不会复位,一直累计下去(一般用于记录位置)

Built-in Iput Capture Filter:用于A、B相的波形的过滤,概率性检查波形去掉不规则的方波以提高测量精度

Sample time:多少时间读取一次数据(因为这里并不是定时器的精准定时,亲测0.01秒比较稳定,可以利用Timer-IRQ实现精准时间读取数据)

 

下图为本次实验的配置:

使用的编码器单圈脉冲为130

每0.01s读取一次数据

 

                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

 

我们再把每0.01s读取的数据转换成我们常用的数据速度单位(RPM,转每分钟)

                     Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

我来解释一下上面是如何转化成RPM的:

  1. 我勾选“重置计数器当计数器,当模块被读取后”,我的编码器每旋转一圈读取130*4=520个脉冲数,如果电机转动正时钟从0到780,如果反时钟方向则是从780到0,所以添加一个求和模块,如果电机转动反时钟则“780-计数”
  2. 我设置的采样时间为0.01秒,每0.01秒读取一次编码器模块的计数,所以rpm=计数/520*6000;

 

最终模型如下图所示

                        Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

下面为我们的上位机,箭头的模块是把数据导去工作平台,方便我们后面的滤波算法的设计;

                       Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

                                   Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

最后我们来看看它的实际测速效果:我们可以看到数据跳动非常大,这是我故意挑选的一个精度比较差的编码器,以及前面所说的Sample time定时不准造成的

                                  Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

最后我们把数据存起来

                 Matlab/Simulink 自动代码生成 基于模型设计学习教程(9)---- 编码器模式实验

 

 

 

如需进一步获得Matlab/Simulink 自动代码生成 基于模型设计学习教程的源代码包,请加QQ群:710443158