藍牙串口通信遙控小車_第1頁
藍牙串口通信遙控小車_第2頁
藍牙串口通信遙控小車_第3頁
藍牙串口通信遙控小車_第4頁
藍牙串口通信遙控小車_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、藍牙串口通信遙控小車目錄1系統方案論證及方案選擇 2 本系統軟硬件設計 2.1單元硬件電路設計 2.2 軟件部分設計參考文獻附錄1 原器件清單附錄2電路原理圖及印制板圖附錄3程序1. 系統方案論證及方案選擇1 總體設計方案題目要求設計一個藍牙串口遙控小車,通過對電機轉速的控制,調節速度的大小,改變小車角度,并能實現轉彎和旋轉。設計主要由主控單片機STC12C5A60S2驅動直流電機,使車輪工作,帶動小車的轉動。 2.基本工作原理3.STC89C52RC有定時器T0 T1 T2,在自動控制領域經常把T1作為串口通信了T0作PWM調速用因此有必要把T2定時器拿出來作定時器作為聲音頻譜程序。下面介紹

2、T2的用法STC89C52RC有定時器T2 void main (void) /* T2定時器賦預裝載值,溢出16次就是1秒。 */ RCAP2H=(65536-5000)/256; RCAP2L= (65536-5000)%256; ET2=1; / 允許T2定時器中斷 EA=1; / 打開總中斷 TR2=1; / 啟動T2定時器 while(1); / 死循環,等待T2定時器的溢出中斷 void Timer2_Server(void) interrupt 5 static uint Timer2_Server_Count; / 定義靜態變量,用來計數T2定時器的溢出次數(進入本函數的次數)

3、 TF2=0; / T2定時器發生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的 Timer2_Server_Count+; if(Timer2_Server_Count=16) / T2定時器的預裝載值為0x0BDC,溢出16次就是1秒鐘。 Timer2_Server_Count=0; P1_7=P1_7; / LED11反轉顯示。 void Timer2_Server(void) interrupt 5 static uint Timer2_Server_Count; / 定義靜態變量,用來計數T2定時器的溢出次數(進入本函數的次數) TF2=0; / T2定時器發生

4、溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的 Timer2_Server_Count+; if(Timer2_Server_Count=16) / T2定時器的預裝載值為0x0BDC,溢出16次就是1秒鐘。 Timer2_Server_Count=0; P1_7=P1_7; / LED11反轉顯示。 2. 本系統軟硬件設計系統主要由單片機產生PWM信號,通過電機驅動輪胎的旋轉,對其的轉速進行控制,使車子行駛前進。根據題目要求,我們的設計分硬件、軟件兩部分。2.1 單元硬件電路設計 2.1.1 51單片機最小系統的制作方案設計2.1.2 小車51系統 +驅動(馬達)+電池

5、的接線2.1.3 藍牙與單片機和馬達的接線附錄1主要元器件清單序號名稱規格數量1鋰電池+配套充電器18650 7.4V 2200mAh鋰電池+鋰電充電器12L298N直流電機驅動板 帶5V 3A輸出L298N驅動芯片雙H橋直流電機驅動芯片驅動部分峰值電流2A,帶5V 3A輸出13ZK-1小車底盤1個5mm加厚底盤+2個直流減速電機+2個優質橡膠輪胎+萬向輪+電機導線+螺絲螺母+銅柱+碼盤等1451藍牙串口模塊藍牙串口模塊帶電源轉換電路支持5V供電152.54mm杜邦線40P彩色杜邦線 雙頭1P對1P 長20CM 一排40根16瓷片電容22P 插件27單排針40P 1根18輕觸開關6*6*619

6、電解電容10uf 35V110電阻470歐 5色環直插111電阻10K 5色環直插112電路板PCB覆銅板板或者5x7萬用版113超聲波測距模塊HC-SR04114超聲波測距模塊支架支架需要配套的螺絲螺母115晶振11.0592M11640P IC座插件DIP40117單片機學習板1附錄2 電路原理圖及印制電路板圖1.2.3. 4.5. 超聲波串口模塊附錄3程序1. 主程序#include<reg52.h>#define uchar unsigned char #define uint unsigned intuint ma,mb,mc,PWM=6000;sbit out1 = P

7、12 ; /motoA1sbit out2 = P13 ; /motoA2sbit out3 = P14 ; /motoB1sbit out4 = P15 ; /motoB2bit PWMIO;void delay(uint t) /延時程序1 uchar j; while(t-)for(j=1;j>0;j-); void init() TMOD=0x21;/設置定時器1為工作方式2 設置定時器0為工作方式1TH1=0xfd;TL1=0xfd;TH0=(65536-20000)/256; /20ms定時器T0中斷一次TL0=(65536-20000)%256;SCON=0x50;TR1=

