單晶片魔法車08-高架軌道車
在實驗7裏,我們把紅外線LED及接收器組合成偵測地面黑色軌道的模組,我就有學生在家裏用黑膠帶,從房間到客廳、廚房,貼了很長的軌道,跟家人玩起郵差送信的遊戲,真的很好玩哦!接下來的實驗我修改了一些電路的結構,如:取消原來使用兩組電源的架構,改由一顆7.4V可充電的鋰電池透過穩壓IC-7805供應電路5V電源,而馬達驅動則採用之前在"不是玩具-單晶片科學魔法車"一文中提到的IC-TA7291P來控制,因此現在魔法車除了前進、後退之外,也能透過程式下達停止的指令了。
實驗八:高架軌道車
實驗內容:如何在寬度峽長的軌道上順利過彎。
https://www.youtube.com/watch?v=1HkPSM9W8Sc
先看程式囉:
這次程式加一樣新菜色,就是利用89C2051計時器來產生中斷,讓程式可以規劃出PWM的信號,目的是輸出到TA7291P來控制馬達的速度,非常好用喔!
/*實驗八:高架軌道車*/
#include <AT89x051.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
uchar t=0; //中斷計數器
uchar m1=0; //左馬達速度值
uchar m2=0; //右馬達速度值
uchar tmp1,tmp2; //左右馬達當前速度值
/* 馬達控制函數 index-左右馬達(1,2); speed-馬達速度(-100 ~ 100) */
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100){
if(index==1){ //左馬達的處理
m1=abs(speed); //取速度的絕對值
if(speed<0){ //速度值為負則反轉
P1_2=0;
P1_3=1;
}
else{ //不為負數則正轉
P1_2=1;
P1_3=0;
}
}
if(index==2){ //右馬達的處理
m2=abs(speed); //速度控制
if(speed<0){ //方向控制
P1_4=0;
P1_5=1;
}
else{
P1_4=1;
P1_5=0;
}
}
}
}
/* 延時函數 */
void delay(unsigned int j)
{ //改變參數J大小,可調整時間
for(j;j>0;j--);
}
/* 主程式開始 */
void main(void)
{
P3_2=1; //啟始左側紅外線輸入功能
P3_3=1; //啟始右側紅外線輸入功能
TMOD=0x02; //設定T0的工作模式為2
TH0=0x3C; //設定定時器的初值
TL0=0x3C; //設定定時器的重載值
EA=1; //中斷開啟
ET0=1; //定時器0允許中斷
TR0=1; //啟動定時器0
while(1){
while(P3_3==1 && P3_2==1){ //當車體在軌道中時
motor(1,50); //左右馬達加速前進
motor(2,50);
}
while(P3_2==0 && P3_3==1){ //當左側紅外線偵測到軌道邊緣時
motor(2,-50); //右馬達反轉
motor(1,30); //左馬達減速..直到避開軌道邊緣
}
while(P3_2==1 && P3_3==0){ //當右側紅外線偵測到軌道邊緣時
motor(1,-50); //左馬達反轉
motor(2,30); //右馬達減速..直到避開軌道邊緣
}
while(P3_3==0 && P3_2==0){ //無任何反射信號時
delay(10); //作用為何呢?
}
}
}
/* T0中斷服務程序 */
void timer0() interrupt 1
{
if(t==0){ //1個PWM週期完成後才會接受新數值
tmp1=m1;
tmp2=m2;
}
if(t<tmp1) P1_0=1; else P1_0=0; //產生左馬達的PWM信號
if(t<tmp2) P1_1=1; else P1_1=0; //產生右馬達的PWM信號
t++;
if(t>=100) t=0; //1個PWM週期由100次中斷產生
}
編譯完成的檔案:
周老師今天終於找到L293D了, 下週一寄給你試試看, 和TA7291P比較一下哪個好用. 謝謝您 用L293D,只要一顆就搞定了,電路占用的面積更小了,程式連改都不用改,直接套用上去就行了!
TA7291P 1顆只能驅動1顆馬達, 但輸出功率比較高, 散熱也比較沒問題!
若軌道變窄至2倫的寬度的話,此車能否遇到問題 本帖最後由 martin 於 2010-5-1 01:41 編輯
我覺得老師的軌道已經夠窄了吧! 我的車即使慢慢走, 還是常常走到掉下去:'(
不過我倒覺得, 多留一些寬度, 比較有加速的緩衝空間, 然後再來做個超速的版本... 砍起來有點小困難。加油! v751953789 發表於 2011-2-22 14:05 static/image/common/back.gif
砍起來有點小困難。加油!
晶片到手,一切就變得容易了! 好难啊!真的很佩服!
頁:
[1]