這次的院里的電子設(shè)計(jì)競(jìng)賽我們做的是遙控小車(chē)。其實(shí)兩個(gè)禮拜前就做完了,工作量加起來(lái)其實(shí)也就2天的功夫,之后由于懶,所以大家就沒(méi)有往里面加入東西發(fā)揮。今晚答辯被老師說(shuō)了一頓,還好老師都是認(rèn)識(shí)的,我們有多少實(shí)力都清楚。無(wú)所謂了,呵呵,又要開(kāi)始做其他的東西了。這個(gè)課題本身就是很簡(jiǎn)單的。還是不廢話了上圖吧。
這是遙控器,當(dāng)然焊工不錯(cuò)(關(guān)鍵是看背面,阿康的技術(shù)絕對(duì)OK)【實(shí)物圖】
這個(gè)是遙控器的【原理圖】,上一幅圖的綠色的PCB板子就是原理圖上的2262,這個(gè)模塊是老師發(fā)的包括有接收的2272,因?yàn)榈刂反a已經(jīng)做好了,所以只要發(fā)數(shù)據(jù)碼就可以了,聯(lián)系到接收,因?yàn)榻邮沼袘铱铡?、1的三種狀況,為了避免誤發(fā)信息所以將懸空的功能隱去,只在按鍵按下的時(shí)候發(fā)送高信號(hào)。
小車(chē)【實(shí)物圖】,底座、輪胎、齒輪是買(mǎi)的其他均為手工制作
以上是小車(chē)的【原理圖】,截圖截了兩次
這一部分是小車(chē)的驅(qū)動(dòng)和控制模塊,是最主要的模塊。分別是2272的接收模塊,單片機(jī),L298的驅(qū)動(dòng)芯片。2272是M型的也就是非鎖存模式的,檢測(cè)到信號(hào)的時(shí)候會(huì)在相應(yīng)的地址位輸出高,當(dāng)沒(méi)有檢測(cè)到的時(shí)候是為低,雖然2272是CMOS工藝2.5到15V均可以工作,但是兼容TTL電平,所以,單片機(jī)完全可以讀取電平信號(hào)。L298電機(jī)驅(qū)動(dòng)芯片的功能強(qiáng)大,因?yàn)楸旧碜詭н壿嬰妷狠斎攵耍灾灰妷嚎刂圃?V以下,單片機(jī)即可直接驅(qū)動(dòng)這塊芯片。電機(jī)啟動(dòng)時(shí)候的電壓電流會(huì)高一點(diǎn),但是L298可以輸出電流達(dá)2A這個(gè)是比較大的了,驅(qū)動(dòng)小電機(jī)完全不在話下。
以上是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.torrancerestoration.com/ziliao/file/xiaoch.rar
小車(chē)的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
程序是根據(jù)2272接收到的型號(hào)判斷該左轉(zhuǎn)右轉(zhuǎn)還是前進(jìn)后退,這個(gè)是四個(gè)基本功能,我們的小車(chē)也就實(shí)現(xiàn)這些功能,對(duì)于電源我們處理的不是很好,只是簡(jiǎn)單的將小車(chē)共地。并且把L298的邏輯電壓?jiǎn)为?dú)接出來(lái),這個(gè)小車(chē)以后還是會(huì)改進(jìn)的,呵呵。
后記:該說(shuō)的都說(shuō)的差不多了,程序很簡(jiǎn)單,我只用了幾個(gè)鐘頭包括仿真(Proteus仿真圖就不貼出來(lái)了),主要是控制,然后就是產(chǎn)生PWM來(lái)進(jìn)行對(duì)小車(chē)的調(diào)速,不過(guò)調(diào)試的時(shí)候 一次通過(guò),雖然轉(zhuǎn)的比較快,但是不影響轉(zhuǎn)彎。有問(wèn)題請(qǐng)隨意,呵呵。