AVR單片機是1997年由ATMEL公司研發出的增強型內置Flash的RISC(Reduced Instruction Set CPU) 精簡指令集高速8位單片機。可以廣泛應用于計算機外部設備、工業實時控制、儀器儀表、通訊設備、家用電器等各個領域。本文為大家介紹基于AVR單片機的工業電子設計方案,包括機器人,智能小車等。
基于AVR單片機的滅火機器人設計與實現
1 引言
機器人競賽是近年來迅速開展起來的一種對抗活動,它涉及人工智能、機械、電子、傳感器、精密機械等諸多領域。通過競賽可以培養學生的創新意識、動手能力、團隊寫作能力等。其中滅火比賽是開展范圍最廣、影響最大的機器人競賽項目之一。
比賽規則為模仿生活中消防員滅火,機器人從H點出發,在四個房間內尋找任意擺放的蠟燭,并且設法將其滅掉。比賽場地的墻壁高33cm,材質為木板,顏色為黑色。尺寸如圖1所示。對于比賽,得的分越低成績越好。另外根據選擇的模式不同,計分時要乘上相應的系數。
2 系統硬件設計
2.1 系統總體設計
系統以ATmega32單片機為核心,它是一種基于增強RISC結構的、低功耗的8位單片機。其特點為:①片內具有32K字節的可編程 Flash;2K字節的片內SRAM數據存儲器;1024個字節片內在線可編程EEPROM數據存儲器。②片內含JTAG接口。③外圍接口。兩個帶有分別獨立、可設置預分頻器的8位定時器/計數器;一個16位定時器/計數器;四個通道的PWM輸出;8路10位ADC;32個可編程的I/O口。④低功耗,最高工作頻率為16MHz。
根據滅火比賽的規則要求,配以碰撞傳感器、灰度傳感器、火焰傳感器和紅外傳感器。通過兩路PWM控制兩只電機以驅動滅火機器人,另外一路滅火電機由I/O口通過光電耦合器直接驅動。
2.2 系統電源部分
系統采用單電源供電電路時比較簡單,但是考慮到電動機起動瞬間電流很大,會造成電源電壓不穩,影響單片機和輸入電路工作的穩定性和可靠性,因此采用雙電源供電方案。將電機電源和單片機電源完全隔離。單片機以及傳感器電路使用8V供電,電動機使用12V供電。提高電動機的供電電壓,可以提高機器人的運行速度,從而可以提高滅火的成績。
2.3 電機驅動部分
機器人需要控制在一個合適的速度行駛,在滅火的過程中既要以較快的速度找到火源,又要防止因為碰撞而影響比賽的成績。小車的速度是由兩只直流電機控制。 L298驅動芯片是性能優越的小型直流電機驅動芯片之一。它可被用來驅動兩個直流電機或者是雙極性步進電機。在6—46V的電壓下,可以提供2A的額定電流。L298還有過熱自動關斷功能,并有反饋電流檢測功能。為保證L298正常工作,建議加裝片外續流二極管。由ATmega32單片機直接輸出兩路 PWM驅動L298N。改變PWM調制脈沖占空比,可以實現精確調速。脈沖頻率對電機轉速有影響,脈沖頻率高連續性好,但帶負載能力差;脈沖頻率低則反之。通過PD2和PD3兩根I/O口線來控制電機的轉動方向。
2.4 傳感器部分
滅火比賽需要機器人在盡量不碰撞墻壁的基礎上盡可能快地找到蠟燭并將火滅掉。在完成任務的過程中首先需要不碰撞墻壁,然后需要判斷前方是否有火焰。在找到火焰后需要判斷蠟燭旁邊的白線。如果碰撞墻壁的話,需要機器人能檢測出來并進行處理,不然就會發生機器人卡死的情況,那就不能完成任何任務。
圖5所示為紅外傳感器的發射和接收電路。紅外射管采用脈寬調制(PWM)驅動,工作在38KHz的頻率下,減少發射電路的功耗。脈沖發生器由 NE555構成,通過外部的電位器R1來調節占空比和脈沖頻率,由于紅外肉眼不可見,所以電路中加入一個LED指示燈來指示紅外發射管是否在工作。該 LED和紅外發射管串聯,當紅外發射管正常工作時,該LED燈會點亮。接收電路采用西門子公司生產的紅外專用集成接收芯片SFH506-38,它只有接收到38KHZ的脈沖波時才會作用。它內部集成了選項、濾波、放大電路,對外只有3個引腳:①腳為信號輸出端;②腳為接地端;③腳為電源端,所以使用起來非常方便,效果比較理想。
灰度傳感器是模擬傳感器,有一只發光二極管和一只光敏電阻,安裝在同一面上。灰度傳感器利用不同顏色的檢測面對光的反射程度不同,光敏電阻對不同檢測面返回的光其阻值也不同的原理進行顏色深淺檢測。
火焰傳感器是模擬傳感器。它利用紅外敏感型元件對紅外信號強度的檢測并將其轉換為機器人可以識別的信號,從而來檢測火焰信號。火焰傳感器可以用來探測波長在700nm~1000nm范圍內的紅外線,探測角度為60o;,其中紅外線波長在880nm附近時,其靈敏度達到最大。
碰撞傳感器使用碰撞開關,通過I/O口可直接作為數字量輸入。
2.5 LCD顯示及其它電路
液晶顯示器以其微功耗、體積小、顯示內容豐富、超薄輕巧的諸多優點,在袖珍式儀表和低功耗應用系統中得到越來越廣泛的應用。這里采用2行16個字的DM-162液晶模塊,通過與單片機連接、編程,完成顯示功能。
3 滅火機器人軟件設計
場地的四個房間內的任何地方都有可能擺放蠟燭,所以機器人必須能夠實現搜索所有的房間,而且在行走的過程中不允許碰撞墻壁。找到火源后,通過滅火裝置迅速將火滅掉。根據以上的要求設計機器人的滅火邏輯如圖8所示。
機器人采用左手走規則,左手走規則是指機器人始終沿著左面的墻壁行走,一直走完全程。在行走的過程中按照起點、一號房間、二號房間、三號房間、四號房間的順序搜索火源并滅火。機器人首先讀取傳感器信息,然后對傳感器的信息進行判斷。如果發現火源,則進入滅火子程序,該子程序完成趨光、滅火等功能。
4 結論
本文根據滅火比賽規則的要求,基于單片機及傳感器原理,以AVR單片機ATmega32為控制核心,小型直流電機作為驅動元件,設計出一種價格低廉、簡單實用的滅火機器人。通過簡單的修改,可以將此機器人用于其它的競賽項目。
針對市場上大多數教學無人車設計采用單片機單一控制導致其功能擴展性弱、靈活度低等問題,設計了一種基于Atmega128單片機和無線通信的智能教學無人車控制系統,該系統包括PC機控制部分和無人車控制部分,通過PC控制端軟件可以經無線通信模塊實現對無人車的準確運動控制。實驗結果表明,系統工作穩定,無人車在遇到干擾的情況下順利完成貨物運輸、環境勘察、敵我識別、打擊等功能,控制效果理想。
基于AVR的智能教學無人車控制系統設計
智能教學無人車是一種履帶式移動機器人,目前市場上的無人車大多采用單片機對其進行控制,其優點是體積小,成本低,結構簡單,但僅僅依靠單片機遠不能使無人車在復雜多變的工作環境中進行及時調整,并且極大地限制了其功能的擴展。基于此不足,本設計主要利用PC機與無人車的無線通信,使無人車在PC機無線指令下完成前進、后退、轉彎、打擊、生命值顯示、調速和自動行駛等功能,并通過車載攝像頭實時獲取無人車所處環境信息,實現了遠程監控。在執行任務時,如遭遇敵方車輛干擾通信,無人車在抵御干擾信號同時進行敵我識別,適時作出反擊。
1設計原理
教學無人車控制系統由上位機(PC)控制部分和下位機(教學無人車)控制部分組成。系統結構框圖如圖1所示。
系統工作原理為:打開教學無人車電源時,Atmega128單片機通過語音模塊使揚聲器發出啟動提示。當上位機無線控制臺及PC端軟件準備好后,PC端控制軟件通過USB口向無線控制臺單片機發出指令,使其配置無線模塊相關寄存器,芯片進入指令發射模式;下位機由Atmega128單片機控制,在接收到上位機的指令后通過其集成的PWM外設模塊產生2路PWM波和4條轉向控制線經電機驅動模塊增大驅動能力后控制左右2個電機產生相應的動作。例如,當PC端發出“左轉”的指令時,下位機的無線模塊接受成功后會自動返回接受成功應答信號。接著Atmega128單片機通過PA口控制L298P,使左側電機反向轉動,右側電機正向轉動,從而實現左轉的功能;當PC端發出“打擊”指令時,Atmega128則通過PE5口使紅外發射管發出相應碼制的紅外進攻信號;當PC端發出“自動行駛”指令時,Atmega128結合接收霍爾傳感器采集回來的數據,通過相應算法來協調左右兩側的電機,使坦克完成直線行走、轉過固定角度,行駛固定距離等功能。教學無人車通過連接到PE5口的紅外傳感器感應對方無人車的攻擊信號。如果接收到紅外信號,PE5口會輸入固定碼制的信號,此時主控芯片會將生命參數減一并熄滅一個LED燈,當所有LED燈都被熄滅后,主控模塊會通知語音芯片發出陣亡提示,無人車停止一切動作。
2硬件電路設計
教學無人車控制系統硬件電路設計包括PC端無線控制臺部分和下位機無人車控制部分的硬件設計。
2.1 PC端無線控制臺部分
硬件設計無線控制臺部分由PC機、STC12LE5A60S2單片機、NRF24L01無線模塊及PL2303組成。PC端控制臺軟件通過USB口向 STC12LE5A60S2發出指令,使其通過SPI串行通信協議配置NRF24L01的相關寄存器,隨后芯片進入發射模式,將上位機指令轉發給下位機。其設計電路圖如圖2所示。
2.2下位機無人車控制部分
硬件設計下位機硬件由MCU模塊、電機驅動模塊、傳感器模塊、無線模塊、語音模塊、LED生命值顯示模塊以及電源模塊組成。
2.2.1 MCU模塊
MCU模塊以Atmega128單片機為核心,Atmega128單片機是一款高性能、低功耗的AVR 8位微處理器,處理速度可達1 MIPS/MHz,應用先進的RISC結構,特別是具有I2C、SPI、PWM、RS232串口、ADC、定時器等功能十分全面的外設。該單片機通過 SPI串行通訊接口與無線模塊連接,通過通用可編程I/O接口與電機驅動模塊、語音模塊、紅外發射管和接收管連接。
2.2.2電機驅動模塊
電機驅動模塊用于驅動直流電機,采用L298P電機驅動芯片。L298P是SGS公司的產品,為20管腳的專用電機驅動芯片,內含二個H—Bridge的高電壓、大電流雙全橋式驅動器,接收標準TTL邏輯準位信號,可驅動46 V、2 A以下的步進電機和直流電機,具有高電壓、高電流的特點。電路設計如圖3所示。
Enable控制電機停轉,接到單片機的PE3、PFA口上,由這兩個I/O口產生PWM波控制電機轉動。input1—input4控制電機的正反轉,接到單片機的PA0-PA3口上。OUT1、OUT2和OUT3、OUT4之間分別接2個直流電機。
2.2.3傳感器模塊
傳感器模塊包括紅外模塊和霍爾模塊兩部分。
紅外模塊包含接收和發射兩個功能模塊。紅外接收模塊由一個紅外接收管構成,接收對方車輛發射的紅外攻擊信號。當系統接收到進攻信號時,PE6引腳上會出現一個高電平,觸發一次外部中斷,在中斷服務程序中處理并判斷紅外數據。如果確認為進攻信號,則使生命值變量減一,同時熄滅一個LED燈。發射模塊由一只紅外發射管和一個三極管組成,紅外攻擊信號經過三極管放大后由紅外發射管發出。攻擊信號為8位數據,當收到進攻指令時,發射模塊將程序中設定好的8位數據按位發出。
霍爾模塊由兩只霍爾傳感器和四片磁鐵組成,用于測速,以實現調速、自動行駛等功能。磁鐵正反安放在左右兩個電機減速箱的二級齒輪的邊緣上。當教學無人車行駛時,電機帶動齒輪轉動,兩片磁鐵就會交替從霍爾元件下面經過,由于兩片的磁場方向不同,就會使霍爾元件內部的電子發生不同的偏轉,這樣,二級齒輪每轉過一周就會使霍爾元件產生一個脈沖信號,構成閉環系統。主控芯片接收脈沖信息,通過不同算法可控制兩電機完成不同的控制要求。
2.2.4語音模塊
語音模塊由WT588D語音芯片和SPI尋址的8M ROM芯片及其外圍電路組成。使用前將需要播放的語音燒寫在ROM芯片中。語音模塊使用三線串口控制模式,這種控制模式由CS,DATA,CLK 3條通信線組成,分別連接到Atmega128的PC0、PC1、PC2 3個I/O口。控制時序根據標準SPI通信方式。
2.2.5無線模塊
無線模塊主要包括NRF24L01和Atmega128.NRF24L01采用FSK調制,內部集成NORDIC公司自家的Enhanced Short Burst協議,可實現點對點或是1對6的無線通信,無線通信速度可達2.4 Gbps,并可以通過配置其寄存器實現調頻傳輸。主控芯片通過SPI協議配置NRF24L01的相關寄存器來完成對無線模塊的初始化和數據的傳輸。無線模塊的SPI信號線對應的接到Atmega128的PB0-PB3 4個I/O口上,CE端接到PE2,利用Atmega128內部集成的SPI功能進行通信。無線模塊電路設計如圖4所示。
3軟件設計
軟件設計包括控制端軟件的設計和終端軟件的設計。
3.1控制端軟件設計
無人車控制臺的主控軟件將鍵盤指令轉化為控制碼發往下位機,控制小車的動作并顯示下位機發來的狀態信息???。該軟件利用Labview串口通訊將鍵盤指令轉化為二進制字符串送到上位機。利用模擬SPI的方式,通過STC12LESA60S2配置NRF24L01的寄存器使其處于發射模式。當收到PC串口發送的數據時,NRF24L01在單片機的控制下將數據逐位發出。設計的控制端軟件如圖5所示。
3.2終端軟件設計
教學無人車的終端軟件主要包括無線接收程序、驅動控制程序等。程序中定義變量Life為生命值標識,定義Date為小車的控制標識,定義函數Motor()為電機控制函數。流程圖如圖6所示,主要分為以下步驟:
1)小車啟動后,首先初始化各I/O口、系統中斷、SPI接口以及NRF24L01的相關寄存器。小車的無線模塊配置為接收模式。
2)下位機接收到無線信號后會產生一個中斷,將數據通過SPI送到Atmega128中。在控制程序中,用多分支選擇結構switch—case判斷Date的值,通過調用Motor()函數控制電機做出相應動作。
3)接收到紅外信號時,經判斷若為有效信號,則使生命值標識Life減一。同時判斷當前的Life值,設置PA口的值控制LED燈(生命值)的顯示。
4結束語
文中進行了一種基于Atmega128單片機和無線通信的無人車控制系統設計。實驗結果表明,教學無人車在無障礙區域無線通信有效傳輸距離可達 80~100米,利用車載攝像頭可以實時獲取無人車所處環境信息,實現遠程監控。其創新點是采用了PC控制模式和單兵運行模式兩種方式對無人車進行控制,極大地增強了無人車的功能性和環境適應能力。在實際對抗演練中,無人車在遇到干擾的情況下順利完成貨物運輸、環境勘探、反擊敵方車輛等功能,取得了良好的控制效果。該設計可廣泛應用于短途貨運客運、應急救援、惡劣環境下自動作業等領域。
基于AVR單片機的控制系統設計
引言
現在許多的系統都采用了多通道Input/Output的設計,控制系統的設計也日趨復雜、龐大,所以有必要將控制電路單獨分離出來。過去許多系統均采用 C51系列單片機作為控制電路,但其功能有限,電路設計較為復雜、影響了系統的穩定性,也不易擴展。本文介紹的AVR單片機由美國ATMEL公司生產,采用RISC指令集,內置RAM及可以擦寫數千次的FLASH,采用哈佛結構,速度較快。ATmega128為此系列中功能最強大的一款,用于設計控制系統能適應現時復雜系統的要求。
系統硬件設計框架
硬件系統主要由CPU(AVR單片機)、人機操作和顯示接口(液晶顯示、鍵盤、指示燈和蜂鳴器)、通信接口組成。系統框圖如圖1所示
圖1系統硬件設計框圖
CPU為核心處理器件,通過I/O接口方式或A/D總線方式與液晶、顯示鍵盤、指示燈和蜂鳴器交互,作者實現了兩個版本,分別采用I/O方式和A/D總線方式。通信接口主要用到了UART接口和擴展的網絡接口。其中UART提供了RS-232和RS-485接口,RS-232提供全雙工單對單通信同時,而 RS-485以主/從方式與系統的多個部分通信,可用于多通道的輸入輸出設備。該芯片本身并不帶網絡接口,通過擴展一個W3100A連接RT- L8201(L)芯片,實現TCP/IP協議棧,從而使設備可以接入LAN,實現在LAN內的遠程控制管理和監控。
系統軟件結構
系統軟件體系分為幾個部分:
(1)系統的循環檢測部分,用于檢測各通道的系統設備工作是否正常,出現異常時則通過三色指示燈報警(綠色代表正常,紅色代表異常,黃色為中間狀態)。
(2)系統的設置部分,接受用戶按鍵,用戶可以在GUI上設置希望設置的參數。
(3)網絡接口部分,此時單片機系統不參與設置,主要功能將網絡部分獲得的數據導至各通道。軟件系統的核心部分在于菜單結構的設計。
本系統采用一種基于節點編號的三叉樹狀菜單的設計。將整個菜單看作一個菜單樹,每個界面對應于樹中的一個節點,父節點為當前菜單的上一級菜單;右節點為當前菜單的“兄弟”菜單,亦即上級菜單的其余子菜單。
我們采用對節點編號的方式將整個菜單樹串起來,通過識別節點編號(ID)就能知道該節點處于哪一級菜單,同時也便于我們將菜單數初始化。編號方式:每級子菜單的編號為上級父菜單ID乘以10再加上該級子菜單在上級菜單中對應的子項號(1,2,3.),我們將根節點ID編號為1,則根節點菜單的子菜單對應的 ID分別為11,12,13.ID為11的節點的下級菜單ID為:111,112,113.一個樹型結構菜單的結構和ID編號的實例如圖2所示。
Typedef structmenu{ long ID; / /當前菜單ID void ( * disp laymenu) ( long i, unsigned char j) ; / /當前菜單對應處理函數char cur; / /當前菜單子項char total; / /子菜單總數structmenu * up, * down, * right; / /毗鄰子菜單}MENU;
圖2 一個菜單樹的實例
對于用戶按鍵操作切換不同的菜單時,我們只需修改一個指向對應菜單節點的全局菜單節點指針即可。當用戶按下“ESC”鍵時,菜單指針指向當前節點的父節點,按下“Enter”鍵時,則指針指向對應節點的子節點。
用于AVR單片機的RAM空間較小,只有4KB,我們需設計一種合理而簡潔的數據結構,我們將菜單的數據結構定義為(C語言實現)。
圖3 menuselect函數的流程圖
將菜單分為顯示型菜單和功能性菜單,顯示型菜單項用于切換各級菜單,功能型菜單則執行最底層菜單所對應的操作,total變量為0則表示為功能型菜單,大于0則表示選擇型菜單。通過菜單的ID,即可以知道當前菜單的顯示位置和內容,將此信息放在對應的displaymenu函數中可以節省數據空間,不用對于功能型菜單建立額外的ID與處理函數間的對應關系表,從而實現功能型菜單和顯示型菜單的一致性操作。一個供參考的執行函數可以寫作:
if(g_pmenu->total>0)
{ g_pmenu=menuselect(g_pmenu,Key);} else {(g_pmenu->displaymenu)(g_pmenu->ID,g_pmenu->cur);}
其中menuselect函數用于切換對應的菜單子項,按鍵為“UP”鍵和“DOWN”鍵時,只需修改g_pmune->cur即可;按下 “ENTER”鍵時,則g_pmenu=g_pmenu->down,再根據cur值,g_pmenu=g_pmenu->right;按下 “ESC”鍵,則g_pmenu=g_pmenu->up.
這種設計使得代碼數據量變得較小,同時增強了程序的擴展性,需要增加或修改菜單項時,不論是功能型菜單還是執行性菜單,只需要修改對應的菜單結構的數組即可,而不必修改對應的執行代碼。經過這樣的簡化后,發現對于菜單數較多的多通道輸入/輸出系統,系統RAM區還是不夠用。對于一個8輸入通道的系統,每個通道的參數設置項可能多達40項,總菜單節點大于300個,每個節點占用14B,則整個菜單節點所占的RAM已超過4K,所以這種方式還是需要進一步改進。
注意到多通道的參數設置項完全相同,ID為111,112,118的菜單分支完全一樣,ID為121和122的菜單分支也完全相同。可以定義一種 Sibling菜單,從而刪去ID為112~118以及ID為122的菜單節點和子節點(虛線框所示),其上級菜單(ID為11和ID為12)的項目中的 total值均變為1.為了區別不同的通道分支,有兩種實現辦法:
一種處理方法采用全局變量
增加一個g_CODER_Channel_Number的全局變量,用于保存當前的通道號。在menuselect函數中,增加一個針對本系統設計的一個判斷,當ID為11時,則不修改對應的g_pmenu->cur,而是直接修改變量g_CODER_Channel_Number,進入對應的顯示函數后,直接根據g_CODER_Channel_Number判斷通道號,從而輸出對應的值。這種方法不需要改變系統設計的結構,但需要針對不同的系統修改主處理函數menuselect.
另一種處理方法在菜單結構中增加一個MenuSibling結構,定義為
typedef struct _menuSibling{
signedcharcur;signedchartotal;}SIBLING;同時對應的菜單結構修改為typedefstructmenu{……
SIBLINGSibling;}MENU;
這樣,ID為11的結構項的Sibling.total為8,Sibling.cur為當前的子菜單項。判斷到total>0且 Sibling.total>0時,可知其下一級菜單為SIB2LING菜單,此時以前需修改cur想的操作則修改Sibling.cur即可。這種設計下,每個節點增加了2B的空間,但是保證的程序的一致性,對于不同的系統其設計基本一致。
以上菜單項的設計用于系統設置部分,當退出系統設置時,即進入系統循環檢測部分。單片機通過RS-485接口檢測各個通道是否正常,當正常時則顯示為綠燈,出現異常則顯示為紅燈,黃燈為中間狀態。指示燈的流程參見圖4.
圖4循環檢測的指示燈流程
結束語
按照本文提供的方法優化后的設計,可以滿足大多數的多通道輸入/輸出系統的控制系統的需要,整個系統的設計主要在于建立一個菜單樹,將對應的節點編號,再編寫對應的節點處理函數即可。這種設計使得程序的開發、維護都很容易,具有較強的可擴展性和可移植性。
基于AVR單片機的有害氣體紅外感應及語音警示控制系統
引言
利用紅外感應系統感應附近有無有害氣體,當紅外感應系統感受到有有害氣體接近時,送出持續一段時間的高電平;單片機通過開啟中斷,啟動語音芯片,單片機通過串口通信,從上位機提取的有害氣體參數提示給附近人體,并經過與安全值的比較判定當前環境是否安全。對語音芯片的使用,先將必要的文字、數字信息錄制進去,放音時,通過單片機自動尋址,把實時參數讀取出來。為便于以后系統改進或移植到其他系統,可設計錄音、放音電路,通過切換錄制不同內容。系統設計友好、方便,給人的信息也更加直接。
1系統總體設計方案
在氣體濃度是現有可利用的數據的基礎上,考慮了系統的銜接性和可移植性。系統總體方案見圖1。
本系統分為四大模塊:核心控制模塊、語音電路模塊、紅外感應模塊以及數據的讀取。在氣體濃度為現有可利用資源的前提下設計了系統如何進行讀取控制。核心控制模塊采用單片機作為控制器件,配合適當的外圍電路,控制整個系統的運行。紅外感應模塊以一個紅外傳感器為核心,配置一定的信號處理電路,往單片機發信號。語音電路以語音芯片為核心,設計了錄音、放音兩種電路。
1.1核心控制模塊的設計
核心控制器件選用了單片機,其最小系統構成如圖2所示。
該模塊是系統的核心,當紅外感應系統感應到人體,會送出中斷信號,單片機得到信號后執行中斷,通過串口通信讀取氣體濃度,然后到語音芯片尋址,并控制語音模塊把氣體濃度報告出來。除了基本的外圍電路,核心控制模塊外主要應用了中斷、串行通信和基本的輸入、輸出功能。
本系統中上位機通過串口實現與單片機通信,然后由單片機進行處理,單片機接受紅外信號后,控制語音芯片工作,播放相應的語音信息。可選的單片機較多,如AVR、AT89C51等。采用單獨的控制芯片的好處是減少主控芯片(CPLD)的工作量,提高系統的性能。我們選用了AVR單片機。AVR是基于RISC(精簡指令集計算機)結構的單片機,簡稱AVR單片機,該系列單片機在吸收PIC及8051單片機優點的基礎上,進行了重大改進。與普通的51系列單片機相比,AVR單片機有很多優點。首先給人最直觀的就是具有JTAG邊界掃描、仿真、編程功能,不會造成以往仿真通過而脫機不行的現象。
1.2紅外感應模塊的設計
該模塊相對簡單,核心用了紅外傳感器,只把信號進行了簡單處理,送給單片機的中斷即可,見圖3。
1.3數據讀取方式的設計
對數據的讀取有兩種方法:一種是直接與硬件電路結合,16位二進制數據讀取過來,進行整理還原;另一種是通過串口通信,把已經由上位機整理好的數據,通過RS-232協議讀取過來。顯然,較第1種方法,通過串口的方式避免了對數據重復整理,編程更簡單。對整個項目而言,設計更合理,縮短了開發周期。
本系統采用的是串行數據通信方式,接口為RS-232串口,實驗證明這種通信方式簡單易行,符合本系統要求。本系統采用的是半雙工配置,它要求下位機和主機控制器雙方都具有獨立的發送和接收能力。
接收/發送時鐘用來控制通信設備接收/發送字符數據速度,該時鐘信號通常由微機內部的時鐘電路產生。接收數據時,接收器在接收時鐘的上升沿對接收數據采樣,進行數據位檢測。發送數據時,發送器在發送時鐘的下降沿將移位寄存器的數據串行移位輸出。
接收/發送時鐘頻率與波特率有如下關系:
式中:Fe為接收/發送時鐘頻率;n為頻率系數,n=1,16,64;vc為收/發波特率。
接收/發送時鐘的周期Tc與發送的數據位寬Td之間的關系是:
式中:n=1,16,64。
若取n=16,那么異步傳送接收數據實現同步的過程如下:接收器在每一個接收時鐘的上升沿采樣接收數據線,當發現接收數據線出現低電平時就認為是起始位的開始,以后若在連續的8個時鐘周期(因n=16,故Td=16Tc)內檢測到接收數據線仍保持為低電平,則確定它為起始位(不是干擾信號)。通過這種方法,不僅能夠排除接收線上的噪聲干擾,識別假起始位,而且能夠相當精確地確定起始位的中間點,從而提供一個準確的時間基準。從這個基準算起,每隔 16Tc采樣一次數據線,作為輸入數據。一般來說,從接收數據線上檢測到一個下降沿開始,若其低電平能保持nTc/2(半位時間),則確定為起始位,其后每間隔nTc時間(一個數據位時間)在每個數據位的中間點采樣。
2通信軟件設計
系統通信軟件由下位機、主機控制器通信軟件和上位機監控軟件3部分組成。下位機通信軟件功能主要是接收主機控制器發送過來的信號,針對各下位機地址發送應答信號,再根據主機控制器發來的控制信號做出相應的反應,隨后發送主機控制器所需數據。其通信功能使用了單片機的串行中斷和查詢收發狀態標志位的方法實現。下位機平時對各監控點進行數據采集并定時存儲,當有串行中斷時執行串行中斷服務程序,判別是否為本機的地址信息,地址信息與本機地址相符時,轉為接收控制命令,并執行相應的操作;地址信息與本站地址不符時則退出中斷。下位機通信流程圖如圖4所示。
主機控制器的通信軟件實現功能主要包括呼叫各從機(下位機),并向各從機發送查詢控制命令。其工作過程為:控制器發送需呼叫的從機的地址,然后等待接收從機的應答信號,若應答信號正確即發送控制命令,若應答信號不正確則重新發送需呼叫的地址,并等待接收應答信號,接收到應答信號后接收下位機發送的數據,存儲在相對應的數據存儲區并在LCD(液晶顯示器)顯示屏中顯示出來。對同一從機多次呼叫而在規定時間內無應答信號或應答信號不正確,則提示錯誤信息。圖5為主機控制器通信流程圖。
上位機監控軟件由Visual C++編寫,具有良好的可視效果,功能包括數據查詢、數據存儲、串口通信設置、視頻監控、圖表顯示(單機、多機)等。上位機的數據來自主機控制器,其通過RS-232串口網絡傳送給上位機,它的接口與RS-485網絡的接口是并行的,標準接口有25條線、4條數據線、11條控制線、3條定時線、7條備用和未定義線,但常用的只有9根。
3結束語
針對該系統,除了可以使用自己設計的上位機軟件進行調試,還可以利用一個簡單的串口調試器來實現。該系統覆蓋了單片機技術及一部分模擬、數字電路的知識,系統具有一定的操控性、工作穩定、實現容易、成本低,具有很高的使用價值,在系統建成后,運行結果表明系統工作穩定可靠,在工業控制領域有著廣闊的前景。
基于AVR處理器的CAN總線應用
1 前 言
現場總線是當前工業總線領域中最活躍的一個領域, CAN 總線是工業數據總線領域重要的現場總線之一。CAN 是Contro ller Area N etw ork的縮寫, 是國際標準化的串行通信協議。在當今的汽車產業中, 出于對安全性、舒適性、方便性、低公害、低成本的要求, 各種各樣的電子控制系統被開發出來。由于這些系統之間通信所用的數據類型及對可靠性的要求不盡相同, 由多條總線構成的情況很多, 線束的數量也隨之增加。為減少線束的數量、通過多個LAN進行大量數據的高速通信, 1986年德國電氣商博世公司開發出面向汽車的CAN 通信協議。而今CAN 在歐洲已是汽車網絡的標準協議。CAN 的初衷是為了解決汽車里多種復雜數據的通信, 后來證實在很多工業領域也能應用自如。
2 CAN 總線特性及當今狀況
CAN 總線與其他通訊網絡的不同之處在于: 報文傳送中不包括目標地址, 以全網廣播為基礎, 各接收站根據報文中反映數據性質的標識符過濾報文;強化了對數據安全性的關注, 滿足控制系統較高的數據需求。它具有如下顯著特征: 極高的總線利用率、低成本、高速的數據傳輸速率、遠距離傳輸、可靠的錯誤處理和檢錯機制、可根據報文的ID決定接收或屏蔽該報文, 節點在錯誤嚴重的情況下具有自動退出總線的功能等等。
CAN 總線所需完善的通信協議可由CAN 控制器芯片和接口芯片實現, 大大降低了系統的開發難度、組成成本、縮短了開發周期, 其高性能高可靠性以及靈活的設計受到人們的重視, 應用也越來越廣泛。目前比較流行的控制器芯片是飛利浦公司的SJA1000和收發器芯片TJA1050。
由于近幾年來 CAN 總線技術逐步在我國推廣開來, CAN 總線技術的獨特特點 傳輸數據的可靠性和實時性, 已獲得國際自動化控制領域的認可,其應用前景十分光明。國內推動CAN 總線技術進步的應用事例不斷擴展, 積極促進了我國自動化技術的進步。由于CAN 總線本身的特點, 其應用范圍己經擴展到過程工業、機械工業、數控機床、醫療機械、家用電器及傳感器等領域, 而在電梯控制系統中, 主板需要接收不同樓層呼梯、轎廂里呼梯、調整電梯運行參數等多路信號, 因此CAN 總線的優勢明顯。如圖1所示。
圖1 CAN總線應用拓撲結構
3 集成CAN 控制器的ARM 微處理器
CAN 總線基于一組嚴格的協議, 一般來說在主CPU 外接一個專用CAN 控制器以實現。由于近年來微處理器的迅速發展, 出現了很多功能強大的集成CAN 控制器的CPU, 使得在CAN 總線應用上又簡便了一些。而在價格上, 集成CAN 總線的微處理器和一般處理器加上專用CAN 控制器芯片的價格相當, 所以, 集成CAN 總線的微處理器必然成為今后CAN 總線應用的趨勢。NXP 公司生產的ARM結構LPC2294就是其中一款流行的帶CAN 總線控制器的CPU。它是基于一個支持實時仿真和跟蹤的32位ARM7TDM I- S CPU 的微控制器, 并帶有256k字節嵌入的高速Flash 存儲器。極低的功耗、多個32位定時器、8路10位ADC、4路CAN以及多達9個外部中斷使它們特別適用于工業控制, 因此,LPC2294也可作為電梯控制系統的主控制器。
4 集成CAN 控制器的高端8位AVR
上文提到, 電梯控制系統需要處理多路信息, 而且它們可能是具有不同傳輸速率的, 因此需要使用不同通道的CAN 總線控制器。對于控制系統, 必須具有可操作性, 考慮到要減輕主CPU 的負擔, 因此,設計一個簡單的操作系統對主系統進行操作, 而數據的交換方式就是采用CAN 總線傳輸, 此文中稱這個操作系統為副系統。副系統相對比較簡單, 其功能主要包括: ! 和主板進行信息交換; ? 具有按鍵供輸入; # 具有顯示信息的顯示器。針對功能的需要和程序的體積, 選用了ATMEL公司近年力推的8位AVR控制器at90can128。
at90can128是一種基于AVR 增強型R ISC結構的低功耗CMOS 8位單片機。通過執行一個單時鐘周期的高效指令, AT90CAN128每MH z能達1M IPS,這就可讓系統設計人員將功率損耗與處理速度優化。AVR內核具有豐富的指令集并帶有32個通用目的工作寄存器。32 個寄存器全都直接連到運算邏輯單元( ALU ) , 允許兩個獨立的寄存器在一個時鐘周期執行單個指令的方式訪問。其結果就是, 采用這種結構的速度比常規的R ISC單片機快10倍的同時代碼效率更高。它除了擁有一般AVR 處理器的AD 模塊, SPI模塊外, 還集成CAN 控制器, 為搭建基于CAN 通信的系統提供了便利。控制結構如圖2所示。
圖2 at90can128的CAN控制結構。
對于復雜的CAN 通信協議, 在此不詳述, 以下就at90can128的CAN控制器使用作介紹。
a t90can128的CAN 控制器提供了所有有利于消息管理的硬件, 對于每個要發送或接收的信息都是通過一個叫做消息對象( message ob ject) 的東西來封裝起來的。在對模塊初始化的時候, 程序會指定哪些消息要發送, 哪些消息要接收, 只有那些約定好標識符的消息才能被正確無誤地交換。另外, 對于接收到的遠程幀, 控制器會進行相應的自動回復。
所以在這種方式下, 相對于最原始的CAN 控制方式, CPU 的負擔大大減小了。用戶可以根據自身要求, 通過對相關寄存器進行配置達到自己的要求。
而在發送消息之前, 必須初始化幾個字段:
其中IDT 是標識符字段, IDE 是標識符擴展使能選擇, RTRTAG是遠程傳輸請求, DLC 是數據長度代碼, RBnTAG 是保留字段( n = 0, 1) , MSG 是指向相應MOB的CAN 數據。當MOB 的發送指令執行后, MOB 就會準備發送一個數據或者是一個遠程幀。接著, CAN 通道就會掃描各個MOB, 尋找到優先級最高的MOB, 將其發送出去。當傳送成功后,MOB 狀態寄存器CANSTMOB 中的TXOK 位就會置位。而最重要的是, 對于每一次新的數據傳輸都必須重新對相關寄存器初始化, 否則無法正常工作。
接收消息之前所要做的初始化步驟基本相同,只是多了IDMSK 和IDEMSK 標識符掩碼的設置。
以下就給出基于AVR at90can128CAN 總線接口初始化以及發送、接收功能模塊的關鍵代碼及注解(見圖3)。
圖3 電梯系統主板與調試器之間的CAN通信
CAN 初始化:
CANGCON | = 0X01;
for( i= 0; i< 15; i+ + )
{
CANPAGE = i< < 4; / /將15個MOB 都初始化一次
CANCDMOB = 0;
CANSTMOB= 0;
CAN IDT1= 0;
CAN IDT2= 0;
……
for( j= 0; j< 8; j+ + )
CANMSG= 0;
CANBT1= 0X1E; / /設置CAN 傳輸波特率, 16分頻
CANBT2= 0X40;
CANBT3= 0X49;
CANPAGE = ( 0< < 4) ; / /選擇MOB0作為接收MOB, 并設定標識碼
CAN IDT1= 0X00;
CAN IDM1= 0X00;
……
CANPAGE = ( 1< < 4); / /選擇MOB1作為發送MOB, 并設定標識碼
CAN IDT1= 0X00;
……
}
發送模塊代碼:
CANPAGE = ( 1< < 4); / /選定MOB1
If( ( CANGSTA& 0X10) = = 0) / /查詢CAN 狀態寄存器的TXBSY 位, 為0, 則可以發送
for( i= 0; i< 8; i+ + )
{
CANMSG= my _dada[ i] ; / /將要發送的數據裝入數據寄存器中, 共8 by te
CANCDMOB | = 0X48; / /發送
}
接收模塊代碼是類似的, 設計思路都是在判斷發送允許標志之后, 如果允許, 就將數據裝入到指定的MOB中, 而每個MOB 一個發送周期一共可以發送8byte的數據。而CAN 總線的另一端是NXP公司LPC2294的CAN總線外圍, 其結構和原理都差不多。
當然, 在寄存器設置中會有一點差別, 但只要兩個CPU 約定好數據幀的標識符編號是什么, 傳輸速率相同, 就可以進行數據交換了。由于篇幅有限,LPC2294的CAN接口設置在此就不作介紹了。
最后給出了CAN 總線應用CPU 外部的硬件原理參考圖, 如圖4所示。
5 CAN 總線收發器TJA1050硬件連接圖
圖中CAN 收發器為NXP公司的TJA1050, TXD和RXD分別連接到CPU 的CAN接口, CANL和CANH 則為與另一個CPU 連接的總線, CANL 和CANH 之間電阻值約為120歐姆, 開關S可以作為CAN 總線的硬件啟用開關。另外, 如果在抗干擾要求高的場合, 可以對TXD 和RXD使用光電隔離。
圖4 CPU 外圍收發器的硬件原理圖。
6 結束語
基于at90can128的CAN 總線模塊設計的電梯系統調試器, 經過長時間的檢驗, 使用良好, 通信正常無誤。在眾多的現場總線當中, CAN 總線憑借其優秀的特性已經為越來越多的工程人員認同和偏愛, 而隨著越來越多的高端CPU 對CAN 控制器的集成和綜合成本的下降, CAN 總線的使用必定會越來越普遍, 其中集成CAN 控制器的8位AVR 也會受到越來越多人的青睞。
評論
查看更多