基于單片機(jī)與CPLD的無線控制系統(tǒng)
摘要:介紹一種基于單片機(jī)與CPLD結(jié)合的傳感器網(wǎng)絡(luò)節(jié)點的無線控制系統(tǒng)。節(jié)點中單片機(jī)對無線命令進(jìn)行譯碼,并對外圍子模塊進(jìn)行控制,CPLD擴(kuò)展控制系統(tǒng)的并行I/O端口、SPI串行接口等,從而根據(jù)系統(tǒng)需要可擴(kuò)展無線傳感網(wǎng)絡(luò)節(jié)點的外圍功能模塊。采用單片機(jī)與CPLD模塊化設(shè)計方法,降低了設(shè)計成本,方便電路的多次改進(jìn),為傳感器網(wǎng)絡(luò)節(jié)點在不同場合的應(yīng)用提供了一種通用的方法。
關(guān)鍵詞:單片機(jī)I/O端口擴(kuò)展;CPLD;控制節(jié)點;SPI串行接口擴(kuò)展
0 引 言
自單片機(jī)引入我國以來,相關(guān)產(chǎn)品的普及促使單片機(jī)的應(yīng)用設(shè)計日益廣泛。傳統(tǒng)的單片機(jī)控制系統(tǒng)由單片機(jī)以及外圍擴(kuò)展芯片組成,但是這些外,圍芯片一般具有接線重復(fù)性高、體積大等缺點??删幊踢壿嫼陠卧蜻壿媺K之間的相互連線在同一封裝內(nèi),受外界干擾影響小,電磁兼容(EMC)性能好。對設(shè)計者來說,CPLD器件最大的優(yōu)點在于可現(xiàn)場編程,改變邏輯關(guān)系時,無需更改外部線路板,只需用圖形語言程序或硬件描述語言程序來改變電路,生成下載編輯軟件,通過下載電纜輸入CPLD器件即可,非常方便,特別有利于新品試制,大大縮短了開發(fā)周期。使用CPLD和單片機(jī)結(jié)合構(gòu)成其外圍電路可以減少系統(tǒng)芯片數(shù)量,縮小系統(tǒng)體積,提高系統(tǒng)可靠性。
1 控制系統(tǒng)
該系統(tǒng)是一個無線傳感器網(wǎng)絡(luò)節(jié)點的控制系統(tǒng),它用于控制無線模塊接收主站發(fā)送過來的信息,單片機(jī)讀取這些數(shù)據(jù)并譯碼后,根據(jù)譯碼結(jié)果控制各功能子模塊,如無線模塊控制、溫度采集控制、電源管理控制、時間統(tǒng)一信號控制等功能,共需要28個輸出控制I/O口,13個輸入控制I/O口,擴(kuò)展I/O端口分配8個。各外圍模塊通過SPI串行標(biāo)準(zhǔn)接口的擴(kuò)展與單片機(jī)和CPLD進(jìn)行通信,并完成數(shù)據(jù)傳輸控制功能。各外圍模塊只需接受MCU的控制命令,即可獨立完成外圍模塊各自的功能:無線模塊的收發(fā)、數(shù)據(jù)采集A/D轉(zhuǎn)換、時間統(tǒng)一記錄、電源管理等。同時預(yù)留單片機(jī)通過USART的串口輸出,另外,還需要此系統(tǒng)具有很好的擴(kuò)展性,通過擴(kuò)展外圍模塊來增加節(jié)點不同的功能。系統(tǒng)設(shè)計要求如圖1所示。
根據(jù)設(shè)計要求,單片機(jī)系統(tǒng)要8 b的UART串行輸出以及SPI串行輸入輸出,同時為了完成各種控制功能,單片機(jī)必須至少擴(kuò)展7個I/O端口。如果使用傳統(tǒng)的擴(kuò)展方法,在輸出速率要求不高的情況下,并行接口通常使用8255傳統(tǒng)的微處理器接口芯片來擴(kuò)展。
但是,這些芯片都是40腳DIP封裝,體積龐大,并且每片最多只能擴(kuò)展3個8 b I/O端口,還要考慮8255中A,B,C口是作為輸入口還是輸出口。當(dāng)需要的控制端口較多時,不得不用多個這種專用芯片。這時需重復(fù)連接多片8255的8位數(shù)據(jù)線、單片機(jī)讀/寫信號線、ALE,CS(片選)和A0,A1信號線,增加了單片機(jī)硬件、軟件的設(shè)計難度,也就造成電路復(fù)雜、控制不便、可靠性降低,而且增大了電路的功耗、體積和重量。同時接口芯片提供的端口數(shù)未必與實際需要的端口數(shù)相等,不能根據(jù)實際情況分配I/O端口的數(shù)量,容易造成芯片部分資源的浪費。而CPLD具有豐富的可編程I/O引腳,并且由于其在系統(tǒng)可編程的特點,設(shè)計者能夠自己定義器件的內(nèi)部邏輯和管腳,擴(kuò)展電路也具有可編程設(shè)計的特點,方便電路的多次改進(jìn),降低了設(shè)計成本。
2 單片機(jī)與CPLD
AVR單片機(jī),采用精簡指令集CPU(RISC),具有高性能,處理速度快(1 MIPS/MHz),成本低,包括FLASH程序存儲器、看門狗、E2PROM、同/異步串口、SPI、ADC、定時器/計數(shù)器,眾多的中斷系統(tǒng),集成多種功能,具有低功耗抗干擾的休眠模式。
復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)是一種半定制的專用集成電路(Application Specific Integrated Circuit,ASIC)。其芯片上按一定排列方式集成了大量的門和觸發(fā)器等基本邏輯元件。通過軟件編程可以實現(xiàn)這些元件的連接,從而使之完成某個邏輯電路或系統(tǒng)的功能,成為一個可在實際電子系統(tǒng)中使用的ASIC。
目前,最大的兩家CPLD/FPGA生產(chǎn)廠商分別是ALTERA以及Xilinx。該系統(tǒng)使用的Xilinx的XC2C256屬于XiIinx公司的Coolrunner2系列,包含256個宏單元,最大用戶I/O管腳有100個。
3 系統(tǒng)硬件連接組成以及工作過程
使用CPLD代替單片機(jī)的外圍接口芯片,與AVR單片機(jī)構(gòu)成的控制系統(tǒng)相連如圖2所示。系統(tǒng)的主要部分僅需要2片集成電路,AVR單片機(jī)系列AT—megal62和XC2C256。單片機(jī)與CPLD之間的接口是通過單片機(jī)的地址/數(shù)據(jù)復(fù)用總線(PORTA端口)以及讀寫控制I/O口(WR,RD,ALE)與CPLD的I/O口相連來進(jìn)行數(shù)據(jù)、狀態(tài)的傳輸。
在單片機(jī)中對擴(kuò)展的I/O端口進(jìn)行統(tǒng)一編址,通過C語言可以方便地訪問I/O端口,單片機(jī)要往數(shù)據(jù)端口或控制端口輸出信息,必須先把地址送到地址總線上,將確定的控制信息送到控制總線上,再把數(shù)據(jù)信息送到數(shù)據(jù)總線上。經(jīng)過CPLD的內(nèi)部邏輯進(jìn)行地址、數(shù)據(jù)鎖存,并譯碼以獲得擴(kuò)展的端口號,從而獲得對各個外部功能子模塊的控制信號,端口號COM1,COM2,COM3。COM4,COM5,COM6,COM7分別是無線模塊控制、時間統(tǒng)一控制、數(shù)據(jù)采集控制、電源管理控制、片選選擇控制、狀態(tài)選擇以及可擴(kuò)展模塊控制等的控制端口,而且通過控制片選端口號(COM5端口),可以對各個功能子模塊進(jìn)行SPI串行數(shù)據(jù)的傳輸,從而達(dá)到對SPI串行標(biāo)準(zhǔn)接口的擴(kuò)展。
通過選擇不同的I/O端口可以控制讀取、寫入各外圍處理模塊的數(shù)據(jù)。要讀取某一外圍處理模塊的數(shù)據(jù),必須先讀取狀態(tài)選擇端口COM6的狀態(tài)信息,狀態(tài)選擇RDY(數(shù)據(jù)準(zhǔn)備好)就緒時,通過向此處理模塊控制端口COM寫入控制信息來控制子模塊的工作模式,再通過寫片選端口COM5來選擇子模塊,從而啟動SPI實現(xiàn)讀取子模塊的數(shù)據(jù)。與此對應(yīng),寫入數(shù)據(jù)也需要讀取狀態(tài)信息,再控制某一子模塊的工作模式,選擇片選信號,啟動SPI寫,就可以實現(xiàn)寫入數(shù)據(jù)的功能。
4 CPLD軟件設(shè)計
采用Xilinx公司的CPLD開發(fā)軟件Xilinx ISE完成系統(tǒng)的軟件設(shè)計,Xilinx ISE支持原理圖輸入、HDL語言輸入、狀態(tài)圖輸入和混合輸入等輸入方法。其中HDL語言中的VHDL硬件描述語言,與具體的工藝技術(shù)和器件無關(guān),易于共享和復(fù)用,具有多層次描述系統(tǒng)硬件功能的能力。
在設(shè)計中,CPLD需要實現(xiàn)的功能為地址譯碼端口以及控制不同端口的電路設(shè)計,用VHDL語言對進(jìn)行編程編譯,然后采用元件例化的方法得到電路結(jié)構(gòu)如圖3所示。
CPLD中所設(shè)計的程序片斷:
地址譯碼端口以及不同端口實現(xiàn)的功能仿真結(jié)果如圖4所示??梢钥闯觯抡娼Y(jié)果符合設(shè)計要求。
5 單片機(jī)軟件設(shè)計
AVR單片機(jī)固化程序采用ICC語言編寫,并使用模塊化的設(shè)計方法,分為初始化程序、預(yù)定義子程序、主程序、無線收發(fā)控制程序、各功能模塊控制程序、讀功能子模塊的子程序、配置功能子模塊程序、超時程序等。模塊化設(shè)計使軟件更加靈活,便于調(diào)用和移植,并且在錯誤發(fā)生的時候,可以很快找到錯誤,極大地提高了系統(tǒng)的可靠性和穩(wěn)定性。
單片機(jī)中要對擴(kuò)展的不同I/O端口分配相對應(yīng)的不同的內(nèi)存地址。例如:要對擴(kuò)展的電源管理I/O端口分配單片機(jī)所映射的內(nèi)存地址為Ox2000??梢詫懗桑?deftne POWER ADDR (*(unsigned char*)0x2000)。
單片機(jī)主要完成系統(tǒng)的控制功能,在實現(xiàn)輸出控制接口時需要與CPLD配合,提供CPLD需要的數(shù)據(jù)和地址及控制線。當(dāng)需要某一組輸出工作時,在單片機(jī)中用C語言對宏變量對應(yīng)的地址進(jìn)行賦值,“WR”或“RD”同時就被拉低,CPLD通過這組信號判斷選擇并且使能某一組輸出工作,并將輸出控制代碼從單片機(jī)經(jīng)過CPLD的相應(yīng)端口輸出,完成控制功能。例如對電源管理單片機(jī)中定義的I/O端口對應(yīng)的內(nèi)存地址為:#define POWER_ADDR(*(unsigned char*)Ox2000),當(dāng)用C語言寫下POWER_ADDR=Oxl2時,就會在CPLD的8個I/O口輸出相應(yīng)的控制信息“00010010”,從而對各功能模塊進(jìn)行供電或斷電。
6 結(jié) 語
采用CPLD作為單片機(jī)I/O端口的擴(kuò)展芯片,大大減少了單片機(jī)外圍所用芯片的種類和數(shù)量,縮小了體積,降低了功耗,提高了系統(tǒng)的可靠性和整體性。使用單片機(jī)和CPLD結(jié)合可以有效地實現(xiàn)過去需要利用單片機(jī)和大量外圍接口芯片才能完成的功能,而且還可以根據(jù)需要不斷地擴(kuò)展外圍電路,只需要修改CPLD的程序就可以實現(xiàn)用戶的需求。CPLD器件與單片機(jī)結(jié)合,可以優(yōu)勢互補(bǔ),組成靈活的、硬軟件都可現(xiàn)場編程的控制器,縮短開發(fā)周期,適應(yīng)市場需要。