8、1;EA=1;ES=1;ET0=1;TR0=1;void you ()/右急彎 out1=1; out2=0; out3=0; out4=1; delay(100);void zuo() /左急彎 out1=0;/右輪正轉 out2=1; out3=1; /左輪反轉 out4=0; delay(100);void qian() /前進 out1=0; out2=1; out3=0; out4=1; delay(100);void hou() /后退 out1=1; out2=0; out3=1; out4=0; delay(200);void leftup() /左前 out1=0;/右輪正轉

9、 out2=1; out3=0;/左輪PWMIO輸出調慢 out4=PWMIO;void rightup() /右前 out1=0;/右輪PWMIO輸出調慢 out2=PWMIO; out3=0;/左輪正轉 out4=1;void leftdown() /左后 out1=1;/右輪后退 out2=0; out3=PWMIO; out4=0;void rightdown() /右后 out1=PWMIO; out2=0; out3=1;/左輪后退 out4=0; void ting() /停止 out2=0; out4=0; out3=0; out1=0;void main() init();

10、while(1) if(RI) RI=0; ma=SBUF; switch(ma) case 'a':qian();break; /前 case 'b':hou();break; /后退 case 'c':zuo();break; /左急彎 case 'd':you();break; /右急彎 case 'e':leftup();break; /左前 case 'f':rightup();break; /右前 case 'g':leftdown();break; /左后 case &

11、#39;h':rightdown();break; /右后 case 's':ting();break; /停 void TT0() interrupt 1 TH0=(65536-(20000-PWM)/256; /20ms定時器T0中斷一次,進行PWM切換實現5ms高電平15ms低電平的PWM脈沖 TL0=(65536-(20000-PWM)%256; PWM=20000-PWM; PWMIO=PWMIO; void ser() interrupt 4 2. 子程序#include<reg52.h>#define uchar unsigned char #

12、define uint unsigned intuint ma,mb,mc,PWM=6000;sbit out1 = P12 ; /motoA1sbit out2 = P13 ; /motoA2sbit out3 = P14 ; /motoB1sbit out4 = P15 ; /motoB2bit PWMIO;PWMA3=10,30,50;PWMB3=10,30,50;void delay(uint t) /延時程序1 uchar j; while(t-)for(j=1;j>0;j-); void init() TMOD=0x21;/設置定時器1為工作方式2 設置定時器0為工作方式1T

13、H1=0xfd;TL1=0xfd;TH0=(65536-20000)/256; /20ms定時器T0中斷一次TL0=(65536-20000)%256;SCON=0x50;TR1=1;EA=1;ES=1;ET0=1;TR0=1;void you ()/右急彎 out1=1; out2=0; out3=0; out4=1; delay(100);void zuo() /左急彎 out1=0;/右輪正轉 out2=1; out3=1; /左輪反轉 out4=0; delay(100);void qian() /前進 out1=0; out2=PWMIO1; out3=0; out4=PWMIO2;

14、 delay(100);void hou() /后退 out1=1; out2=0; out3=1; out4=0; delay(200);void leftup() /左前PWM1=PWMA1; PWM2=PWMA0; out1=0;/右輪正轉 out2=PWMIO1; out3=0;/左輪PWMIO輸出調慢 out4=PWMIO2;void rightup() /右前 out1=0;/右輪PWMIO輸出調慢 out2=PWMIO; out3=0;/左輪正轉 out4=1;void leftdown() /左后 out1=1;/右輪后退 out2=0; out3=PWMIO; out4=0;

15、void rightdown() /右后 out1=PWMIO; out2=0; out3=1;/左輪后退 out4=0; void ting() /停止 out2=0; out4=0; out3=0; out1=0;void 3dang() /右后 i+; PWM1=PWMAi; PMW2=PWMBi;if(i=3)i=0;void main() init(); while(1) if(RI) RI=0; ma=SBUF; switch(ma) /*下面程序需要自行另外修改,添加前 后退左轉圈右轉圈左前彎PWM右前彎PWM左自旋右自旋PWM換檔位雙閃燈+鳴笛播放音樂顯示運行時間顯示光強超聲波

16、測距并避障等功能*/ case 'a':qian();break; /前 case 'b':hou();break; /后退 case 'c':zuo();break; /左急彎 case 'd':you();break; /右急彎 case 'e':leftup();break; /左前 case 'f':rightup();break; /右前 case 'g':leftdown();break; /左后 case 'h':rightdown();break; /右后 case 's':ting();break; /停 case 'x':3dang();break; /停 void TT0() interrupt 1TH0=(65536-400)/256;TL0=(65536-400)%256;t+;if(t>=PWM1) PWMIO1=1;if(t>=PWM2) PWMIO2=1;if(t=50) t=0;PWMIO1=0;PWMIO2=0void ser() interrupt 4 3. 串口通信的初始化4. 利用PWMIO的變化改變轉彎幅度5. PWMADJ()函數實現PWM值的加void PWM

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論