写点什么

基于 51 单片机设计的电动车控制器

作者:DS小龙哥
  • 2024-07-09
    重庆
  • 本文字数:2722 字

    阅读完需:约 9 分钟

一、项目介绍

随着社会经济的快速发展,人们对节能环保的要求越来越高,电动车因其无污染、噪音小、使用成本低等优点逐渐成为了市场关注的焦点。同时,随着科技的不断进步和应用,电动车的技术水平也在不断提高。


为了更好地满足市场需求和科技进步的要求,本项目基于 51 单片机设计了一款电动车控制器。主要包括电动车控制和驱动两个关键部分。其中,控制部分采用 51 单片机作为控制核心,通过编程实现电动车前后行驶、左右转向、加速等操作。而驱动部分则采用 L298N 驱动芯片驱动直流电机。当前设计的电动车,支持锂电池供电、支持按键实现电动车前后行驶、左右转向和加速等操作,电机采用直流电机,驱动芯片采用 L298N。




二、系统架构

本系统由控制器、电机、驱动芯片、锂电池和按键等组成,其功能、特点如下:


(1)控制器:采用 AT89S52 微控制器,作为整个系统的核心控制部分。控制器接收来自按键的信号,控制驱动芯片输出电机控制信号,从而实现对电动车的前后行驶、左右转向、加速等控制功能。


(2)电机:采用直流电机,其转速和转向可通过驱动芯片控制信号进行调节。


(3)驱动芯片:采用 L298N 驱动芯片,为电机提供驱动电流,并控制电机转速和转向。L298N 驱动芯片具有功率大、稳定性好等特点。


(4)锂电池:为电动车提供动力,具有体积小、能量密度高、充电效率高、自放电率低等优点。


(5)按键:用于控制和调节电动车的运行状态,包括前后行驶、左右转向、加速等操作。

三、系统设计

3.1 控制器设计

本项目采用 STC89C52 为主控芯片,主要功能是接收来自按键的信号,并通过控制 L298N 驱动芯片输出驱动电流,从而控制电机的转速和转向。控制器还需要实现锂电池充电管理、限位保护等的功能。


设计流程:


(1)编写单片机的逻辑程序,实现对按键信号的捕获和处理,以及对 L298N 驱动芯片的控制。


(2)为了实现锂电池充电和保护,采用锂电池充电模块和充电管理芯片。

3.2 电机和驱动芯片设计

本项目电机采用直流电机,驱动芯片采用 L298N。


设计流程:


(1)根据电机型号和参数,确定合适的电机供电电压和控制电路。


(2)根据实际需要,确定 L298N 驱动芯片的工作模式和参数,设计驱动电路。


(3)为提高电机的效率和寿命,添加电机驱动电阻、反电动势抑制电路电路。

3.3 锂电池设计

本项目采用锂电池供电。


设计流程:


(1)根据需要,选择适当的锂电池型号和容量。


(2)设计电池充电管理电路,实现对锂电池的充电和保护。


(3)结合其他电路的设计,完成对锂电池的供电和相应的充电管理。

3.4 按键设计

按键是控制电动车运行状态的关键部分。


设计流程:


(1)根据实际需要,确定需要添加的按键类型和数量。


(2)设计按键接口电路,实现按键信号的捕获和处理。


(3)结合控制器设计,实现对电动车的前后行驶、左右转向、加速等操作控制。

四、代码实现

4.1 按键检测程序设计

本项目用到了 9 个按键,按键按下是低电平。 实现了前后行驶切换控制、左右转向灯控制、加速控制、喇叭控制、前后刹车灯控制、一个开机键。


以下是按键的完整逻辑代码:


#include <reg52.h>
sbit key1 = P1^0; // 按键1sbit key2 = P1^1; // 按键2sbit key3 = P1^2; // 按键3sbit key4 = P1^3; // 按键4sbit key5 = P1^4; // 按键5sbit key6 = P1^5; // 按键6sbit key7 = P1^6; // 按键7sbit key8 = P1^7; // 按键8sbit key9 = P2^0; // 按键9
sbit forward = P3^0; // 前进sbit backward = P3^1; // 后退sbit left = P3^2; // 左转灯sbit right = P3^3; // 右转灯sbit accelerate = P3^4; // 加速器sbit horn = P3^5; // 喇叭sbit stoplight1 = P3^6; // 前刹车灯sbit stoplight2 = P3^7; // 后刹车灯
void main() { while(1) { if(key1 == 0) { // 按键1按下 forward = 1; backward = 0; } if(key2 == 0) { // 按键2按下 forward = 0; backward = 1; } if(key3 == 0) { // 按键3按下 left = 1; } else { left = 0; } if(key4 == 0) { // 按键4按下 right = 1; } else { right = 0; } if(key5 == 0) { // 按键5按下 accelerate = 1; } else { accelerate = 0; } if(key6 == 0) { // 按键6按下 horn = 1; } else { horn = 0; } if(key7 == 0) { // 按键7按下 stoplight1 = 1; } else { stoplight1 = 0; } if(key8 == 0) { // 按键8按下 stoplight2 = 1; } else { stoplight2 = 0; } if(key9 == 0) { // 按键9按下 forward = 0; backward = 0; left = 0; right = 0; accelerate = 0; horn = 0; stoplight1 = 0; stoplight2 = 0; } }}
复制代码


代码通过不断检测按键的电平状态,实现了对电动车的前后行驶、左右转向灯控制、加速、喇叭以及前后刹车灯控制等操作。当按键被按下时,对应的功能就会被执行,否则就会停止执行。其中,第 9 个按键为开机键,当按下时将所有功能都清零。

4.2 L298 芯片控制电机代码

下面是 L298N 驱动模块控制电机正反转的代码:


#include <reg52.h>
sbit ena = P2^0; // 使能A端口sbit in1 = P2^1; // A+控制信号sbit in2 = P2^2; // A-控制信号sbit enb = P2^3; // 使能B端口sbit in3 = P2^4; // B+控制信号sbit in4 = P2^5; // B-控制信号
void delay(int time) { // 延时函数 int i, j; for(i = 0; i < time; i++) { for(j = 0; j < 120; j++); }}
void main() { ena = 1; // 使能A端口 enb = 1; // 使能B端口 while(1) { in1 = 1; // A+ 电流正向 in2 = 0; // A- 电流反向 in3 = 1; // B+ 电流正向 in4 = 0; // B- 电流反向 delay(1000); // 延时一段时间 in1 = 0; // A+ 电流反向 in2 = 1; // A- 电流正向 in3 = 0; // B+ 电流反向 in4 = 1; // B- 电流正向 delay(1000); // 延时一段时间 }}
复制代码


L298N 驱动模块可以控制电机的正反转,其中 in1、in2 控制 A 相电流的方向,in3、in4 控制 B 相电流的方向,ena、enb 是使能端口,需要设置为高电平才能控制电机。在例子中,先将 ena 和 enb 设置为高电平,然后让电机正向运转一段时间,再让电机反向运转一段时间,不断循环实现正反转。

发布于: 刚刚阅读数: 5
用户头像

DS小龙哥

关注

微信公众号:DS小龙哥嵌入式技术资讯 2022-01-06 加入

所有项目文章对应的工程源码,都可以在我的微信公众号:《DS小龙哥嵌入式技术资讯》 里下载。

评论

发布
暂无评论
基于51单片机设计的电动车控制器_7月月更_DS小龙哥_InfoQ写作社区