一、項目介紹
隨著社會經(jīng)濟(jì)的快速發(fā)展,人們對節(jié)能環(huán)保的要求越來越高,電動車因其無污染、噪音小、使用成本低等優(yōu)點逐漸成為了市場關(guān)注的焦點。同時,隨著科技的不斷進(jìn)步和應(yīng)用,電動車的技術(shù)水平也在不斷提高。
為了更好地滿足市場需求和科技進(jìn)步的要求,本項目基于51單片機(jī)設(shè)計了一款電動車控制器。主要包括電動車控制和驅(qū)動兩個關(guān)鍵部分。其中,控制部分采用51單片機(jī)作為控制核心,通過編程實現(xiàn)電動車前后行駛、左右轉(zhuǎn)向、加速等操作。而驅(qū)動部分則采用L298N驅(qū)動芯片驅(qū)動直流電機(jī)。當(dāng)前設(shè)計的電動車,支持鋰電池供電、支持按鍵實現(xiàn)電動車前后行駛、左右轉(zhuǎn)向和加速等操作,電機(jī)采用直流電機(jī),驅(qū)動芯片采用L298N。
二、系統(tǒng)架構(gòu)
本系統(tǒng)由控制器、電機(jī)、驅(qū)動芯片、鋰電池和按鍵等組成,其功能、特點如下:
(1)控制器:采用AT89S52微控制器,作為整個系統(tǒng)的核心控制部分??刂破鹘邮諄碜园存I的信號,控制驅(qū)動芯片輸出電機(jī)控制信號,從而實現(xiàn)對電動車的前后行駛、左右轉(zhuǎn)向、加速等控制功能。
(2)電機(jī):采用直流電機(jī),其轉(zhuǎn)速和轉(zhuǎn)向可通過驅(qū)動芯片控制信號進(jìn)行調(diào)節(jié)。
(3)驅(qū)動芯片:采用L298N驅(qū)動芯片,為電機(jī)提供驅(qū)動電流,并控制電機(jī)轉(zhuǎn)速和轉(zhuǎn)向。L298N驅(qū)動芯片具有功率大、穩(wěn)定性好等特點。
(4)鋰電池:為電動車提供動力,具有體積小、能量密度高、充電效率高、自放電率低等優(yōu)點。
(5)按鍵:用于控制和調(diào)節(jié)電動車的運行狀態(tài),包括前后行駛、左右轉(zhuǎn)向、加速等操作。
三、系統(tǒng)設(shè)計
3.1 控制器設(shè)計
本項目采用STC89C52為主控芯片,主要功能是接收來自按鍵的信號,并通過控制L298N驅(qū)動芯片輸出驅(qū)動電流,從而控制電機(jī)的轉(zhuǎn)速和轉(zhuǎn)向??刂破鬟€需要實現(xiàn)鋰電池充電管理、限位保護(hù)等的功能。
設(shè)計流程:
(1)編寫單片機(jī)的邏輯程序,實現(xiàn)對按鍵信號的捕獲和處理,以及對L298N驅(qū)動芯片的控制。
(2)為了實現(xiàn)鋰電池充電和保護(hù),采用鋰電池充電模塊和充電管理芯片。
3.2 電機(jī)和驅(qū)動芯片設(shè)計
本項目電機(jī)采用直流電機(jī),驅(qū)動芯片采用L298N。
設(shè)計流程:
(1)根據(jù)電機(jī)型號和參數(shù),確定合適的電機(jī)供電電壓和控制電路。
(2)根據(jù)實際需要,確定L298N驅(qū)動芯片的工作模式和參數(shù),設(shè)計驅(qū)動電路。
(3)為提高電機(jī)的效率和壽命,添加電機(jī)驅(qū)動電阻、反電動勢抑制電路電路。
3.3 鋰電池設(shè)計
本項目采用鋰電池供電。
設(shè)計流程:
(1)根據(jù)需要,選擇適當(dāng)?shù)匿囯姵匦吞柡腿萘俊?/p>
(2)設(shè)計電池充電管理電路,實現(xiàn)對鋰電池的充電和保護(hù)。
(3)結(jié)合其他電路的設(shè)計,完成對鋰電池的供電和相應(yīng)的充電管理。
3.4 按鍵設(shè)計
按鍵是控制電動車運行狀態(tài)的關(guān)鍵部分。
設(shè)計流程:
(1)根據(jù)實際需要,確定需要添加的按鍵類型和數(shù)量。
(2)設(shè)計按鍵接口電路,實現(xiàn)按鍵信號的捕獲和處理。
(3)結(jié)合控制器設(shè)計,實現(xiàn)對電動車的前后行駛、左右轉(zhuǎn)向、加速等操作控制。
四、代碼實現(xiàn)
4.1 按鍵檢測程序設(shè)計
本項目用到了9個按鍵,按鍵按下是低電平。 實現(xiàn)了前后行駛切換控制、左右轉(zhuǎn)向燈控制、加速控制、喇叭控制、前后剎車燈控制、一個開機(jī)鍵。
以下是按鍵的完整邏輯代碼:
#include < reg52.h >
?
sbit key1 = P1^0; // 按鍵1
sbit key2 = P1^1; // 按鍵2
sbit key3 = P1^2; // 按鍵3
sbit key4 = P1^3; // 按鍵4
sbit key5 = P1^4; // 按鍵5
sbit key6 = P1^5; // 按鍵6
sbit key7 = P1^6; // 按鍵7
sbit key8 = P1^7; // 按鍵8
sbit key9 = P2^0; // 按鍵9
?
sbit forward = P3^0; // 前進(jìn)
sbit backward = P3^1; // 后退
sbit left = P3^2; // 左轉(zhuǎn)燈
sbit right = P3^3; // 右轉(zhuǎn)燈
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;
}
}
}