舵機遠距離數字控制畢業(yè)設計_第1頁
舵機遠距離數字控制畢業(yè)設計_第2頁
舵機遠距離數字控制畢業(yè)設計_第3頁
舵機遠距離數字控制畢業(yè)設計_第4頁
舵機遠距離數字控制畢業(yè)設計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

- 1 舵機遠距離數字控制 摘要 隨著船舶工業(yè)的發(fā)展以前我們所用的模擬電路控制舵機存在著這樣或那樣的問題已經收到越來越多的關注。當傳輸距離很長的時候,模擬電子線路就會容易收到外部信號的干擾從而出現舵機的角度出現大的偏差。并且如果反饋電位器長時間工作就會出現磨損的情況,另外模擬電路和電源的漂移等等諸多的問題都影響舵機準確性?,F在很多大型的船舶都采用動舵輪或者是液壓舵 ,但由于它是機械式的控制所以它的控制受人的反應熟讀的影響,誤差范圍大,精確度不高。 本設計采用的控制器件有 ARM2148 和 STC89C52 單片機。采用 E6B2-CWZ5G 作為角度傳感器,通過ARM2148 控制舵機傳動,將角度傳給 STC89C52 單片機控制的 LCD1602 來顯示。單片機會定時采集舵機的角度從而實時的顯示相應角度。其中 ARM2148 為核心控制器, STC89C52 單片機為輔助控制器。核心控制器與輔助控制器通過串口數據線進行數據傳輸,從而實現對舵機的遠程控制。這種數字電路控制舵機的方法精確度高,結構簡單。數字電路控制舵機,再結合輪船的動力系統(tǒng), GPS 技術與 GIS 技術從而實現船舶的自動駕駛。相對于汽車無人駕駛其難度更低,安全性跟高,前景很廣闊。 關鍵 詞: ARM2148;角度傳感器;遠程控制;自動駕駛; 目錄 1 緒論 . 3 2 系統(tǒng)相關技術分析 .錯誤 !未定義書簽。 2.1 核心控制器件的選擇 . 錯誤 !未定義書簽。 2.2 輔助器件的選擇 .錯誤 !未定義書簽。 2.3 角度傳感器的選擇 .錯誤 !未定義書簽。 2.4 顯示器件的選擇 . -5- 2.5 電動機驅動模塊的選擇 . -5- 2.6 小結 . -6- 3 系統(tǒng)硬件電路設計 .錯誤 !未定義書簽。 3.1 電源的設計 .錯誤 !未定義書簽。 3.2 LCD 液晶顯示電路設計 .錯誤 !未定義書簽。 3.3 驅動電路設計 . -8- 4 系統(tǒng)軟件設計 .錯誤 !未定義書簽。 4.1 整體流程圖設計 .錯誤 !未定義書簽。 4.2 整體程序設計論證 .錯誤 !未定義書簽。 4.2.1 角度檢測程序: .錯誤 !未定義書簽。 4.2.2LCD1602 液晶顯示程序 .錯誤 !未定義書簽。 4.2.3 串口通信程序 .錯誤 !未定義書簽。 5 實現相關技術 .錯誤 !未定義書簽。 5.1 ARM2148 的簡介及運用領域 錯誤 !未定義書簽。 2 5.2 單片機的簡介及運用 . 錯誤 !未定義書簽。 6 總結 .錯誤 !未定義書簽。 致謝信 .錯誤 !未定義書簽。 參考文獻 .錯誤 !未找到引用源。 附 錄程序清單和專利申請書 .錯誤 !未定義書簽。 3 1.緒論 我們采用數字電路控制舵機是考慮了模擬電路控制舵機的缺點的,正是為了克服這些缺點,從而跟好對舵機進行遠程控制,提高其精確度。論文中包括本次設計的整體簡介,硬件連接,軟件編程。 本次設計采用核心控制器件 ARM2148 和輔助控制器件 STC89C52 單片機。我們選擇ARM2148 是因為其比較實用,也是初學者首先接觸的因此比較熟悉。至于單片機的 懸著 是由于其易用,外圍模塊較少。 系統(tǒng)的硬件包括: ARM 模塊、單 片機最小系統(tǒng)、 L298 電動機驅動模塊、角度傳感器、電動機、 蓄電池, LCD1602、編碼器等。 軟件部分包括:電動機驅動模塊程序、 ARM 控制電動機模塊、單片機控制 LCD1602顯示模塊。 4 2.系統(tǒng)相關技術分析 整體設計如下圖所示:采用 ARM2148 為核心控制器件, 采用STC89C52 來控制 LCD1602 來動態(tài)顯示舵機角度,采用 C 語言編程實現各種邏輯的算法和邏輯控制,角度傳感器的脈沖信號作為中端引入 ARM2148,然后通過串口線通過單片機控制的液晶顯示顯示相應的角度。按鍵 控制舵機左轉還是右轉。 圖 1 總體結構圖 2.1 核心控制器件的選擇 核心控制器件的選擇沒有選擇單片機而是選擇 ARM2148 來控制是由于本次設計采用的是三級流水線模式。它需要軟件有很快的處理指令的速度。為了避免 52 單片機執(zhí)行指令過多出現卡死的情況,來實現多個操作同時進行,使處理和存儲之間的操作更加流暢連續(xù),能提供 0.9MIPS/MHZ 的指令執(zhí)行速度,這樣在舵機快速偏轉時,處理器仍然可以遠遠滿足編碼器瞬間給出的眾多條代碼值,使系統(tǒng)更加穩(wěn)定。并且我們首先接觸的也是 ARM2148 這款軟件相對于其它款的我們更熟悉。在整個系統(tǒng)中 ARM2148 起著控制電動機驅動模塊使電動機運轉,同時接受來自角度傳感器的數據即舵機旋轉角度然后將其傳輸給STC89C52 單片機從而實現角度的顯示。因此它是核心模塊。 2.2 輔助器件的選擇 輔助模塊只需接受來自 ARM2148 的關于舵機角度的數據和控制 LCD1602 液晶顯示。由于 STC89C52單片機功耗低、性能高、靈活性高且使我們經常接觸到的單片機類軟件,所以我們選擇了這款單片機。 2.3 角度傳感器的選擇 角度傳感我們我們采用工業(yè)用 E6B2-CWZ5G 角度傳感器,它擁有非常低的阻尼,在軸上固定一重物只需要 10 來克就能將實時角度準確的傳輸到 ARM2148 中。它是一種增量式的旋轉譯碼器,它是通過內部兩個光敏接受管轉化其角度碼盤的時序和相位關系,從而得到其角度碼盤角度位移量增加或減少。增加為正方向,減少為反方向。它具有價格低廉和簡易的優(yōu)勢,因此我們選擇了它。如下圖為它的工作原理: 角度傳感器 主控制系統(tǒng)()() 液晶顯示器 輔助控制系統(tǒng) 按鍵控制 電 機驅動模塊 串口線 5 圖 2 E6B2-CWZ5G 工作原理圖 2.4 顯示器件的選擇 顯示模塊我們有兩種設計方案,分別為數碼管顯示和液晶顯示。數碼管靜態(tài)顯示編程簡單,但其占用的 I/O 口過多 ,電路復雜,成本高。動態(tài)顯示又不能滿足太復雜的電路。因此我們選擇液晶顯示。液晶顯示就克服了數碼管顯示的缺點,同時它還具有功耗低、顯示信息多、操作簡便等優(yōu)點。 2.5 電動機驅動模塊的選擇 驅動模塊我們選擇的是 L298N, L298N 是 ST 公司生產的一種高電壓、大電流電機驅動芯片。該芯片采用 15 腳封裝。它內含含兩個 H 橋的高電壓大電流全橋式驅動器,可以用來驅動直流電動機和步進電動機、繼電器線圈等感性負載;采用標準邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個邏輯電源輸入端, 使內部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用 L298N 芯片驅動電機,該芯片可以驅動一臺兩相步進電機或四相步進電機,也可以驅動兩臺直流電機。而且 L298N 有過電流保護功能,當出現電機卡死時,可以保護電路和電機等。 因此,我們采用安全性更高的 L298N 驅動芯片來驅動電機 ,。以下為該芯片的相關參數: 額定電流 2A 額定電壓 12.5V 額定功率 25W 最大電流 3A 最大電壓 46V 2.6 小結 經過一番的論證與比較,我們決定了系統(tǒng)各個主要模塊的方案如下:電機 驅動模塊采用 L298N;角度傳感模塊采用 E6B2-CWZ5G 角度傳感器;液晶顯示模塊采用現成的數碼管;電源采用單電源雙輸出模塊。 硬件電路設計 3.1 電源的設計 圖 3 電源原理圖 6 3.2 LCD 液晶顯示電路設計 圖 4 液晶顯示 3.3 驅動電路設計 圖 5 驅動電路 3.系統(tǒng)軟件設計 4.1 整體流程圖設計 EN A6EN B11IN15IN27IN310IN412OUT12OUT23OUT313OUT414ISEN A1ISEN B15VS4VSS9GND8U1L298N0.1uFC2104100uFC1+5V +12VD11N4007D21N4007D31N4007D41N4007D51N4007D61N4007D71N4007D81N40070.1uFC4104100uFC3+5V+12V電機驅動 L298NLED11KR112PWMA12Power 5V1234IN1-IN41KR21KR31KR4LED2LED3LED41KR51KR61KR71KR812PWMB12Power 12V12M112M212 34TLP521-112 34TLP521-212 34TLP521-312 34TLP521-4+5V +5V+5V+5V 7 N Y N Y Y 4.2 整體程序設計論證 4.2.1 角度檢測程序 我們采用的角度傳感器是通過計算脈沖的數量來計算小車的偏轉角的。由于脈沖的時間很短,如果采用端口掃描那么在 ARM2148 沒有執(zhí)行掃描時就會錯過一些脈沖的檢測,數初始化各種參數 開始 偏轉 左轉(大于現有角度)度) 向單片機發(fā)送角度 右轉(小于現有角度) 檢測限位開關 檢測串口 和現有角度對比 8 據就會出現錯誤。我們采用外部中斷來計算角度,程序很短所以可以迅速的執(zhí)行不會耽誤其它程序執(zhí)行的執(zhí)行,數值在 0-900,實際值為 0-90 度。 /*/ * 函數名稱: void _irq IRQ_Eint3(void) * 功能描述: 外部中斷計算旋轉角度 * 參 數: 每一個角度有不同的脈沖組成 /*/ void _irq IRQ_Eint3(void) /* a2 脈沖觸發(fā)中斷服務主程序 */ / EXTINT = EINT3; /* clear interrupt 中斷服務主程序 */ k=IOPIN0; /輸入狀態(tài) if(k&1KEY3)=0) /測試 b2 脈沖位置 eint2_counter+; /* 如果超前 +*/ else eint2_counter-; /* 如果超前 +*/ ii5=eint2_counter ; /脈沖數傳送到 ii5 寄存器 EXTINT =8; /* clear interrupt 中斷服務主程序 */ / 清除 EINT3 中斷標志 VICVectAddr = 0x00; / 通知 VIC 向量中斷結束 void EINT1_Handler (void) _irq/* a1 脈沖觸發(fā)中斷服務主程序 */ IENABLE; /* handles nested interrupt 嵌套中斷 */ k=IOPIN0; /輸入狀態(tài) if(k&1KEY1)=0) /測試 b 脈沖位置 KEY1= b /IOSET1 = 0x000F0000; eint1_counter+; /* 如果超前 +*/ else /IOCLR1 = 0x000F0000; eint1_counter-; /*如果反轉 - */ /測試原點位置 if(k&1KEY2)=1&(ii3 =0) ) /原本原點位置從 0 改變?yōu)?1 eint1_counter=1000; ii3 = k&1KEY2 ; / 記錄 z 原點位置 0、 1,KEY2=z ii4 =eint1_counter ; /脈沖數傳送到 ii4 寄存器 IDISABLE; 9 IOPIN1=0xf50000; VICVectAddr = 0; EXTINT =2; /* clear interrupt 中斷服務主程序 */ 4.2.2 LCD1602 液晶顯示程序 本系統(tǒng)采用的是 1602 液晶顯示。前面我給大家介紹了選擇該軟件的原因。它的顯示是由 STC89C52 控制的。它顯示的角度由操作臺操作,它將操作臺實時操作顯示出來,同時由串口線發(fā)送數據給 ARM2148 控制舵機的旋轉。 程序如下: # include /* P1-DB0 DB7 P2.0-RS P2.1-RW P2.2-E */ # define LCD_DB P1 sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /*定義函數 */ # define uchar unsigned char # define uint unsigned int void LCD_init(void);/ void LCD_write_command(uchar command);/寫指令函數 10 void LCD_write_data(uchar dat);/寫數據函數 void LCD_disp_char(uchar x,uchar y,uchar dat);/在某個屏幕位置上顯示一 個字符 ,X( 0-16),y(1-2) /void LCD_check_busy(void);/檢查忙函數。我沒用到此函數,因為通過 率極 低。 void delay_n40us(uint n);/延時函數 /* /*初始化函數 * void LCD_init(void) LCD_write_command(0x38);/設置 8 位格式, 2 行, 5x7 LCD_write_command(0x0c);/整體顯示,關光標,不閃爍 LCD_write_command(0x06);/設定輸入方式,增量 不移位 LCD_write_command(0x01);/清除屏幕顯示 delay_n40us(100); /* /*寫指令函數 * void LCD_write_command(uchar dat) LCD_DB=dat; LCD_RS=0;/指令 11 LCD_RW=0;/寫入 LCD_E=1;/允許 LCD_E=0; delay_n40us(1); /* /*寫數據函數 * void LCD_write_data(uchar dat) LCD_DB=dat; LCD_RS=1;/數據 LCD_RW=0;/寫入 LCD_E=1;/允許 LCD_E=0; delay_n40us(1); /* /*顯示 一個字符函數 * void LCD_disp_char(uchar x,uchar y,uchar dat) uchar address; 12 if(y=1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); /* /*檢查忙函數 * void LCD_check_busy() do LCD_E=0; /for 循環(huán)作延時,普通指令只要 1 次循就可完成。清屏指令 LCD_RS=0; /要用 200 次 循環(huán)便能完成。 LCD_RW=1; LCD_DB=0xff; LCD_E=1; while(LCD_DB7=1); */ /*延時函數 * void delay_n40us(uint n) 13 uint i; uchar j; for(i=n;i0;i-) for(j=0;j2;j+); /在這個延時循環(huán)函數中我只做了 2 次循環(huán), /* /*主函數 * void main(void) LCD_init(); LCD_disp_char(0,1,A); while(1); 4.2.3 串口通信程序 串口在本設計中起著至關重要的作用,它連接了單片機和 ARM,它將 ARM 接受的角度傳感器的數據送給單片機讓單片機把實時角度與操作臺的操作角度對比然后將指令在送給 ARM 再由 ARM 控制舵機左轉還是右轉。 程序如下: /* P0.14 中斷功能演示 按下板子 INT 鍵, 2 組 4 個 LED 交替滅或亮 . */ #include LPC214x.H /* LPC21xx definitions */ #include type.h #include irq.h 14 #include extint.h #include Config.H /* standard I/O .h-file */ #pragma _printf_args; /#include #include / #define uchar unsigned char #define CR 0x0D #define UART_BAUD(baud)(unsigned int)(FOSC*PLL_M ) / (baud *4 *16 ) #define uint unsigned int #define RW 22 /讀寫控制端 0 為寫 1 為讀 #define RS 4 /A0 為 1 時是數據, 0 時為指令數據 #define Elcm 21 / #define busy 0x0800 extern Scan_Key(void); /int printf( char ) ; extern int ii4,ii5; int xx1, x,xx4,xx5,ii6 ; / int i2,k , i3 ; unsigned int io_data=1,rcv_dat; unsigned char const mcu123=WWW.MCU222.COM ; unsigned long val1,val3,val; int i3,i2 ,t=0x31 , tmp ; uchar mcu124=0x34 ; uchar mcu122= ; long su44; unsigned char key,i,i4, strdata20 ; /* 系統(tǒng)設置 , Fosc、 Fcclk、 Fcco、 Fpclk 必須定義 */ #define Fosc 12000000 /Crystal frequence,10MHz25MHz, should be the same as actual status. /應當與實際一至晶振頻率 ,10MHz25MHz,應當與實際一至 #define Fcclk (Fosc*1) /System frequence,should be (132)multiples of Fosc,and should be equal or less than 60MHz. /系統(tǒng)頻率,必 須為 Fosc 的整數倍 (132),且 =60MHZ #define Fcco (Fcclk *1) /CCO frequence,should be 2、 4、 8、 16 multiples of Fcclk, ranged from 156MHz to 320MHz. /CCO 頻率,必須為 Fcclk 的 2、 4、 8、 16 倍,范圍為 156MHz320MHz #define Fpclk (Fcclk / 4) * 1 /VPB clock frequence , must be 1、 2、 4 multiples of (Fcclk / 4). /VPB 時鐘頻率,只能為 (Fcclk / 4)的 1、 2、 4 倍 #define BEEP 18); / 0X1; 0;/ 0 U0DLL = (unsigned char)Baud; / 0X86; 0X5D; / 8 U0LCR = 0x03; /* DLAB = 0 */ /* * 函數名稱: UART0_GetByte() * 函數功能:從串口接收 1 字節(jié)數據,使 用查詢方式接收。 * 入口參數:無 * 出口參數:接收到的數據 */ void UART0_GetByte (void) while (U0LSR & 0x01) =0); / 等待接收標志置位 rcv_dat = U0RBR; / 讀取數據 U0LSR =0x60; /return (rcv_dat); /* 接收一個字節(jié) */ int Get_Byte (void) /* Read character from Serial Port */ while (!(U0LSR & 0x01); return (U0RBR); 16 /* * 函數名稱: UART0_GetStr() * 函數功能:從串口接收 * 入口參數: s 指向接收數據數組的指針 * n 接收的個數 * 出口參數: 無 */ void UART0_GetStr (unsigned int n) / unsigned char *s, for ( ; n0; n-) UART0_GetByte () ; / UART0_GetByte () ; strdata tmp=rcv_dat ; / *s=rcv_dat ; / *s=rcv_dat; tmp+; /* * 函數名稱: UART0_SendByte() * 函數功能:向串口發(fā)送字節(jié)數據,并等待發(fā)送完畢,查詢方式。 * 入口參數: dat 要發(fā)送的數據 * 出口參數:無 */ void UART0_SendByte (unsigned char dat) U0THR = dat; / 寫入數據 while (U0LSR & 0x20) = 0); / 等待數據發(fā)送完畢 /* * 函數名稱: UART0_SendStr() * 函數功 能:向串口發(fā)送一字符串 * 入口參數: str 要發(fā)送的字符串的指針 * 出口參數:無 */ void UART0_SendStr (unsigned int const *str) while (1) if (*str = 0) break; / 遇到結束符,退出 UART0_SendByte(*str+); / 發(fā)送數據 /* 發(fā)送一個字節(jié) */ void Sent_Byte2(unsigned char data) 17 U0THR = data; / 發(fā)送數據 while( (U0LSR&0x20)=0 ); / 等待數據發(fā)送完畢 int sendchar (int ch) /* Write character to Serial Port */ if (ch = n) while (!(U0LSR & 0x20); U0THR = CR; /* output CR */ while (!(U0LSR & 0x20); return (U0THR = ch); /* 發(fā)送一串字符 */ void Sent_Str (unsigned char const *str) while(1) if( *str = 0 ) break; Sent_Byte2(*str+); / 發(fā)送數據 void delay(unsigned int i) unsigned int k=300; while(i0) i-; while(k1)k-; / void delayms2(unsigned int i) /* Delay function */ unsigned int n; while(i1) for(n=18;n1;n-); i-; 18 void delayms (unsigned int i) /* Delay function */ unsigned int n; while(i1) for(n=8535;n1;n-); i-; void delay1s(unsigned char i) while(i1) i-; delayms(20); void init_port(void) /port initialized IODIR1=0x00FF0000; IODIR0=0x00600010; / IODIR0=0x40600010; void Io_Set(uchar pin) /單個 IO 口置位函數 unsigned int io_data=1; io_data=io_datapin; IOSET0=io_data; /IOSET0 為 IO 線 上置位寄存器, 1 有效, 0 無 void Io_Clr(uchar pin) /單個 IO 口清零函數 unsigned int io_data=1; io_data=io_datapin; IOCLR0=io_data; /IOCLR0 為 IO 線上清零寄存器, 1 有效, 0 無 void Io_Set1(uchar pin) /單個 IO 口置位函數 unsigned int io_data=1; io_data=io_datapin; IOSET1=io_data; /IOSET0 為 IO 線上置位寄存器, 1 有效, 0 無 void Io_Clr1(uchar pin) /單個 IO 口清零函數 19 unsigned int io_data=1; io_data=io_datapin; IOCLR1=io_data; /IOCLR0 為 IO 線上清零寄存器, 1 有效, 0 無 void Sent_Byte(unsigned char data) unsigned char i; for(i=0;i1; /void init_port(void) / /port initialized /IODIR1=0x00FF0000; /IODIR0=0x40620010; / /*= 正常讀寫操作之前必須檢測 LCD 控制器狀態(tài) : CS=1 RS=0 RW=1 DB7: 0 LCD 控制器空閑 ; 1 LCD 控制器忙 =*/ void WaitForEnable( void ) /unsigned int i; Io_Clr(RS); delay(1); Io_Set(RW); delay(1); Io_Set(Elcm); delayms(30); / i=IO1PIN; /讀 P1 while( IO1PIN & busy ); Io_Clr(Elcm); 20 /*= 寫控制字符子程序 : E=1 RS=0 RW=0 =*/ void LcdWrite_CMD( uchar CMD,uchar AttribC ) if (AttribC) WaitForEnable(); / 檢測忙信號 ? Io_Clr(RS); delay(2); Io_Clr(RW); delay(2); Sent_Byte(CMD); Io_Set(Elcm); delay(2); delay(2); Io_Clr(Elcm); delay(2); /*= 當前位置寫字符子程序 : E =1 RS=1 RW=0 =*/ void LcdWrite_D( char dataW ) WaitForEnable(); / 檢測忙信號 Io_Set(RS); delay(2); Io_Clr(RW); delay(2); Sent_Byte(dataW); Io_Set(Elcm); delay(2); Io_Clr(Elcm); delay(2); /*= 顯示光標定位 21 =*/ void LocateXY12864(char posx,char posy) uchar temp; / posy &= 0x1; / if ( posy )temp |= 0x98; / /if ( posy )temp |= 0x40; / temp = posx & 0x0f; temp = posx ; temp = posx +temp-1; WaitForEnable() ; / temp |= 0x80; LcdWrite_CMD(temp,1); /指令寫定位 void LocateXY( char posx,char posy) uchar temp; temp = posx & 0xf; posy &= 0x1; if ( posy )temp |= 0x40; / temp |= 0x80; LcdWrite_CMD(temp,0);/指令寫定位 /*= 按指定位置顯示數出一個字符 =*/ void DispOneChar(uchar x,uchar y,uchar Wdata) LocateXY ( x, y ); / 定位顯示地址 LocateXY12864( x, y ); LcdWrite_D( Wdata); / 寫字符 void DispOneChar2(uchar x,uchar y,uchar Wdata) / LocateXY( x, y ); /1602 定位顯示地址 / LocateXY( x, y ); / 定位顯示地址 /lcd_pos(x, y); LcdWrite_D(t ); / 寫字符 /*= 顯示字符串 =*/ void disp(uchar x,uchar y,const unsigned char *ptr) uchar i,l=0; while (ptrl 31)l+; 22 for (i=0;il;i+) DispOneChar(x+,y,ptri); if ( x = 16 ) x = 0; y = 1; /初始化 void lcdreset(void) LcdWrite_CMD(0x38, 0); /顯示模式設置(不測試忙信號)共三次 delayms(50); LcdWrite_CMD(0x38, 0); delayms(50); LcdWrite_CMD(0x38, 0); delayms(50); LcdWrite_CMD( 0x38, 1); LcdWrite_CMD( 0x08, 1); LcdWrite_CMD( 0x01, 1); LcdWrite_CMD( 0x06, 1); LcdWrite_CMD( 0x0f, 1); /*= 顯示字符串 (電壓) =*/ void disp1(uchar x,uchar y,int ii) uchar i,l=5; / L 規(guī)定數字位數 vv1,:小數點參數 unsigned int hu10 ; /u1 , LocateXY( x, y ); / 定位顯示地址 xx1=ii ; /脈沖數傳送到 xx1(借用專用變量 ) hu2=xx1%100000/10000+0;/取余數求整數 ,加 0x30 hu3=xx1%10000/1000+0;/(xx1-hu2*100000) ; hu4=xx1%10000/1000+0;/ 1000 位余數 hu5=xx1%1000/100+0;/v1/100 位余數 /1000 位 v / hu6 =xx1%100/10+0; /10 位余數 hu7=xx1%10+0; /取個位余數 23 t=0; x=0; for (i=1;i31)l+; for (i=0;il;i+) DispOneChar(x+,y,ptri); if ( x = 16 ) x = 0; y = 1; t=t +1 ; /* * Main Function main() */ int main (void) /* 初始化中斷 */ int i22; unsigned char j1,j2 ; unsigned int i1,k1; init_port(); delay(1); / lcdreset(); / disp(0,0 , zeg hz ) ; delay(1); /UART0_Ini () ; 24 / U0FCR = 0x81; / 使能 FIFO,并設置觸發(fā)點為 8 字節(jié) / U0FCR = 0x00; /關閉 FIFO 設置觸發(fā)為 1 字節(jié) delay(1); /Sent_Str(a1); delay(1); / printf (0x34) ; EINTInit(); /disp1(4,1 , ii4 ); EXTINT = 0x09; / 清除 EINT0、 EINT3 中斷標志 VICIntEnable = (1 14)|(1 17); Init_Uart0(UART_BAUD(9600) ; Sent_Str( dddd) ; while( 1 ) /一直等 . / disp(0,1 , dfghg ) ; / ; k1=IOPIN0; /輸入狀態(tài) k1=k1&0x20; if(k1=0x20) /測試 b 脈沖位置 j2=1; else j2=0; / disp(1,1 ,xx) ; / delay(1); / j1=0; if(j2=1) / Init_Uart0(UART_BAUD(9600) ; / UART0_GetStr( 12); / 從串口接收 12 個字符 Sent_Str(4321) ; Sent_Str(asdfg) ; for (i1=0;i112;) tmp=0; i1+; if(0x37= strdata4) Sent_Byte2(strdatai1); / 回傳接收到的數據 if(0x41= strdata1&0x41= strdata2 ) /輸入 AA 開頭即可讀出后 3 位 for (j1=4;j18;j1+ ) Sent_Byte2(strdataj1); / 回傳接收到的數據 / UART0_SendByte (strdataj1); 25 / ii6=strdataj1; DispOneChar2(3+j1,1,strdataj1) ; /disp1(4,1 ,ii6) ; i2=0; if(j2=0) / EINTInit(); / EXTINT = 0x0f; / 清除 EINT0、 EINT3 中斷標志 /VICIntEnable = (1 14)|(1 17)|(1 80) disp1(4,0 ,ii4 ) ; xx5=ii4; i22=0; / delay(10 ); delayms(1) ; i22+; if( xx4=ii5 ) /PLLCON else if ( i2280) disp1(4,1 ,ii5 ) ; xx4=ii5; i22=0; / delay(1 ); / delayms(1) ; i22+; / Scan_Key() ; / / return 0; /* * End Of File */ 26 4.系統(tǒng)實現的相關技術 5.1 ARM2148 簡介及運用領域 定義 嵌入式操作系統(tǒng)( Embedded Operating System,簡稱: EOS)是指用于 嵌入式系統(tǒng) 的 操作系 統(tǒng) 。嵌入式操作系統(tǒng)是一種用途廣泛的 系統(tǒng)軟件 ,通常包括與硬件相關的底層 驅動 軟件、系統(tǒng) 內核 、設備驅動接口、 通信協(xié)議 、 圖形界面 、標準化 瀏覽器 等。嵌入式操作系統(tǒng)負責嵌入式系統(tǒng)的全部軟、硬件資源的分配、任務 調度 ,控制、協(xié)調并發(fā)活動。它必須體現其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能 。 特點 1)系統(tǒng) 內核 小。由于 嵌入式系統(tǒng) 一般是應用于小型電子裝置的, 系統(tǒng)資源 相對有限,所以 內核 較之 傳統(tǒng)的操作系統(tǒng)要小得多。 比如 Enea 公司的 OSE 分布式系統(tǒng) , 內核 只有 5K。 2)專用性強。 嵌入式 系統(tǒng) 的個性化很強,其中的軟件系統(tǒng)和硬件的結合非常緊密,一般要針對硬件進行系統(tǒng)的移植,即使在同一品牌、同一系列的產品中也需要根據系統(tǒng)硬件的變化和增減不斷進行修改。同時針對不同的任務,往往需要對系統(tǒng)進行較大更改,程序的編譯下載要和系統(tǒng)相結合,這種修改和 通用軟件 的 “升級 ”是完全兩個概念。 3)系統(tǒng)精簡。 嵌入式系統(tǒng) 一般沒有系統(tǒng)軟件和應用軟件的明顯區(qū)分,不要求其功能設計及實現上過于復雜,這樣一方面利于 控制系統(tǒng) 成本,同時也利于實現系統(tǒng)安全。 4)高實時性的系統(tǒng)軟件 (OS)是 嵌入式軟件 的基本要求。而且軟件要求固態(tài)存儲,以提高速度; 軟件代碼 要求高質量和高可靠性。 5) 嵌入式軟件開發(fā) 要想走向標準化,就必須使用多任務的操作系統(tǒng)。 嵌入式系統(tǒng) 的 應用程序 可以沒有操作系統(tǒng)直接在芯片上運行;但是為了合 理地調度多任務、利用 系統(tǒng)資源 、 系統(tǒng)函數 以及和專家 庫函數 接口,用戶必須自行選配 RTOS( Real Time Operating System)開發(fā)平臺,這樣才能保證程序執(zhí)行的實時性、可靠性,并減少開 發(fā)時間,保障 軟件質量 。 6) 嵌入式系統(tǒng)開發(fā) 需要開發(fā)工具和環(huán)境。由于其本身不具備 自舉 開發(fā)能力,即使設計完成以后用戶通常也是不能對其中的程序功能進行修改的,必須有一套開發(fā)工具和環(huán)境才能進行開發(fā) ,這些工具和環(huán)境一般是基于 通用計算機 上的軟硬件設備以及各種邏輯分析儀、混合信號示波器等。開發(fā)時往往有主機和目標機的概念,主機用于程序的開發(fā),目標機作為最后的執(zhí)行機,開發(fā)時需要交替結合進行。 核心 嵌入式系統(tǒng)的核心是 嵌入式微處理器 。 嵌入式微處理器 一般具備以下 4 個特點: 1)對實時任務有很強的支持能力,能完成多任務并且有較短的 中斷響應時間 ,從而使內部的代碼和實時內核心的執(zhí)行時間減少到最低限度。 2)具有功能很強的存儲區(qū)保護功能。這是由于 嵌入式系統(tǒng) 的 軟件結構 已模塊化, 27 而為了避免在軟件模塊之間出現錯誤的交叉作用,需要設計強大的存儲區(qū)保護功能,同時也有利于軟件診斷。 3)可擴展的處理器結構,以能最迅速地開發(fā)出滿足應用的最高性能的 嵌入式微處理器 。 4)嵌入式微處理器 必須功耗很低,尤其 是用于便攜式的無線及移動的計算和通信設備中靠電池供電的 嵌入式系統(tǒng) 更是如此,如需要功耗只有 mW 甚至 W 級。 應用 工業(yè)控制 基于嵌入式芯片的工業(yè)自動化設備將獲得長足的發(fā)展,目前已經有大量的 8、 16、 32 位嵌入式微控制器在應用中,網絡化是提高生產效率和產品質量、減少人力資源主要途徑,如工業(yè)過程控制、數字機床、電力系統(tǒng)、電網安全、電網設備監(jiān)測、石油化工系統(tǒng)。就傳統(tǒng)的工業(yè)控制產品而言,低端型采用的往往是 8位 單片機 。但是隨著技術的發(fā)展, 32位、 64位的處理器逐漸成為工業(yè)控制設備的核心,在未來幾年內必將獲得長足的發(fā)展。 交通管理 在車輛導航、 流量控制 、信息監(jiān)測與汽車服務方面,嵌入式系統(tǒng)技術已經獲得了廣泛的應用,內嵌GPS 模塊, GSM 模塊的移動定位 終端 已經在各種運輸行業(yè)獲得了成功的使用。目前 GPS 設備已經從尖端產品進入了普通百姓的家庭,只需要幾千元,就可以隨時隨地找到你的位置。 家庭智能管理系統(tǒng) 水、電、煤氣表的遠程 自動抄表 ,安全防火、防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實現更高,更準確和更安全的性能。目前在服務領域,如遠程點菜器等已經體現了嵌入式系統(tǒng)的優(yōu)勢。 機器人 嵌入式 芯片的發(fā)展將使 機器人 在微型化,高智能方面優(yōu)勢更加明顯,同時會大幅度降低機器人的價格,使其在工業(yè)領域和服務領域獲得更廣泛的應用。 這些應用中,可以著重于在控制方面的應用。就遠程家電控制而言,除了開發(fā)出支持 TCP/IP 的嵌入式系統(tǒng)之外,家電產品控制協(xié)議也需要制訂和統(tǒng)一,這需要家電生產廠家來做。同樣的道理,所有基于網絡的遠程控制器件都需要與嵌入式系統(tǒng)之間實現接口,然后再由嵌入式系統(tǒng)來控制并通過網絡實現控制。所以 ,開發(fā)和探討嵌入式系統(tǒng)有著十分重要的意義。 28 5.2 單片機的簡介及運用 定義 單片機是一種集成在 電路 芯片,是采用 超大規(guī)模集成電路 技術把具有數據處理能力的中央處理器 CPU 隨機存儲器 RAM、 只讀存儲器 ROM、多種 I/O 口和中斷系統(tǒng)、定時器 /計時器 等功能(可能還包括顯示驅動電路、 脈寬調制 電路、模擬多路轉換器、 A/D 轉換器 等電路)集成到一塊硅片上構成的一個小而完善的 計算機系統(tǒng) 。從上世紀 80 年代,由當時的 4 位、 8 位單片機,發(fā)展到現在的 32 位 300M 的高速單片機。 從上世紀 80 年代,由當時的 4 位, 8 位單片機,發(fā)展到現在的 32 位 300M 的高速單片機。 工作過程 單片機自動完成賦予它的任務的過程,也就是單片機 執(zhí)行程序的過程,即一條條執(zhí)行的指令的過程,所謂指令就是把要求單片機執(zhí)行的各種操作用的命令的形式寫下來,這是在設計人員賦予它的指令系統(tǒng)所決定的,一條指令對應著一種基本操作;單片機所能執(zhí)行的全部指令,就是該單片機的指令系統(tǒng),不同種類的單片機,其指令系統(tǒng)亦不同。為使單片機能自動完成某一特定任務,必須把要解決的問題編成一系列指令(這些指令必須是選定單片機能識別和執(zhí)行的指令),這一系列指令的集合就成為程序,程序需要預先存放在具有存儲功能的部件 存儲器中。存儲器由許多存儲單元(最小的存儲單位)組成,就像大樓房有許多房 間組成一樣,指令就存放在這些單元里,單元里的指令取出并執(zhí)行就像大樓房的每個房間的被分配到了唯一一個房間號一樣,每一個存儲單元也必須被分配到唯一的地址號,該地址號稱為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然后再被執(zhí)行。 程序通常是順序執(zhí)行的,所以程序中的指令也是一條條順序存放的,單片機在執(zhí)行程序時要能把這些指令一條條取出并加以執(zhí)行,必須有一個部件能追蹤指令所在的地址,這一部件就是程序計數器 PC(包含在 CPU 中),在開始執(zhí)行程序時,給 PC 賦以程序中第一 條指令所在的地址,然后取得每一條要執(zhí)行的命令, PC 在中的內容就會自動增加,增加量由本條指令長度決定,可能是 1、 2或 3,以指向下一條指令的起始地址,保證指令順序執(zhí)行。 運用領域 1.在 智能儀器 儀表上的應用 : 單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結合不同類型的 傳感器 ,可實現諸如電壓、 功率 、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數字化、智能化、微型化,且功能比起采用電子或 數字電路 更加強大。例如精密的測量設備( 功率計 , 示波器 ,各種分析儀)。 2.在工業(yè)控制中的應用 : 用單片機可以構成形式多樣的控制系統(tǒng)、 數據采集系統(tǒng) 。例如工廠流水線的智能化管 理,電梯智能化控制、各種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論