這次的院里的電子設計競賽我們做的是遙控小車。其實兩個禮拜前就做完了,工作量加起來其實也就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.izizhuan.cn/ziliao/file/xiaoch.rar
小車的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
程序是根據2272接收到的型號判斷該左轉右轉還是前進后退,這個是四個基本功能,我們的小車也就實現這些功能,對于電源我們處理的不是很好,只是簡單的將小車共地。并且把L298的邏輯電壓單獨接出來,這個小車以后還是會改進的,呵呵。
后記:該說的都說的差不多了,程序很簡單,我只用了幾個鐘頭包括仿真(Proteus仿真圖就不貼出來了),主要是控制,然后就是產生PWM來進行對小車的調速,不過調試的時候 一次通過,雖然轉的比較快,但是不影響轉彎。有問題請隨意,呵呵。



