版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第7章 軟件設計技術 7.1 軟件的總體功能2 軟件運行于微處理器,其功能由微處理器來決定。 微處理器功能由系統(tǒng)的功能結構、與微處理器相連的三個子系統(tǒng)和控制算法所決定。 這些功能也可以分成兩部分:控制算法功能和一般控制功能 3軟件功能的實時性 意義:強調(diào)在規(guī)定的時間里執(zhí)行相應的操作 ,誤時操作會導致嚴重的后果。 軟件的實時性要滿足兩方面的要求:一是實時動作響應。二是實時數(shù)據(jù)處理。 472 機電一體化系統(tǒng)軟件的任務和任務管理 為了便于分析和編程,把各種軟件功能化分為小的、單元式的子功能。軟件功能是由子功能某種方式組合在一起的。 由此,從學術的角度,把子功能提練為任務(類似:進程),軟件功能就是任
2、務的組合。 軟件的編程就包含兩個技術,任務的編程和任務的管理。5任務的劃分原則 1每個任務必須是獨立的; 2 每個任務不再可分; 3 所有任務的集合能滿足整個系統(tǒng)的功能要求。 4 劃分得到的任務常常按程序運行方式來加以分類描述,如驅(qū)動程序、初始化程序、中斷程序、控制算法程序、顯示程序和鍵盤(或觸摸)輸入程序等。 5 還可以按分層結構來理解。6基于任務的編程方法 1 前后臺編程方法:如果編程人員將全部程序都自行編制,即把任務和任務的管理看做后臺程序,中斷處理看做前臺程序,就是前后臺程序編程方法。這是初級的、然而應用很多的編程方法。 2.操作系統(tǒng)編程方法:如果任務的管理有通用的、現(xiàn)成的程序,即操作
3、系統(tǒng),而編程人員只編制任務程序,就稱為操作系統(tǒng)編程方法。但是有時也需要 編寫驅(qū)動程序。 7 3.設定式編程方法:這是一種近幾年剛剛出現(xiàn)的編程方法,如聯(lián)發(fā)科技推出的MTK平臺的軟件編程方法。任務和任務的管理均已完成,方便地提供給了開發(fā)人員。設定式編程方法編程簡單、節(jié)省開發(fā)時間、程序系統(tǒng)穩(wěn)定可靠和功能強大,是今后程序編制方法的發(fā)展方向。73 機電一體化系統(tǒng)的程序設計方法731 程序設計方法9 1確定程序功能:根據(jù)控制系統(tǒng)設計方案確定控制軟件功能,根據(jù)系統(tǒng)的功能結構確定前面沒有提到的其它軟件功能。 2劃分任務:將各類軟件功能劃分成具體的任務。 3確定軟件編程要素:任務的組合方式 和編程方法 使用和前
4、邊類似的產(chǎn)生和選擇方法。(產(chǎn)生與選擇)10732 模塊化編程技術 應用領域:單片機、操作系統(tǒng)和S7-300 分成不同的程序,即不同的模塊 由單獨的程序(頭文件)組合到一起。有全局變量問題 優(yōu)點:模塊不用更改,結構清晰 區(qū)分:子程序在一個程序。733 運水機器人編程實例1 軟件功能12運水機器人功能結構(用文字簡單敘述) 主要事件是將水裝入容器、微處理器控制電機驅(qū)動輪式行走機構運輸容器和從容器卸水。使用鋰電池作為能源輸入,分別為驅(qū)動電機和電控部分提供電能,有克服摩擦力和電氣部件能耗等能量損失。有循跡和開關機等輸入信號送微處理器處理,顯示水量和時間等。13外圍部件軟件功能 使用C8051F020單
5、片機??刂?62字符點陣液晶顯示器顯示水容量和運水時間。以PWM方式控制電機驅(qū)動芯片L298N驅(qū)動兩路直流減速電機,以開關方式控制微型繼電器卸水。對循跡開關信號進行采集。 14控制算法功能 對運水機器人行走軌跡進行閉環(huán)控制,采用比例(P)調(diào)節(jié)。 15任務劃分 任務劃分為:初始化配置(config),延時(delay1ms),PCA初始化(PCA_Init ),產(chǎn)生PWM脈寬調(diào)制的兩個任務(PWM0_set、PWM1_set),電機正反轉(zhuǎn)及速度的控制的六個任務(L_FORD、R_FORD、L_BACK、R_BACK、L_BREAK、 R_BREAK),八路尋跡(Founding_Line),給l
6、cd送命令(sendc),給lcd送數(shù)據(jù)(sendd),顯示地址定位函數(shù)(lcd_pos),lcd初始化函數(shù)(lcd_ini),第一次水量顯示(lcddisplay1),第二次水量顯示(lcddisplay2),顯示時間(lcddisplay3)。16任務的組合 在八路尋跡(Founding_Line)中根據(jù)取入的八路傳感數(shù)字信號調(diào)用產(chǎn)生PWM脈寬調(diào)制的兩個任務(PWM0_set、PWM1_set)和電機正反轉(zhuǎn)及速度的控制的六個任務(L_FORD、R_FORD、L_BACK、R_BACK、L_BREAK、 R_BREAK),并按控制問題的要求調(diào)用第一次水量顯示(lcddisplay1)、第二次
7、水量顯示(lcddisplay2)和顯示時間(lcddisplay3)。17 第一次水量顯示(lcddisplay1)、第二次水量顯示(lcddisplay2)和顯示時間(lcddisplay3)中使用給lcd送命令(sendc)、給lcd送數(shù)據(jù)(sendd)和顯示地址定位函數(shù)(lcd_pos)。 加入延時(delay1ms)以保證外圍部件的響應。 任務管理進行初始化配置(config)、PCA初始化(PCA_Init )、電機正轉(zhuǎn)(L_FORD、R_FORD)和調(diào)用八路尋跡(Founding_Line)。18編程方法 使用前后臺編程方法。 195具體編程(1)資源分配 P00電機 1 PWM
8、輸出 左輪 P01電機 2 PWM輸出 右輪 L_DIR1A=P22左輪電機方向控制 L_DIR1B=P21左輪電機方向控制 R_DIR1A=P25右輪電機方向控制 R_DIR1B=P26右輪電機方向控制20 P10-水泵控制 P11蜂鳴器控制 PCA0CPM0 電機 1 PWM 輸出,工作在8位定時器模式,允許比較器匹配中斷,每次中斷加載新的比較值,實現(xiàn)電機輸出的脈寬控制。 PCA0CPM1 電機 2 PWM 輸出,工作在8位定時器模式,允許比較器匹配中斷,每次中斷加載新的比較值,實現(xiàn)電機輸出的脈寬控制。 P6.0-P6.7;傳感器接口 lcdrw=P32;-讀寫控制5 lcdcs=P37;
9、-E使能 6 lcdrs=P36;-命令數(shù)據(jù)選擇控制 4 21傳感器規(guī)定 前四個傳感器在低四位,后四個傳感器在高四位 左右各兩個傳感器 不壓黑線為低電平頭:低四位尾:高四位22記錄行走情況 遇垂直黑線次數(shù):int fb=0 微偏:0100/0010 中偏:1100/0011 大偏:1000/000123(2)引用與定義 #include #include #include typedef unsigned char uchar; typedef unsigned long ulong; typedef unsigned int uint; #define L_MOTO_BREAK L_DIR1
10、A=L_DIR1B #define L_MOTO_BACK L_DIR1A=0;L_DIR1B=1 #define L_MOTO_FORD L_DIR1A=1;L_DIR1B=0 #define R_MOTO_BREAK R_DIR1A=R_DIR1B #define R_MOTO_BACK R_DIR1A=0;R_DIR1B=1 #define R_MOTO_FORD R_DIR1A=1;R_DIR1B=024 sbit L_DIR1A=P22; sbit L_DIR1B=P21; sbit R_DIR1A=P25; sbit R_DIR1B=P26; sbit P1_0=P10; sbit
11、 P1_1=P11; sbit P1_2=P12;25 int fb=0;/控制前后方向 sbit lcdrw=P32;/5 sbit lcdcs=P37;/6 sbit lcdrs=P36;/4 void lcddisplay3(void); void lcddisplay1(void); void lcddisplay2(void);26 此部分包括頭文件的定義、宏定義、位定義等,此部分包括頭文件的定義、宏定義、位定義等,例如定義例如定義#define L_MOTO_BREAK L_DIR1A=L_DIR1B,即表示在程序中以,即表示在程序中以L_MOTO_BREAK來表示來表示L_DIR
12、1A=L_DIR1B;L_DIR1A代表代表P22口,表示左輪電機方向的控口,表示左輪電機方向的控制;制;L_DIR1B代表代表P21口,亦表示左輪電機方口,亦表示左輪電機方向控制;當向控制;當L_DIR1A=L_DIR1B,即,即L_DIR1A與與L_DIR1B都為都為1或都為或都為0時,即以時,即以L_MOTO_BREAK來表示。下面還有液晶顯示屏來表示。下面還有液晶顯示屏的的I/O配置以及液晶顯示屏的顯示等。配置以及液晶顯示屏的顯示等。 27(3)初始化配置, 以保證單片機控制功能工作 void config (void) WDTCN = 0 x07; WDTCN = 0 xde; /看
13、門狗禁止 WDTCN = 0 xad;/看門狗禁止 XBR0 = 0 x50; /配置交叉開關, XBR1 = 0 x00; XBR2 = 0 x40; /交叉開關允許P0MDOUT=0 x00; /p0.4p0.5為推挽輸出28 P1MDOUT=0 xff; P2MDOUT=0 xff;P3MDOUT=0 xFF;P74OUT=0 x00; /p4-p6 P6=0 xff; OSCXCN = 0 x00; OSCICN = 0 x16; /采用內(nèi)部晶振,頻率為 8MHZ 29 此部分主要進行初始化配置,以保證單片機的控此部分主要進行初始化配置,以保證單片機的控制功能制功能 WDTCN即為看門
14、狗定時器控制寄存器,此處通即為看門狗定時器控制寄存器,此處通過過WDTCN各位的設置使看門狗禁止各位的設置使看門狗禁止 XBR0、XBR1、XBR2是用來配置交叉開關是用來配置交叉開關的特殊功能寄存器。的特殊功能寄存器。XBR0 = 0 x50即把即把XBR0的的位位6和位和位4置置1,表示,表示PCA0外部計數(shù)器輸入連接端外部計數(shù)器輸入連接端口引腳及口引腳及CEX0和和CEX1鏈接兩個端口引腳;鏈接兩個端口引腳;XBR1 = 0 x00表示此特殊功能寄存器各位全置表示此特殊功能寄存器各位全置0,即各使能位不連接端口引腳;即各使能位不連接端口引腳;XBR2 = 0 x40表示表示位位6置置1,
15、即交叉開關使能。,即交叉開關使能。 30 P0MDOUT是端口是端口0輸出方式寄存器,輸出方式寄存器,P0MDOUT=0 x00表示端口引腳的輸出方式為漏表示端口引腳的輸出方式為漏極開路方式。極開路方式。 P1MDOUT、P2MDOUT、P2MDOUT分別是端分別是端口口1、2、3輸出方式寄存器,各端口設置為輸出方式寄存器,各端口設置為0 xff表示端口引腳的輸出方式為推挽方式。表示端口引腳的輸出方式為推挽方式。 P74OUT是端口是端口47的輸出方式寄存器,各位置的輸出方式寄存器,各位置0即表示輸出方式配置為漏極開路輸出方式即表示輸出方式配置為漏極開路輸出方式 此處表示采用內(nèi)部振蕩器作為系統(tǒng)
16、時鐘,此處表示采用內(nèi)部振蕩器作為系統(tǒng)時鐘,OSCICN = 0 x16表示對內(nèi)部振蕩器使能,并使內(nèi)表示對內(nèi)部振蕩器使能,并使內(nèi)部振蕩器典型頻率為部振蕩器典型頻率為8MHZ。31(4) 延時 void delay1ms(uint time)/延遲子程序0.5MSuint ii;uint jj;for (ii=0;iitime;ii+) for(jj=0;jj=4) P1_0=1; lcddisplay2(); delay1ms(210);/延時4s P1_0=0; P1_1=1; lcddisplay3(); 43 當滿足當滿足fb=4時時,執(zhí)行下面的程序執(zhí)行下面的程序,先進行水先進行水泵放水泵
17、放水,然后進行第二次液晶顯示屏顯示然后進行第二次液晶顯示屏顯示,延延時時4s,關閉水泵關閉水泵, P1_1=1表示蜂鳴器響表示蜂鳴器響,然然后再進行延時后再進行延時44 if(fb=1)|(fb=3) P1_2=1; delay1ms(600); P1_2=0; delay1ms(25); R_FORD(229); delay1ms(1); L_FORD(236); delay1ms(50);/延時0.5s 45 當當fb=1或者是或者是fb=3時時,小車回到起點位置小車回到起點位置, P1_2=1表示對小車進行注水表示對小車進行注水,然后延時一然后延時一段時間段時間,注水停止注水停止,再延時
18、再延時25ms,小車前進小車前進46 if(fb=2) L_BACK(240); R_BACK(249);delay1ms(50);/延時0.5s 47 else if(fb=1)|(fb=3) if(P6=0 x00) R_FORD(229); L_FORD(236); 此語句與前面此語句與前面if(P6&0 x0F)=0 x0F)對應對應,當不滿足條件時當不滿足條件時,執(zhí)行下面的程序執(zhí)行下面的程序48 P6=0 x00,用二進制表示即為用二進制表示即為00000000,即即各路傳感器返回值均為各路傳感器返回值均為0,表示表示8路傳感器均路傳感器均未壓黑線未壓黑線,小車前進未跑偏小車
19、前進未跑偏49 if(P6&0 x02) PWM0_set(245); PWM1_set(220); 當當P6=0 x02,用二進制表示為用二進制表示為00000010時時,即前四即前四路傳感器的右邊第二位壓黑線路傳感器的右邊第二位壓黑線,此種情況下即表示此種情況下即表示小車左小偏小車左小偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)值對小車進行調(diào)整整50 if(P6&0 x04) PWM0_set(235); PWM1_set(230); if(P6&0 x02) PWM0_set(245); PWM1_set(220); 51 當當P6=0 x04,用二進制表示為
20、用二進制表示為00000100時時,即前四路傳感器的右邊第三位壓黑線即前四路傳感器的右邊第三位壓黑線,此種此種情況下即表示小車右小偏情況下即表示小車右小偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整52 if(P6&0 x04)&(P6&0 x08) PWM0_set(235); PWM1_set(245); if(P6&0 x02)&(P6&0 x01) PWM0_set(255); PWM1_set(215); 53 (P6&0 x04)&(P6&0 x08)即表示前四路尋即表示前四路尋跡的右邊第三
21、、四位尋跡壓黑線,此種情跡的右邊第三、四位尋跡壓黑線,此種情況下即表示小車右中偏況下即表示小車右中偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整54 if(P6&0 x02)&(P6&0 x01) PWM0_set(255); PWM1_set(215); (P6&0 x02)&(P6&0 x01)即表示前四路尋跡的右即表示前四路尋跡的右邊第一、二位尋跡壓黑線,此種情況下即表示小邊第一、二位尋跡壓黑線,此種情況下即表示小車左中偏車左中偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整55 if(P6&0
22、 x08) PWM0_set(215); PWM1_set(240); if(P6&0 x01) PWM0_set(255); PWM1_set(200); 56 當當P6=0 x08,用二進制表示為用二進制表示為00001000時時,即前四路傳感器的右邊第四位壓黑線即前四路傳感器的右邊第四位壓黑線,此種此種情況下即表示小車右大偏情況下即表示小車右大偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整57 if(P6&0 x01) PWM0_set(255); PWM1_set(200); 當當P6=0 x01,用二進制表示為用二進制表示為00000001時時,即
23、前四即前四路傳感器的右邊第一位壓黑線路傳感器的右邊第一位壓黑線,此種情況下即表示此種情況下即表示小車左大偏小車左大偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)值對小車進行調(diào)整整58 if(fb=2) if(P6=0 x00) L_BACK(240); R_BACK(250); if(P6&0 x40) PWM0_set(230); PWM1_set(250); 59 P6=0 x00,用二進制表示即為用二進制表示即為00000000,即即各路傳感器返回值均為各路傳感器返回值均為0,表示表示8路傳感器均路傳感器均未壓黑線未壓黑線,小車后退未跑偏小車后退未跑偏 當當P6=0 x40,用
24、二進制表示為用二進制表示為01000000時時,即后四路傳感器的右邊第三位壓黑線即后四路傳感器的右邊第三位壓黑線,此種此種情況下即表示小車右小偏情況下即表示小車右小偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整60 if(P6&0 x20) PWM0_set(250); PWM1_set(250); if(P6&0 x40)&(P6&0 x80) PWM0_set(220); PWM1_set(250); 61 當當P6=0 x20,用二進制表示為用二進制表示為00100000時時,即后四路傳感器的右邊第二位壓黑線即后四路傳感器的右邊第二位壓
25、黑線,此種此種情況下即表示小車左小偏情況下即表示小車左小偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整 (P6&0 x40)&(P6&0 x80)即表示后四路尋即表示后四路尋跡的右邊第三、四位尋跡壓黑線,此種情跡的右邊第三、四位尋跡壓黑線,此種情況下即表示小車右中偏況下即表示小車右中偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整62 if(P6&0 x20)&(P6&0 x10) PWM0_set(250); PWM1_set(240); if(P6&0 x80) PWM0_set(200); PW
26、M1_set(250); 63 (P6&0 x20)&(P6&0 x10)即表示后四路尋即表示后四路尋跡的右邊第一、二位尋跡壓黑線,此種情跡的右邊第一、二位尋跡壓黑線,此種情況下即表示小車左中偏況下即表示小車左中偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整 當當P6=0 x80,用二進制表示為用二進制表示為10000000時時,即后四路傳感器的右邊第四位壓黑線即后四路傳感器的右邊第四位壓黑線,此種此種情況下即表示小車右大偏情況下即表示小車右大偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整64 if(P6&0 x10) P
27、WM0_set(240); PWM1_set(210); 65 當當P6=0 x10,用二進制表示為用二進制表示為00010000時時,即前四路傳感器的右邊第一位壓黑線即前四路傳感器的右邊第一位壓黑線,此種此種情況下即表示小車左大偏情況下即表示小車左大偏,然后重新調(diào)整然后重新調(diào)整PWM值對小車進行調(diào)整值對小車進行調(diào)整66循跡反饋形成分析b=1b=2b=3b=467垂線檢測偏移檢測占空比L298驅(qū)動車輪軌跡TCRT循跡68(9)LCD控制 void sendc(uchar c)/給lcd送命令 P4=c;lcdrs=0;/RS=Llcdrw=0;/RW=LEA=0;/關中斷 delay1ms(1
28、);lcdcs=0;/E的高脈沖lcdcs=1;/E的高脈沖69 delay1ms(1);lcdrw=1;P4=0 xff;/先置1,后讀取delay1ms(1);EA=1; /開中斷 70 void sendd(uchar c)/給lcd送數(shù)據(jù) EA=0;P4=c;lcdrs=1;lcdrw=0;delay1ms(1);lcdcs=1;lcdcs=0;lcdcs=1;delay1ms(1);71 lcdrw=1;P4=0 xff;/先置1,后讀取lcdrs=0;delay1ms(1);while(P4=0 x80);lcdcs=0;lcdcs=1;EA=1; /* if(c=c)delay1
29、ms(3);*/ 72 void lcd_pos(uchar pos)/顯示地址定位函數(shù) sendc(pos|0 x80); 73 void lcd_ini(void)/lcd初始化函數(shù) delay1ms(100);lcdcs=1; delay1ms(5); lcdrs=0;delay1ms(5); lcdrw=0;delay1ms(5); 74 sendc(0 x38);/8位,2行,5*7字體delay1ms(30);sendc(0 x38);/8位,2行,5*7字體 delay1ms(30); sendc(0 x38);/8位,2行,5*7字體delay1ms(30);sendc(0 x
30、08);/顯示開,光標關;不閃delay1ms(30); sendc(0 x01);/清屏delay1ms(30);75 /sendc(0 x01);/清屏 /delay1ms(30);sendc(0 x06);/delay1ms(30); sendc(0 x0C);/ delay1ms(30); 76(10)第一次顯示 void lcddisplay1(void)/顯示主函數(shù) uchar i=0; uchar line1=once:550ml; uchar line2=all:550ml; sendc(0 x01); i=0; lcd_pos(0 x00);/容量顯示 delay1ms(5);77 while(line1i!=0) sendd(line1i+); delay1ms(10); i=0; lcd_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年預購商品房合同3篇
- 2025年度oem服裝加工與品牌授權合同范本3篇
- 2024年標準版商品交易協(xié)議書版B版
- 2024年金融教育與普及項目合同3篇
- 2025年度特色餐廳品牌授權合作協(xié)議3篇
- 2024幼兒園清潔服務租賃合同
- 2024年離婚協(xié)議書規(guī)范格式3篇
- 2024年礦石物流承運協(xié)議標準模板版B版
- 2024購房合同樣書
- 2024年高頻交易系統(tǒng)開發(fā)與授權合同
- 網(wǎng)絡信息安全知識考試參考題庫300題(含各題型)
- 內(nèi)部調(diào)查與舉報制度
- 《賣火柴的小女孩》公開課一等獎創(chuàng)新教學設計(共兩課時)
- 山東省東營市(2024年-2025年小學四年級語文)統(tǒng)編版期末考試(上學期)試卷及答案
- 青島版數(shù)學五年級上冊解方程練習200道及答案
- 農(nóng)產(chǎn)品推廣合同協(xié)議書
- 工程機械租賃服務方案
- 水利安全生產(chǎn)風險防控“六項機制”右江模式經(jīng)驗分享
- 《電力設備典型消防規(guī)程》(DL 5027-2015)宣貫
- 2023年山西普通高中會考信息技術真題及答案
- 劇作策劃與管理智慧樹知到期末考試答案2024年
評論
0/150
提交評論