




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、./*-小車運行主程序-簡介:模塊組成:紅外對管檢測模塊-五組對管,五個信號采集端口 直流電機驅動模塊-驅動兩個直流電機,另一個輪子用萬向輪 單片機最小系統-用于燒寫程序,控制智能小車運動 功能簡介:在白色地面或皮質上用黑色膠帶粘貼出路線路徑寬度微大于相鄰檢測管間距。 這樣小車便可在其上循跡運行。 補充說明:該程序采取“右優先”的原則: 即右邊有黑線向右轉, 若無,前方有黑線,向前走, 若無,左邊有黑線,向左轉, 若全無,從右方向后轉。 程序開頭定義的變量的取值是根據我的小車所調試選擇好的, 如果采用本程序,請自行調試適合自己小車的合適參數值。編者:陳堯,黃永剛(江蘇大學電氣學院二年級,三年級
2、)1.假定:IN1=1,IN3=1時電機正向轉動,必須保證本條件2.假定:遇到白線輸出0,遇到黑線輸出1; 如果實際電路是:遇到白線輸出1,遇到黑線輸出0, 這種情況下只需要將第四,第五句改成: #define m0 1 #define m1 0 即可。3.說明1:直行-速度full_speed_left,full_speed_right. 轉彎,調頭速度-correct_speed_left,correct_speed_right. 微小校正時-高速輪full_speed_left,full_speed_right; 低速輪correct_speed. 可以通過調節第六,七,八,九,十條程序
3、,改變各個狀態 下的占空比(Duty cycle ),以求達到合適的轉彎,直行速度4.lenth-length檢測到黑線到啟動轉動的時間間隔5.width-mid3在黑線上到脫離黑線的時間差6.mid3-作為判斷中心位置是否進入黑線的標志,由于運行的粗糙性和慣性, 常取其他對管的輸出信號作為判斷條件7.check_right-若先檢測到左邊黑線,并且左邊已出黑線,判斷右端是否壓黑線時間拖延-*/#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define m0 1/黑線m1,白線m0#def
4、ine m1 0 #define full_speed_left 40 /方便調節各個狀態的占空比 ,可用參數組:(30,35,6,25,30,68000,27000,500);#define full_speed_right 45/ (40,45,6,25,30,68000,27000,500);#define correct_speed 6 /校正時的低速輪的占空比#define turn_speed_left 25#define turn_speed_right 30#definelenth 68000/測試數據:10000-100-500-2000-80000-76000-68000#
5、define width 27000/500-10->2000-60000-30000-27000#define check_right 500 /2000-20-200-500#define midl left1#define midr right5 uchar Duty_left,Duty_right,i=0,j=0; /左右占空比標志,取1-100 sbit IN1=P20; sbit IN2=P21; sbit IN3=P22; sbit IN4=P23;sbit ENA=P10; sbit ENB=P11; /循跡口 五組紅外對管,依次對應從左往右第1,2,3,4,5五組sbi
6、t left1 =P16; sbit left2 =P15;sbit mid3 =P14;sbit right4=P13;sbit right5=P12;void line_left();void line_right();void line_straight()reentrant;/-void delay(long int Delay_time)/延時函數 uint t=Delay_time; while(t-); /-void init() /定時器初始化 left1=m0; /初始化 left2=m0; /白線位置 mid3 =m1; /黑線位置 right4=m0; right5=m0
7、; TMOD|=0x01; TH0=(65536-66)/256; TL0=(65536-66)%256; EA=1; ET0=1; TR0=1; ENA=1; /使能端口,初始化 ENB=1; /-void time0(void)interrupt 1 /中斷程序 i+;/調速在中斷中執行 j+; if(i<=Duty_left) ENA=1; else ENA=0; if(i>100) ENA=1;i=0; if(j<=Duty_right) ENB=1; else ENB=0; if(j>100) ENB=1;j=0;TH0=(65536-66)/256; /取約
8、150HZ,12M晶振,每次定時66us,分100次,這樣開頭定義的變量正好直接表示占空比的數值TL0=(65536-66)%256;/-void correct_left()/向左校正,賦值 Duty_left =correct_speed; Duty_right=full_speed_right; IN1=1; IN2=0; IN3=1; IN4=0; /- void correct_right()/向右校正,賦值 Duty_left =full_speed_left; Duty_right=correct_speed; IN1=1; IN2=0; IN3=1; IN4=0; /-void
9、 turn_left()/左轉,賦值 Duty_left =turn_speed_left; Duty_right=turn_speed_right; IN1=0; /轉彎時一個正轉,一個反轉, IN2=1; IN3=1; IN4=0; /-void turn_right()/右轉,賦值 Duty_left =turn_speed_left; Duty_right=turn_speed_right; IN1=1; /轉彎時一個正轉,一個反轉, IN2=0; IN3=0; IN4=1; /-void straight()/直走,賦值 Duty_left =full_speed_left;/左右電
10、機占空比初始化,調節直線運動速度 Duty_right=full_speed_right;/鑒于左右輪電機內部阻力不同,故占空比取不同值,這組值需要單獨寫程序取值 IN1=1; IN2=0; IN3=1; IN4=0; /-void line_straight()reentrant /函數名后加reentrant可以遞歸調用,/一直走黑直線時 straight(); if(right5=m1)line_right(); else if(left1=m1)line_left(); else if(left2=m1) /防止校正時,小車沖出過大,導致2,4號檢測管屏蔽了兩端檢測管的檢測,避免其走直
11、線時出軌 while(left2=m1) correct_left(); if(right5=m1) line_right(); goto label3; else if(left1=m1) line_left(); goto label3; else if(right4=m1) /防止校正時,小車沖出過大,導致2,4號檢測管屏蔽了兩端檢測管的檢測,避免其走直線時出軌 while(right4=m1) correct_right(); if(right5=m1) line_right(); goto label3; else if(left1=m1)line_left();goto label
12、3; else if(left1=m0)&&(left2=m0)&&(mid3=m0)&&(right4=m0)&&(right5=m0) straight(); /delay(lenth); while(right4=m0) /本來應該是用mid3,但是為了提高靈敏度,選擇right4;向左時,可取left2對管 turn_right(); if(mid3=m1) line_straight();label3: ; /什么都不做/-void line_right() /右邊有黑線時straight();/這里的直走是在不管紅外檢
13、測結果的直行delay(lenth);if(mid3=m1) turn_right();/執行向右轉的賦值label:delay(width);/由width值決定轉彎時mid3經過黑線寬度時所需要的時間 if(mid3=m0) while(right4=m0) else goto label; elseif(mid3=m0) turn_right(); while(right4=m0) if(midr=m1) line_straight(); /-void line_left() /左邊出現黑線時 while(left1=m1) if(right5=m1) line_right();goto label2; delay(check_right);/左邊遇到黑線時,左邊出了黑線之后,繼續延時一段時間,判斷右邊是否遇到黑線, /若遇到黑線,執行line_right()函數if(right5=m1) line_right();goto label2; if(mid3=m1)|(left2=m1)|(right4=m1)line_straight(); else while(left2=m0) turn_left(); if(midl=m1) line_straight(); label2: ;/-void detect_infrared() /循跡,紅外檢測 if(r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- AIGC應用基礎課件
- 山東省濰坊市臨朐縣2025屆高三下學期模擬考試歷史試題含解析
- 吉林省吉林市蛟河市第一中學2025屆高三六校第二次聯考數學試題含解析
- 商丘工學院《馬克思主義哲學》2023-2024學年第二學期期末試卷
- 四川西南航空職業學院《朝鮮語口譯》2023-2024學年第二學期期末試卷
- 江蘇省灌南縣重點中學2025年初三練習題二(全國卷I)數學試題含解析
- 江西省名師聯盟2025年高三一輪復習質量檢測試題物理試題含解析
- 江蘇省蘇州市平江中學2024-2025學年初三下學期第二次月考語文試題試卷含解析
- 洛陽師范學院《企業沙盤模擬》2023-2024學年第二學期期末試卷
- 吉林省長春市2024-2025學年高三第二學期第三次月考試卷化學試題含解析
- 2025年高考語文一輪復習:文言斷句(新高考)
- 幸福心理學智慧樹知到答案2024年浙江大學
- 企業宣傳與品牌形象設計手冊
- 別墅設備維護方案
- 《教育心理學(第3版)》全套教學課件
- 農行反洗錢與制裁合規知識競賽考試題庫大全-下(判斷題)
- 企業資金預算管理辦法
- (正式版)SH∕T 3507-2024 石油化工鋼結構工程施工及驗收規范
- 山東省臨沂市莒南縣2023-2024學年七年級下學期期末數學試題
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 重慶市兩江新區2023-2024學年七年級下學期期末考試語文試題
評論
0/150
提交評論