如何利用PSoC設(shè)計(jì)紅外線通信測(cè)控系統(tǒng)
摘 要: 在分析研究紅外線發(fā)射器和接收器原理的基礎(chǔ)上,以可編程片上系統(tǒng)PSoC芯片為核心部件,利用PSoC集成開(kāi)發(fā)環(huán)境Creator內(nèi)嵌的固件元件,進(jìn)行了紅外線通信測(cè)控系統(tǒng)的軟件和硬件設(shè)計(jì)。PSoC是一款以ARM和CPLD兩大功能部件組成的混合處理器。在Creator環(huán)境下,固件元件類(lèi)似于面向?qū)ο蟪绦蛟O(shè)計(jì)的控件,使硬件設(shè)計(jì)軟件化,與硬件相關(guān)的源程序編譯器自動(dòng)生成。采用PSoC設(shè)計(jì)的紅外線發(fā)送與接收電路具有硬件設(shè)計(jì)簡(jiǎn)單、軟件設(shè)計(jì)圖形化、可以充分利用PSoC提供的固件元件的優(yōu)點(diǎn)。PSoC非常適合在通信和測(cè)控中應(yīng)用。
關(guān)鍵詞: Creator;PSoC;紅外線通信;元件;固件
紅外線通信由于結(jié)構(gòu)簡(jiǎn)單、成本低,在家用電器、儀器儀表、工業(yè)控制中得到了廣泛的應(yīng)用。實(shí)現(xiàn)紅外線通信的方案很多,但主要是由專(zhuān)有集成電路和單片機(jī)實(shí)現(xiàn)兩種。由專(zhuān)用集成電路實(shí)現(xiàn)的紅外線通信主要是各種遙控器,但是它難以和單片機(jī)接口,應(yīng)用的靈活性差。單片機(jī)實(shí)現(xiàn)的紅外線發(fā)射器與接收器能方便地與其他電路模塊連接組成應(yīng)用系統(tǒng),在各種測(cè)量和控制系統(tǒng)中有大量應(yīng)用。本文介紹一種由特殊的單片機(jī),即可編程片上系統(tǒng)PSoC組成的紅外線通信測(cè)控系統(tǒng)的應(yīng)用實(shí)例。PSoC5是由Cypress公司生產(chǎn)的ARM Cortex-M3和CPLD兩大部分組成的芯片。它以固件元件的模式提供了許多模擬和數(shù)字功能單元,在集成開(kāi)發(fā)環(huán)境Creator的支持下,這些功能單元和元件在畫(huà)板上放置、連接、引腳定義并進(jìn)行屬性配置形成設(shè)計(jì)原理圖,這個(gè)原理圖的功能由CPLD實(shí)現(xiàn)并與ARM微處理器連接。Creator的編譯器將各個(gè)元件生成其對(duì)應(yīng)的C語(yǔ)言文件,開(kāi)發(fā)者只需在C語(yǔ)言框架程序中修改或編寫(xiě)中斷、DMA和main程序即可完成軟件設(shè)計(jì)。這種圖形化編程方法不需要開(kāi)發(fā)者了解PSoC芯片的底層硬件結(jié)構(gòu),編寫(xiě)的代碼非常少,降低了開(kāi)發(fā)的技術(shù)難度[1]。本設(shè)計(jì)所采用的PSoC實(shí)施方案對(duì)其他嵌入式設(shè)計(jì)也具有一定的指導(dǎo)作用。
1 紅外線通信測(cè)控系統(tǒng)構(gòu)成
紅外線通信測(cè)控系統(tǒng)的結(jié)構(gòu)如圖1所示。發(fā)送電路的電阻R1為510 ?贅,R2為10 ?贅,晶體管T1為9013。主機(jī)可以是任何帶有串行接口的計(jì)算機(jī)或嵌入式裝置,通過(guò)串行接口將數(shù)據(jù)傳送到PSoC或接收PSoC的數(shù)據(jù)。在發(fā)送端,PSoC將直接連接模擬量和數(shù)字量,串口接收的數(shù)據(jù)通過(guò)紅外線發(fā)射電路發(fā)送出去。在接收端,一體化接收頭輸出的信號(hào)送到PSoC,PSoC接收到一幀完整的信息后,處理后通過(guò)串行接口送到主機(jī),也可以直接輸出模擬量和數(shù)字量,并在LCD顯示出來(lái)[2]。
2 紅外線通信測(cè)控系統(tǒng)固件元件原理圖設(shè)計(jì)
紅外線通信測(cè)控系統(tǒng)發(fā)送和接收端電路都使用了多個(gè)固件元件,受篇幅限制,結(jié)合發(fā)射和接收電路的原理敘述,只對(duì)與發(fā)射和接收密切相關(guān)的幾個(gè)元件做詳細(xì)介紹,了解和掌握PSoC元件的屬性設(shè)計(jì)及使用方法。
2.1 紅外線通信測(cè)控系統(tǒng)發(fā)射電路
紅外線通信測(cè)控系統(tǒng)的發(fā)送端固件元件原理圖如圖2所示。外部的傳感模擬信號(hào)由引腳Pin_4輸入,經(jīng)程控增益放大器PGA放大后,送入模數(shù)轉(zhuǎn)換器ADC轉(zhuǎn)換成數(shù)字量,轉(zhuǎn)換結(jié)束產(chǎn)生isr_2中斷,在中斷子程序中將結(jié)果讀入ARM處理器。外部連接的開(kāi)關(guān)量通過(guò)引腳Pin_2和 Pin_3接入狀態(tài)寄存器Status_Reg,外部主機(jī)的控制數(shù)據(jù)經(jīng)串行接口UART被ARM處理器接收。將上述數(shù)據(jù)組裝成發(fā)送的4 B 32 bit幀信息,第1字節(jié)高4位是設(shè)備碼,低4位是命令碼,第2字節(jié)是發(fā)送的開(kāi)關(guān)量,第3和4字節(jié)是16 bit模擬量。紅外線通信測(cè)控系統(tǒng)發(fā)送端涉及的元件有多個(gè),篇幅所限,只介紹與通信相關(guān)的幾個(gè)元件。
首先介紹脈沖寬度調(diào)制元件PWM[3],要使用的元件必須進(jìn)行屬性配置,PWM的輸入時(shí)鐘由時(shí)鐘元件Clock_1提供,頻率設(shè)置為1 MHz。PWM的屬性配置如圖3所示。由通用數(shù)字塊UDB實(shí)現(xiàn)PWM元件,分辨率為16 bit,因?yàn)榧t外線通信傳送的是頻率為38 kHz的調(diào)制脈沖波,所以PWM的周期為26 μs,為了使輸出波形占空比為1:1,PWM的比較值設(shè)置為13 μs,比較類(lèi)型設(shè)置為L(zhǎng)ess。當(dāng)然,在實(shí)際使用中可以將占空比調(diào)整為1:3、1:4等以達(dá)到增加發(fā)射距離和省電的目的。這樣,PWM元件啟動(dòng)后,就能在PWM端輸出連續(xù)的方波。定時(shí)器Timer的屬性配置如圖4所示,模塊由PSoC內(nèi)部的UDB實(shí)現(xiàn),分辨率為24 bit,因?yàn)榧t外線通信的數(shù)據(jù)0由560 μs高電平和560 μs低電平組成,數(shù)據(jù)1由560 μs高電平和1 680 μs低電平組成,所以設(shè)置定時(shí)器周期為560 μs,并且在定時(shí)器終端計(jì)數(shù)TC時(shí)產(chǎn)生中斷。
進(jìn)行紅外線通信的數(shù)據(jù)發(fā)送,首先發(fā)送啟動(dòng)碼,啟動(dòng)碼由9 ms的高電平和4.5 ms的低電平組成,接著發(fā)送由0或1組成的32 bit數(shù)據(jù)碼。PWM和Timer啟動(dòng)后,當(dāng)有數(shù)據(jù)傳輸時(shí),將Control_Reg_2和Control_Reg_1寄存器置1,Pin_1端輸出38 kHz方波。當(dāng)Timer產(chǎn)生16次isr_1中斷(9 ms時(shí)間到),將Control_
Reg_1置0,Pin_1端無(wú)脈沖輸出,當(dāng)Timer產(chǎn)生8次isr_1中斷(4.5 ms時(shí)間到),啟動(dòng)碼發(fā)送完畢。接著發(fā)送32 bit數(shù)據(jù),先發(fā)送560μs的高電平,將Control_Reg_1置1,Pin_1端輸出38 kHz方波。當(dāng)Timer產(chǎn)生1次isr_1中斷(560 μs時(shí)間到),將Control_Reg_1置0,Pin_1端無(wú)脈沖輸出,直到Timer產(chǎn)生1次(如果數(shù)據(jù)是0)或3次(如果數(shù)據(jù)是1)isr_1中斷,直至將32 bit數(shù)據(jù)發(fā)送完畢[4-5]。
2.2 紅外線通信測(cè)控系統(tǒng)接收電路
紅外線通信測(cè)控系統(tǒng)的接收端固件元件原理圖如圖5所示。將寄存器Control_Reg_1置1,紅外線接收頭輸出的信號(hào)通過(guò)Pin_1引腳接到定時(shí)器Timer的捕獲端capture,在Timer的屬性配置中,下降沿捕獲,捕獲產(chǎn)生中斷,設(shè)置分辨率為32 bit,周期為4 294.967 s。當(dāng)捕獲發(fā)生后,將前次與本次捕獲值相減,如果接近13.5 ms,就找到了本次數(shù)據(jù)傳輸?shù)膯?dòng)碼,繼而接收32 bit數(shù)據(jù)碼。如果兩次捕獲值的差接近1.12 ms,接收的這位是0,如果兩次捕獲值的差接近2.24 ms,接收的這位就是1。接收到32 bit數(shù)據(jù)在LCD顯示出來(lái),根據(jù)第1字節(jié)低4位功能碼,確定是進(jìn)行本地控制還是經(jīng)過(guò)串行接口UART傳輸給上位機(jī)。如果是本地控制,則將接收的第2字節(jié)輸出到控制寄存器Control_Reg_2,第3字節(jié)輸出到數(shù)模轉(zhuǎn)換器VDAC8_1[6]。