Arduino - 电动车转把线加装定速巡航功能

news/2024/12/29 18:26:40/
#define Pin_btn 5 // 巡航按钮输入针脚
#define Pin_in A0 // 转把电压信号输入针脚(接转把转速信号线-绿线)
#define Pin_out 11 // 巡航电压输出针脚(接控制器转速信号线)
bool xunhang = false; // 当前是否正在巡航中void setup() {pinMode(Pin_btn,INPUT_PULLUP); // 启用按钮上拉电阻pinMode(Pin_in,INPUT);pinMode(Pin_out, OUTPUT);  // 使用快速PWM输出,让电机转的更平稳,以下2A、2B系列仅对3针、11针有效。TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);  TCCR2B = _BV(CS22);  OCR2A = 180;  OCR2B = 50;  
}
void loop() {int inv = analogRead(Pin_in); // 读入转把电压,PWM读入最大1023。模拟接口能够测量0-5V的电压,对应的返回值为0-1023int outv = map(inv,0,1023,0,300); // 将转把输入电压进行转换,以符合模拟输出取值范围(0-1023转为0-255,为了得到稳定的全速电压,转为0-300后再将溢出的最大值裁切掉)if ( outv<110 ) {outv=0;}  // 折合最小输出电压(启动电压)2.15V,得到稳定的启动电压。 if ( outv>230) {outv=230;} // 折合最大输出电压(全速电压)4.5V,得到稳定的全速电压if ( digitalRead(Pin_btn)==LOW ){ // 巡航按钮按下,开始巡航if ( xunhang==false and outv>0 ){ // 如果未巡航,且转把有电压,就开始巡航xunhang = true;analogWrite(Pin_out,outv); // 发送当前速度电压} } else { // 巡航按钮松开,结束巡航xunhang = false; // 设置为未巡航analogWrite(Pin_out,outv); // 发送当前速度电压}delay(10);
}

原理是通过“拦截”转把转速信号电压值,分析处理后,再传送给控制器,达到自由控制电机转速的目的。

1、单片机5V供电从转把转速控制三线中获取(接转把黑线,红线)。

2、将转把转速信号线(绿线)接单片机A0,用于获取转把转速信号电压值,以便设置“控制器”转速。

3、将控制器转速信号线(绿线)接单片机11,用于设置控制器当前转速。

4、将11针PWM输出频率加快,用于给控制器输出平稳的电压信号,让电机转的更丝滑。

如果使用ATtiny13A芯片,需要把8分频关闭,不然电机转动不起来。代码如下:

// 电动车定速巡航改装,通过截取车把速度电压信号线实现// UNO、NANO
// #define Pin_btn 5 // 巡航按钮输入针脚
// #define Pin_in A0 // 转把电压信号输入针脚(接转把转速信号线-绿线)
// #define Pin_out 11 // 巡航电压输出针脚(接控制器转速信号线)// ATTiny13A
#define Pin_btn 3 // 巡航按钮输入针脚
#define Pin_in A2 // 转把电压信号输入针脚(接转把转速信号线-绿线)
#define Pin_out 1 // 巡航电压输出针脚(接控制器转速信号线)bool xunhang = false; // 当前是否正在巡航中void setup() {pinMode(Pin_btn,INPUT_PULLUP); // 启用按钮上拉电阻pinMode(Pin_in,INPUT);pinMode(Pin_out, OUTPUT);  // 使用快速PWM输出,让电机转的更平稳,以下2A、2B系列仅对3针、11针有效。// TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);  // TCCR2B = _BV(CS22);  // OCR2A = 180;  // OCR2B = 50;  
}
void loop() {int inv = analogRead(Pin_in); // 读入转把电压,PWM读入最大1023。模拟接口能够测量0-5V的电压,对应的返回值为0-1023int outv = map(inv,0,1023,0,300); // 将转把输入电压进行转换,以符合模拟输出取值范围(0-1023转为0-255,为了得到稳定的全速电压,转为0-300后再将溢出的最大值裁切掉)if ( outv<110 ) {outv=0;}  // 折合最小输出电压(启动电压)2.15V,得到稳定的启动电压。 if ( outv>230) {outv=230;} // 折合最大输出电压(全速电压)4.5V,得到稳定的全速电压if ( digitalRead(Pin_btn)==LOW ){ // 巡航按钮按下,开始巡航if ( xunhang==false and outv>0 ){ // 如果未巡航,且转把有电压,就开始巡航xunhang = true;analogWrite(Pin_out,outv); // 发送当前速度电压} } else { // 巡航按钮松开,结束巡航xunhang = false; // 设置为未巡航analogWrite(Pin_out,outv); // 发送当前速度电压}delay(10);
}


