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