【小项目关键技术二】UGV电机编码测速
测试程序
#define PinA 2 //外部中断0
#define PinZ 3 //外部中断1
#define PinB 9 //编码器的OUT_B信号连接到数字端口8
#define T 200 //定义采集时间周期单位ms
unsigned long time1 = 0; // 时间标记
volatile long PulSum_CW = 0; //定义长整型不可修改脉冲数
volatile long PulSum_CCW = 0; long PulSum_CW_t0 = 0; //定义记录顺时针方向 t0 时刻脉冲数变量
long PulSum_CW_t0_T = 0; //定义记录顺时针方向 t0+T 时刻脉冲数变量float Rad_CW_Speed = 0.000; //定义顺时针角速度
float Rad_CCW_Speed = 0.000; //定义逆时针角速度long PulSum_CCW_t0 = 0; //定义记录逆时针方向 t0 时刻脉冲数变量
long PulSum_CCW_t0_T = 0; //定义记录逆时针方向 t0+T 时刻脉冲数变量// 记录角度
int Rad = 180;void setup(){pinMode(PinA, INPUT_PULLUP);//因为编码器信号为欧姆龙E6B2-CWZ6C,为开漏输出,因此需要上拉电阻,此处采用arduino的内部上拉输入模式,置高pinMode(PinB, INPUT_PULLUP);//同上attachInterrupt(0, Encode, FALLING);//脉冲中断函数:捕捉A相信号,并判断A、B相先后顺序Serial.begin (9600);
}void loop()
{// 角度计算程序Rad = int((PulSum_CW - PulSum_CCW)/6.944) % 360; if (Rad>=180) {Rad = Rad - 360;}PulSum_CW_t0 = PulSum_CW; PulSum_CCW_t0 = PulSum_CCW; //采集t0时刻的脉冲数delay(T); //等待一个T时间PulSum_CW_t0_T = PulSum_CW; PulSum_CCW_t0_T = PulSum_CCW; //采集t0+T时刻的脉冲数delay(T); //等待一个T时间// 如果检测到正向角速度,那么就打印角速度,以及累计的角度if (PulSum_CW_t0_T - PulSum_CW_t0 != 0){Rad_CW_Speed = (PulSum_CW_t0_T - PulSum_CW_t0); //// 显示正向(CW)角速度 Rad_CW_Speed---> //打印出来速度//Serial.print("AS:"); //打印出来速度wSerial.print(Rad_CW_Speed);Serial.print(":"); //Serial.print("/A:");Serial.print(Rad);Serial.print("\n");} // 如果检测到反向角速度,那么就打印角速度,以及累计的角度if (PulSum_CCW_t0_T - PulSum_CCW_t0 != 0){Rad_CCW_Speed = (PulSum_CCW_t0 - PulSum_CCW_t0_T);//Serial.print("AS:");Serial.print(Rad_CCW_Speed);Serial.print(":"); //Serial.print("/A:");Serial.print(Rad);Serial.print("\n");}}
void Encode()
{//当编码器码盘的OUTA脉冲信号下跳沿每中断一次,//if ((millis() - time1) > 5)//{if ((digitalRead(PinA) == LOW) && (digitalRead(PinB) == HIGH)){PulSum_CW ++;}else{PulSum_CCW ++;}//}//time1 == millis();
}
注意事项
- 单片机需要用到中断引脚,因此需要考虑中断数量足够的单片机UNO/Nano。
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.7c462e8dW1JbJF&id=624810490543&_u=g1o5c92q9ce3
How to use the L298N Motor Driver
轮子直径:42mm
一圈的周长为:π⋅d\pi \cdot dπ⋅d = 3.14 * 42 mm = 131.88 mm
观察电机参数可知:旋转一圈产生2个脉冲
其中有个参数为基础脉冲:7ppr,理解为pulses per revolution电机每转的脉冲数,即电机不转编码器也会产生7个脉冲。不过我们使用的测速方式是取一段时间的脉冲差值,所以不影响测速效果。
测试了一些数据,关于电机设置最大PWM=255时,电机在不同的时间间隔产生的脉冲数
PWM | 时间间隔 | 脉冲数(左电机) | 脉冲数(右电机) |
---|---|---|---|
255 | 1000 ms | 1933, 1936, 1947, 1940, 1951 | 2074, 2073, 2074, 2079, 2070 |
100 ms | 142, 143, 142, 141, 142 | 205, 205, 206, 204, 205 | |
200 ms | 338, 342, 343, 344, 345 | 205, 205, 206, 204, 205 | |
500 ms | 960, 958, 958, 959, 956 | 1037, 1037, 1036, 1038, 1040 |
PWM | 时间间隔 | 脉冲数(左电机) | 脉冲数(右电机) |
---|---|---|---|
55 | 1000 ms | 1032, 1031, 1029, 1033, 1032 | 1139, 1151, 1153, 1139, 1156 |
100 ms | 34, 33, 33, 32, 31 | 61, 59, 61, 61, 60 | |
200 ms | 104, 106, 101, 105, 101 | 173, 173, 173, 175, 175 | |
500 ms | 421, 427, 423, 426, 426 | 551, 552, 553, 554, 555 |
测量时电池电压:7.44 V
最高输出255时,电机测量脉冲近似为2000个(因为只测量了下降沿,全算上应该是4000个),即转了2000圈。而电机的减速比为40:1,那么编码器的2000就等价于轮子的50圈,与所标参数一致。
换算成实际距离,电机的全速运转时转速为131.88mm/s。这是理论计算出来的速度。
实际测试,8s 运行了3块地砖,也就是120cm,速度大概是150mm/s。
而一圈是131.88mm,等价于1.14转/秒。一秒产生了2000个脉冲。
通过上述分析,暂时建立如下关系
输出功率 | 时间 | 圈数 | 脉冲数 | 距离 | 速度 |
---|---|---|---|---|---|
255 | 1s | 1 | 2000 | 131.88mm | 13.19cm/s |
55 | 1s | 1 | 1000 | 131.88mm | 7.19cm/s |
最小速度为 7cm/s。
【小项目关键技术二】UGV电机编码测速相关推荐
- 【小项目关键技术】硬件通信三种方式、串口、IIC、SPI
文章目录 串口UART: IIC SPI SWD 仿真下载接口 串口UART: 引脚 功能 VCC GND TXD 发送数据输出引脚. RXD 接收数据输入引脚. IIC 引脚定义为:SCL.SDA ...
- 【小项目关键技术六】控制北斗 GPS 定位 / UWB 室内定位
文章目录 UWB 定位 GPS 定位 UWB 定位 产品链接:维特智能UWB室内定位传感器模块平面坐标二维厘米级通讯距离测量 产品资料地址:(打开网站搜索型号获取资料) 模块实物如下: 指令 功能 0 ...
- 【小项目关键技术五】控制全彩 WS2812 灯环/灯带
Ref: Arduino控制WS2812灯带(灯环) #include <FastLED.h>#define LED_PIN 13// Information about the LED ...
- 【小项目关键技术七】MPU6050
Ref: MPU 6050 Tutorial | How to Program MPU 6050 With Arduino connections for our Arduino UNO and NA ...
- 【小项目关键技术四】液晶显示屏
分享一个刷新率比较高的,利用的是 UTFT.h 的库. 完整版资料地址为:https://pmdway.com/blogs/product-guides-for-arduino/using-the-0 ...
- 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...
- Python小项目——生成个性二维码
Python小项目--生成个性二维码 现代社交离不开微信,QQ,那么今天就教你用 Python 生成自己的个性二维码
- STC用PCA测量脉宽_利用微处理器设计的电机数字测速系统,抗干扰能力强、测量精确...
为了满足工业电气控制中对发动机.电动机.机床主轴等旋转设备的转速测量和控制,设计一款基于微控制器控制的霍尔传感器测速系统,此系统具有抗干扰能力强.测量精确等优点, 在电气工程实践中,经常会遇到各种需要 ...
- ftp关键技术二:nobody进程创建和使用(一)
本文将从以下几个方面具体阐述nobody进程的前世今生 为什么需要nobody进程? 进程间通信的协议制定 为什么需要nobody进程 (1)为什么要使用nobody进程和服务进程两个进程? 1. ...
最新文章
- MySQL行转列完整SQL示例
- chrome浏览器好用的插件
- LINQ Order by 排序
- method=post和method=get的区别是啥【汇总】
- (2)vue.js介绍
- et al、e.g.、i.e.读音及释义
- jQuery插件_SuperSlide插件(焦点图切换、标签切换、多个slide组合)
- ARM Cortex-M0(1)---浅谈ARM Cortex-M0
- python matlabplot写字_Matlab中plot基本用法的具体使用
- shell脚本编程学习(一)
- CAD打断线条的快捷键是什么?CAD打断线条教程
- 看机器学习如何预测债券收益率
- 新计算机分区,全新的电脑怎么给新硬盘分区?
- 记录一个vue项目报错UnhandledPromiseRejectionWarning: Unhandled promise rejection.
- 物联网相关技术术语表
- VUE项目中安装和使用vant组件
- python制作收费_python分段计费demo
- svn强制弹出账号密码对话框
- Unity3D windows平台视频录制录屏插件 UnityRecorder
- sem创意怎么写,10倍创意操作技巧教会你