http://www.ppmy.cn/news/430863.html

相关文章

小牛M+怎么样 看过你才知道

在以前交通工具还不是那么发达的时候&#xff0c;大家能够出行的交通工具只有自行车&#xff0c;或者是步行&#xff0c;现在大家的生活水平越来越高&#xff0c;交通工具也越来越多&#xff0c;有汽车、电动车、电动汽车等等&#xff0c;说到最便利的交通工具大家可能都会想说…

步进电机 迷你L298N 2路直流电机驱动模块 正反转 PWM调速 双H桥

2路直流电机驱动模块 正反转 PWM调速 双H桥 步进电机 迷你L298N 产品简介:电机驱动模块非常适合在电池供电的智能小车、玩具小车、机器人等上面使用,供电电压2V~10V,可同时驱动两个直流电机或者1个4线2相式步进电机,可实现正反转和调速的功能,每路电流能到1.5A持续电流,…

基于深度学习的车牌+车辆识别(YOLOv5和CNN)

yolov5车牌识别+车辆识别 行人识别yolov5和v7对比 订阅专栏获得源码(提供完整代码,无需看下文) 基于深度学习的车牌识别(YOLOv5和CNN) 目录 一、综述 二、车牌检测 一、综述 本篇文章是面向的是小白,想要学习深度学习上的应用,本文中目前应用了YOLO v5和CNN来对车牌进行…

nedc和epa续航里程什么意思_了解 NEDC 之后 我发现电动车的续航还是得实测

从电动车出现在大家的生活中开始&#xff0c;续航永远是绕不开的一个话题。虽然随着动力电池技术的进步&#xff0c;纯电动车的续航已经相比早期产品提升了好几个台阶&#xff0c;但是不可否认的是&#xff0c;对于没有太多驾驶纯电动车经验的人来说&#xff0c;续航依然是他们…

使用FlexCell表格控件 for .NET制作条码标签

FlexCell是一个操作简单的国产.NET表格控件&#xff08;Windows Forms&#xff09;&#xff0c;支持条形码和二维码&#xff0c;用来制作条码标签非常方便。 FlexCell中文版官网&#xff1a;http://www.grid2000.com/cn C#源代码&#xff1a; using System; using System.Co…

智能车竞赛:Infineon TC264单片机使用总结快速入门

本文主要是为了备赛第十八届全国大学生智能车竞赛&#xff0c;基于逐飞开源库和芯片数据手册的一些学习总结&#xff0c;使用英飞凌官方的AURIX Development Studio开发环境。 正如STM32的开发方式有标准库和HAL库&#xff0c;Infineon单片机也有官方库&#xff0c;而逐飞开源…

RC522(RFID)读写驱动

toc 1、RC522驱动原理 我们常见的RC522大概如下所示&#xff0c;PCB部分是主机&#xff0c;然后白色的和绿色的都是IC卡&#xff0c;IC卡可以存储信息&#xff0c;通过靠近PCB主机部分就可以被感应到从而触发主机做出相应的动作&#xff0c;比如读取IC卡信息&#xff0c;写入…

fitbit手表中文说明书_Fitbit OS达到3.0版,这是新功能

fitbit手表中文说明书 Over the last couple of years, Fitbit has graduated from a company that makes fitness trackers to a full smartwatch manufacturer. And today’s update for the Ionic and Versa is a big one for Fitbit watch owners. 在过去的几年中,Fitbit毕…