久久精品国产99国产精2020丨,亚洲成αv人片在线观看,www.黄色av免费,亚洲黄色在线,福利无码视频世界,欧美色综合一区二区三区,2017夜夜爱毛片

基于AVR單片機(jī)的控制系統(tǒng)設(shè)計

來源:網(wǎng)絡(luò)

點(diǎn)擊:947

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: AVR,單片機(jī),控制系統(tǒng),設(shè)計

      引言

      現(xiàn)在許多的系統(tǒng)都采用了多通道Input/Output的設(shè)計,控制系統(tǒng)的設(shè)計也日趨復(fù)雜、龐大,所以有必要將控制電路單獨(dú)分離出來。過去許多系統(tǒng)均采用C51系列單片機(jī)作為控制電路,但其功能有限,電路設(shè)計較為復(fù)雜、影響了系統(tǒng)的穩(wěn)定性,也不易擴(kuò)展。本文介紹的AVR單片機(jī)由美國ATMEL公司生產(chǎn),采用RISC指令集,內(nèi)置RAM及可以擦寫數(shù)千次的FLASH,采用哈佛結(jié)構(gòu),速度較快。ATmega128為此系列中功能最強(qiáng)大的一款,用于設(shè)計控制系統(tǒng)能適應(yīng)現(xiàn)時復(fù)雜系統(tǒng)的要求。

      AVR單片機(jī)介紹

      ATMEL公司是世界上著名的高性能低功耗非易失性存儲器和數(shù)字集成電路的一流半導(dǎo)體制造公司。AVR單片機(jī)由ATMEL公司開發(fā),是過去12年里第一個新發(fā)布的8位RISCMCU,執(zhí)行大多數(shù)指令只需一個時鐘周期速度快(8MHzAVR≈200MHzC51)。其32個通用寄存器直接與ALU相連,消除了運(yùn)算瓶頸;同時由于C編譯專家的參與,C代碼效率極高;用戶在享受C語言帶來的極大便利的同時無需擔(dān)心消耗更多的資源。芯片內(nèi)嵌可串行下載或自我編程的FLASH和E2PROM.具有以下功能:電壓檢測BOD復(fù)位源寄存器看門狗、PWM、10位A/D、模擬比較器、UART、I2C、SPI、實(shí)時時鐘等。具有Idle/Power-Save和Power-Down等低功耗運(yùn)行模式,可電平中斷喚醒PowerDown.同時具有完整產(chǎn)品線,F(xiàn)LASH從1KB到128KB,E2PROM從64B到4KB,SRAM從128B到4KB,引腳數(shù)從8到64.

      其中Atmeg128為AVR系列中的代表性產(chǎn)品之一。相比其它產(chǎn)品,該芯片有以下特性:

      (1)先進(jìn)的RISC結(jié)構(gòu):133條功能強(qiáng)大的指令,大部分在單時鐘周期內(nèi)完成,32×8個通用工作寄存器+外設(shè)控制寄存器,最高可工作在16MHz下,性能可達(dá)16MIPS;片內(nèi)帶有執(zhí)行時間為2個時鐘周期的硬件乘法器。

      (2)程序和數(shù)據(jù)存儲區(qū):128kB在線可編程Flash存儲器,可反復(fù)擦寫1000次;可通過獨(dú)立的加密位選擇引導(dǎo)程序代碼段,可通過片內(nèi)引導(dǎo)程序?qū)崿F(xiàn)在線系統(tǒng)編程,寫操作時真正可讀;4kB的EEPROM存儲區(qū),可反復(fù)擦寫100,000次。4kB的片內(nèi)SRAM存儲區(qū),可外部擴(kuò)展為64kB.

      系統(tǒng)硬件設(shè)計框架

      硬件系統(tǒng)主要由CPU(AVR單片機(jī))、人機(jī)操作和顯示接口(液晶顯示、鍵盤、指示燈和蜂鳴器)、通信接口組成。系統(tǒng)框圖如圖1所示

    基于AVR單片機(jī)的控制系統(tǒng)設(shè)計

    圖1系統(tǒng)硬件設(shè)計框圖

      CPU為核心處理器件,通過I/O接口方式或A/D總線方式與液晶、顯示鍵盤、指示燈和蜂鳴器交互,作者實(shí)現(xiàn)了兩個版本,分別采用I/O方式和A/D總線方式。通信接口主要用到了UART接口和擴(kuò)展的網(wǎng)絡(luò)接口。其中UART提供了RS-232和RS-485接口,RS-232提供全雙工單對單通信同時,而RS-485以主/從方式與系統(tǒng)的多個部分通信,可用于多通道的輸入輸出設(shè)備。該芯片本身并不帶網(wǎng)絡(luò)接口,通過擴(kuò)展一個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)軟件體系分為幾個部分:

      (1)系統(tǒng)的循環(huán)檢測部分,用于檢測各通道的系統(tǒng)設(shè)備工作是否正常,出現(xiàn)異常時則通過三色指示燈報警(綠色代表正常,紅色代表異常,黃色為中間狀態(tài))。

      (2)系統(tǒng)的設(shè)置部分,接受用戶按鍵,用戶可以在GUI上設(shè)置希望設(shè)置的參數(shù)。

      (3)網(wǎng)絡(luò)接口部分,此時單片機(jī)系統(tǒng)不參與設(shè)置,主要功能將網(wǎng)絡(luò)部分獲得的數(shù)據(jù)導(dǎo)至各通道。軟件系統(tǒng)的核心部分在于菜單結(jié)構(gòu)的設(shè)計。

      本系統(tǒng)采用一種基于節(jié)點(diǎn)編號的三叉樹狀菜單的設(shè)計。將整個菜單看作一個菜單樹,每個界面對應(yīng)于樹中的一個節(jié)點(diǎn),父節(jié)點(diǎn)為當(dāng)前菜單的上一級菜單;右節(jié)點(diǎn)為當(dāng)前菜單的"兄弟"菜單,亦即上級菜單的其余子菜單。

      我們采用對節(jié)點(diǎn)編號的方式將整個菜單樹串起來,通過識別節(jié)點(diǎn)編號(ID)就能知道該節(jié)點(diǎn)處于哪一級菜單,同時也便于我們將菜單數(shù)初始化。編號方式:每級子菜單的編號為上級父菜單ID乘以10再加上該級子菜單在上級菜單中對應(yīng)的子項(xiàng)號(1,2,3.),我們將根節(jié)點(diǎn)ID編號為1,則根節(jié)點(diǎn)菜單的子菜單對應(yīng)的ID分別為11,12,13.ID為11的節(jié)點(diǎn)的下級菜單ID為:111,112,113.一個樹型結(jié)構(gòu)菜單的結(jié)構(gòu)和ID編號的實(shí)例如圖2所示。

      Typedef structmenu{ long ID; / /當(dāng)前菜單ID void ( * disp laymenu) ( long i, unsigned char j) ; / /當(dāng)前菜單對應(yīng)處理函數(shù)char cur; / /當(dāng)前菜單子項(xiàng)char total; / /子菜單總數(shù)structmenu * up, * down, * right; / /毗鄰子菜單}MENU;

    基于AVR單片機(jī)的控制系統(tǒng)設(shè)計

    圖2一個菜單樹的實(shí)例

      對于用戶按鍵操作切換不同的菜單時,我們只需修改一個指向?qū)?yīng)菜單節(jié)點(diǎn)的全局菜單節(jié)點(diǎn)指針即可。當(dāng)用戶按下"ESC"鍵時,菜單指針指向當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),按下"Enter"鍵時,則指針指向?qū)?yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)。

      用于AVR單片機(jī)的RAM空間較小,只有4KB,我們需設(shè)計一種合理而簡潔的數(shù)據(jù)結(jié)構(gòu),我們將菜單的數(shù)據(jù)結(jié)構(gòu)定義為(C語言實(shí)現(xiàn))。

    基于AVR單片機(jī)的控制系統(tǒng)設(shè)計

    圖3 menuselect函數(shù)的流程圖

      將菜單分為顯示型菜單和功能性菜單,顯示型菜單項(xiàng)用于切換各級菜單,功能型菜單則執(zhí)行最底層菜單所對應(yīng)的操作,total變量為0則表示為功能型菜單,大于0則表示選擇型菜單。通過菜單的ID,即可以知道當(dāng)前菜單的顯示位置和內(nèi)容,將此信息放在對應(yīng)的displaymenu函數(shù)中可以節(jié)省數(shù)據(jù)空間,不用對于功能型菜單建立額外的ID與處理函數(shù)間的對應(yīng)關(guān)系表,從而實(shí)現(xiàn)功能型菜單和顯示型菜單的一致性操作。一個供參考的執(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ù)用于切換對應(yīng)的菜單子項(xiàng),按鍵為"UP"鍵和"DOWN"鍵時,只需修改g_pmune->cur即可;按下"ENTER"鍵時,則g_pmenu=g_pmenu->down,再根據(jù)cur值,g_pmenu=g_pmenu->right;按下"ESC"鍵,則g_pmenu=g_pmenu->up.

      這種設(shè)計使得代碼數(shù)據(jù)量變得較小,同時增強(qiáng)了程序的擴(kuò)展性,需要增加或修改菜單項(xiàng)時,不論是功能型菜單還是執(zhí)行性菜單,只需要修改對應(yīng)的菜單結(jié)構(gòu)的數(shù)組即可,而不必修改對應(yīng)的執(zhí)行代碼。經(jīng)過這樣的簡化后,發(fā)現(xiàn)對于菜單數(shù)較多的多通道輸入/輸出系統(tǒng),系統(tǒng)RAM區(qū)還是不夠用。對于一個8輸入通道的系統(tǒng),每個通道的參數(shù)設(shè)置項(xiàng)可能多達(dá)40項(xiàng),總菜單節(jié)點(diǎn)大于300個,每個節(jié)點(diǎn)占用14B,則整個菜單節(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)(虛線框所示),其上級菜單(ID為11和ID為12)的項(xiàng)目中的total值均變?yōu)?.為了區(qū)別不同的通道分支,有兩種實(shí)現(xiàn)辦法:

      一種處理方法采用全局變量

      增加一個g_CODER_Channel_Number的全局變量,用于保存當(dāng)前的通道號。在menuselect函數(shù)中,增加一個針對本系統(tǒng)設(shè)計的一個判斷,當(dāng)ID為11時,則不修改對應(yīng)的g_pmenu->cur,而是直接修改變量g_CODER_Channel_Number,進(jìn)入對應(yīng)的顯示函數(shù)后,直接根據(jù)g_CODER_Channel_Number判斷通道號,從而輸出對應(yīng)的值。這種方法不需要改變系統(tǒng)設(shè)計的結(jié)構(gòu),但需要針對不同的系統(tǒng)修改主處理函數(shù)menuselect.

      另一種處理方法在菜單結(jié)構(gòu)中增加一個MenuSibling結(jié)構(gòu),定義為

      typedef struct _menuSibling{

      signedcharcur;signedchartotal;}SIBLING;同時對應(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時,可知其下一級菜單為SIB2LING菜單,此時以前需修改cur想的操作則修改Sibling.cur即可。這種設(shè)計下,每個節(jié)點(diǎn)增加了2B的空間,但是保證的程序的一致性,對于不同的系統(tǒng)其設(shè)計基本一致。

      以上菜單項(xiàng)的設(shè)計用于系統(tǒng)設(shè)置部分,當(dāng)退出系統(tǒng)設(shè)置時,即進(jìn)入系統(tǒng)循環(huán)檢測部分。單片機(jī)通過RS-485接口檢測各個通道是否正常,當(dāng)正常時則顯示為綠燈,出現(xiàn)異常則顯示為紅燈,黃燈為中間狀態(tài)。指示燈的流程參見圖4。

    基于AVR單片機(jī)的控制系統(tǒng)設(shè)計

    圖4循環(huán)檢測的指示燈流程

      結(jié)束語

      按照本文提供的方法優(yōu)化后的設(shè)計,可以滿足大多數(shù)的多通道輸入/輸出系統(tǒng)的控制系統(tǒng)的需要,整個系統(tǒng)的設(shè)計主要在于建立一個菜單樹,將對應(yīng)的節(jié)點(diǎn)編號,再編寫對應(yīng)的節(jié)點(diǎn)處理函數(shù)即可。這種設(shè)計使得程序的開發(fā)、維護(hù)都很容易,具有較強(qiáng)的可擴(kuò)展性和可移植性。

     

    (審核編輯: 智匯張瑜)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請聯(lián)系我們刪除。