如何读取车轮转速?
01 车轮转速
一、前言
如果想要提高福来三轮车运动轨迹的精度, 则需要精确控制车轮的转速。 为此则要求单片机能够得到驱动电机的转速。 下面, 首先通过两个示例程序, 演示如何读取车轮的转速。 进而为后面的运动控制提供帮助。
二、示例程序1
首先, 在 OpenMV 开发环境中, 打开示例程序夹中的第五个测试程序目录, 其中包括有 Test Encoder 示例程序。 在运行前, 我们先分析一下这个程序的功能。 前面两行是导入所需要的定时器软件包。 time 是用来实现 程序时延, Timer 这是对应单片机的硬件定时器, 用于读取点击编码器转速。 下面再导入 LQ Module 中的两个软件包, 这也要求, 在 视觉模块对应的 U 盘中, 需要在根目录下拷贝有 LQ Module 这个软件。 下面程序中实际上只是使用了 第一个软件对象。
下面, 程序定义了三个 转速编码器对象。 我们以第一个对象初始化为例, 说明参数的功能。 第一个说明读取编码器脉冲所用的定时器编号, 以及定时器中断的频率, 对应的周期就是记录编码器脉冲的时间。 后面两个变量声明连接编码器两根正交信号线的管脚。 三个编码器所对应的管脚可以从 转接主板电路图中查到。
在程序主循环中, 前面利用 time 定义了循环体执行周期。
后面, 则利用 编码器对象的 Get 函数, 返回编码器 每隔 100ms 所记录的转速脉冲, 数值与电机转速成正比。 下面运行这个软件, 查看一下运行结果。
点击开发环境的连接按钮, 再点击执行按钮。 打开串口终端窗口。 可以看到程序输出三个编码器对应的数值。 现在电机都停止, 所以编码器输出数值都是0。
用手转动一个车轮, 可以看到终端输出编码读数中, 第二个编码器读数在变化, 转动方向不同, 编码数字出现正负变化。 更换另外一个车轮, 对应第一个编码器读数发生变化。 再更换一个车轮, 这是对应第三个编码器读数在变化。 转速的大小对应编码器读数的绝对值的大小。
三、示例程序2
接下来, 打开示例程序第五个目录下的第二个测试程序。 这个程序在第一个示例程序的基础上, 增加了直流电机控制对象。 这部分在前面电机控制示例程序中讲解过。 可以参见 第四个测试程序目录中相应的示例程序。 接下来Duty变量定义了电机PWM 的占空比, 决定了电机的转速。 后面的程序则与第一个编码器测试程序相同。 在主程序中。 设置电机转动所对应的 PWM 占空比。 前面 设置占空比为 60%。 实际上这三个设置电机占空比的语句可以放在 While 循环语句前面进行。 后面使用 编码器对象的 Get 函数读取电机编码器对应的转速。 下面运行测试一下。
点击程序运行, 可以看到三个电机同时转动, 串口终端输出编码器的数值, 大约在 -110 左右。 负号对应电机是逆时针旋转。 使用手给电机车轮施加阻力, 可以看到电机转速以及编码器的输出读数都在减小。 这也说明编码器输出数字的绝对值反应了当前 0.1 秒钟内的转速。
改变程序中, duty 变量的数值。 将它减小到 30。 程序执行之后, 电机转速变慢了。 编码器的输出也近似减小了一半, 读数为 -55 左右。
通过Python 编程, 可以读取对应 电机 PWM 占空比, 从 0 逐步变化到 80 , 对应的编码器的输出。 可以看到 占空比越大, 对应的转速的绝对值越大。 请注意, 由于此时对应的转速是负值, 所以曲线的斜率为负。 只是在 Duty 变量比较小的时候, 转速变化变得缓慢一些。
▲ 图1.3.1 不同的Duty数值对应的编码器的输出
※ 总 结 ※
本文介绍了在 MicroPython下, 如何读取三个电机转速编码盘的数值的方法。 利用了 LQ Module 软件包中的 Encode AB 对象, 可以非常方便读取编码器转动脉冲的速率, 进而可以实现对车轮的转速以及转动角度的测量。
■ 相关文献链接:
● 相关图表链接: