這次的院里的電子設計競賽我們做的是遙控小車。其實兩個禮拜前就做完了,工作量加起來其實也就2天的功夫,之后由于懶,所以大家就沒有往里面加入東西發揮。今晚答辯被老師說了一頓,還好老師都是認識的,我們有多少實力都清楚。無所謂了,呵呵,又要開始做其他的東西了。這個課題本身就是很簡單的。還是不廢話了上圖吧。
這是遙控器,當然焊工不錯(關鍵是看背面,阿康的技術絕對OK)【實物圖】
這個是遙控器的【原理圖】,上一幅圖的綠色的PCB板子就是原理圖上的2262,這個模塊是老師發的包括有接收的2272,因為地址碼已經做好了,所以只要發數據碼就可以了,聯系到接收,因為接收有懸空、0、1的三種狀況,為了避免誤發信息所以將懸空的功能隱去,只在按鍵按下的時候發送高信號。
小車【實物圖】,底座、輪胎、齒輪是買的其他均為手工制作
以上是小車的【原理圖】,截圖截了兩次
這一部分是小車的驅動和控制模塊,是最主要的模塊。分別是2272的接收模塊,單片機,L298的驅動芯片。2272是M型的也就是非鎖存模式的,檢測到信號的時候會在相應的地址位輸出高,當沒有檢測到的時候是為低,雖然2272是CMOS工藝2.5到15V均可以工作,但是兼容TTL電平,所以,單片機完全可以讀取電平信號。L298電機驅動芯片的功能強大,因為本身自帶邏輯電壓輸入端,所以只要電壓控制在7V以下,單片機即可直接驅動這塊芯片。電機啟動時候的電壓電流會高一點,但是L298可以輸出電流達2A這個是比較大的了,驅動小電機完全不在話下。
以上是L298的【封裝】以及引腳圖
下面貼一下程序吧,呵呵。
//////////////////////////////////////////////////////////***C51程序*******////////////////////////////////////////
#include <reg51.h> #define TH0C 0xff #define TL0C 0xf6 unsigned int dr_l,dr_r,times; //duty ratio 是占空比的意思。 unsigned char flag; sbit leftv=P1^0; sbit leftg=P1^1; sbit rightv =P1^2; sbit rightg =P1^3; sbit ena=P1^4; sbit enb=P1^5; sbit key0=P2^5; sbit key_a=P2^0; sbit key_r=P2^1; sbit key_l=P2^2; sbit key_b=P2^3; void beforeint(void); void main() { while(1) { P2=0xff; if(key0) { ena=1; enb=1; if(key_a) { flag=1; dr_l=50; dr_r=50; leftv=1; rightv=1; beforeint(); } if(key_r) { flag=2; dr_l=99; dr_r=1; leftv=1; rightg=1; beforeint(); } if(key_l) { flag=3; dr_l=1; dr_r=99; leftg=1; rightv=1; beforeint(); } if(key_b) { flag=4; dr_l=50; dr_r=50; leftg=1; rightg=1; beforeint(); } } else { ena=0; enb=0; flag=0; P1=0xff; continue; } } } void beforeint(void) { TMOD=0x01; TH0=TH0C; TL0=TL0C; TR0=1; ET0=1; EA=1; } void time0(void) interrupt 1 using 2 { times=0; TH0=TH0C; TL0=TL0C; times+=1; if(times>99) { times=0; } if(flag==1) { if(times<=dr_l) { leftg=0; } else { leftg=1; } if(times<=dr_r) { rightg=0; } else { rightg=1; } } else if(flag==2) { if(times<=dr_l) { leftg=0; } else { leftg=1; } if(times<=dr_r) { rightv=0; } else { rightv=1; } } else if(flag==3) { if(times<=dr_l) { leftv=0; } else { leftv=1; } if(times<=dr_r) { rightg=0; } else { rightg=1; } } else if(flag==4) { if(times<=dr_l) { leftv=0; } else { leftv=1; } if(times<=dr_r) { rightv=0; } else { rightv=1; } } }
////////////////////////////////////////////////////******************************///////////////////////////////////
完整的程序代碼從這里下:http://www.zg4o1577.cn/ziliao/file/xiaoch.rar
小車的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
程序是根據2272接收到的型號判斷該左轉右轉還是前進后退,這個是四個基本功能,我們的小車也就實現這些功能,對于電源我們處理的不是很好,只是簡單的將小車共地。并且把L298的邏輯電壓單獨接出來,這個小車以后還是會改進的,呵呵。
后記:該說的都說的差不多了,程序很簡單,我只用了幾個鐘頭包括仿真(Proteus仿真圖就不貼出來了),主要是控制,然后就是產生PWM來進行對小車的調速,不過調試的時候 一次通過,雖然轉的比較快,但是不影響轉彎。有問題請隨意,呵呵。