前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇pic單片機范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
引言
目前,在市場上應用最廣泛的應該屬于8位單片機,Microchip Technoloogy公司推出的8位pic系列單片機,目前在國內(nèi)市場上深受用戶歡迎,已經(jīng)逐漸成為單片機應用的新潮流;但遺憾的是,目前國內(nèi)介紹它的C語言開發(fā)工具的書籍和文章卻比較少,而且用的人也不多,廣大的程序員在用其開發(fā)的過程中都在慢慢摸索,可能會走一些彎路。筆者最近在用PIC的C語言時就遇到了好些問題,在這里想和最近一段時間用PIC的C語言的一些經(jīng)驗和廣大的底層軟件程序員做一下交流和介紹希望本文對用PICC開發(fā)PIC系列單片機的人有所幫助。
目前,在國內(nèi)用得比較多的是Hi-Tech的Hi-Tech PICC編譯器,而且目前市場上一些國內(nèi)的PIC單片機仿真器也開始支持Hi-Tech PICC編譯格式;因此,本文主要以Hi-Tech的PICC為基礎(chǔ),介紹一下PIC的C語言的基本特點。
1 Hi-Tech PICC的C語言開發(fā)工具的語言特點
PICC的C語言按ANSI C來定義,并進行了C語言的擴展。PICC和ANSI C有一個根本的區(qū)別就是,PICC不支持函數(shù)的遞歸調(diào)用。這是因為PIC單片機的堆棧大小是由硬件決定的,資源有限,所以不支持遞歸調(diào)用。它的數(shù)據(jù)也遵從標準C的數(shù)據(jù)結(jié)構(gòu),PICC的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型的形式出現(xiàn)的。PICC編譯器支持的數(shù)據(jù)類型有位類型(bit)、無符號字符(unsigned char)、有符號字符(signed char)、無符號整型(unsigned int)、有符號整形(signed int)、無符號長整型(unsigned long)、有符號長整型(signed long)、浮點(float)和指針類型等。需要注意的是,PICC支持的多字節(jié)數(shù)據(jù)都采用低字節(jié)在前,高字節(jié)在后的原則。即一個多字節(jié)數(shù),比如int型,在內(nèi)存單元中存儲順序為低位字節(jié)存儲在地址低的存儲單元。高位字節(jié)存儲在地址高的存儲單元中,程序員在用union定義變量時一定要注意這一特點。
PIC的C語言變量分為局部變量和全局變量,所有變量在使用前必須先定義后使用。全局變量是在任何函數(shù)之外說明的、可被任意模塊使用的、在整個程序執(zhí)行期間都保持有效的變量。局部變量在函數(shù)內(nèi)部說明。局部變量有兩種:自動變量和靜態(tài)變量。缺省類型為自動變量,除非明確將其聲明為靜態(tài)變量。而且,所有的自動變量都被分配在寄存器頁0,所以bank限定詞不能用于自動變量,便可以用于靜態(tài)的局部變量。當程序退出時,自動變量占用的空間釋放,自動變量也就失去意義。靜態(tài)變量是一種局部變量,只在聲明它的函數(shù)內(nèi)部有效;但它占用固定的存儲單元,而這個存儲單元不會被別的函數(shù)使用,因此其它函數(shù)可以通過指針訪問或修改靜態(tài)變量的值。靜態(tài)變量在程序開始只初始化一次,因此若只在某函數(shù)內(nèi)部使用一變量,而又希望其值在2次函數(shù)調(diào)用期間保持不變,為實現(xiàn)程序模塊化,則可將其聲明為靜態(tài)變量。例如以下聲明中,有些為合法,有些為非法:
void max(void)
unsigned char var1; //合法聲明
unsigned char bank1 var2; //非法聲明
static unsigned char bank1 ver3; //合法聲明
unsigned char var4=0x02; //合法聲明,每次調(diào)用都初始化
static unsigned char bank1 var5=0x02; //合法聲明,但只初始化一次
…………
}
PICC編譯器對局部變量及傳遞參數(shù)使用RAM覆蓋技術(shù)。編譯時,連接器會自動把一些不可能被同時調(diào)用的函數(shù)的自動變量區(qū)重疊在一起,以達到內(nèi)存的高效利用,因此其內(nèi)部RAM的利用效率非常高。
2 函數(shù)調(diào)用時參數(shù)的傳遞
PICC函數(shù)參數(shù)的傳遞是根據(jù)被傳參數(shù)的長度,用W、被調(diào)函數(shù)的自動變量區(qū)域或被調(diào)函數(shù)的參數(shù)區(qū)域傳遞,傳遞代碼比較高效。傳遞給函數(shù)的參數(shù)可以通過一個由問號“?”、下劃線“_”及函數(shù)名加一個偏移量構(gòu)成的標號獲取。下面為一調(diào)用求和子程序的源泉代碼:
Unsigned char add_function(unsigned char augend,unsigned char addend);
Void main(void)
{
unsigned char temp1,temp2,temp3;
tem3=add_function(temp1,temp2);
}
unsigned char add_function(unsigned char augend,unsigned char addend)
{
return(augend + addend);
}
編譯后生成的匯編程序為:
_main
; _temp2 assigned to?a_main+0
;_temp3 assigned to ?a_main+1
; _temp1 assigned to ?a_main+2
bcf status,5
bcf status,6
movf (((?a_main+0))),w
movwf(((?_add_function)))
movf (((?a_main+2))),w
fcall (_add_function)
movwf(((?a_main+1)))
_add_function
; _augend assigned to ?a_add_function+0
; _augend stored from w
bcf status,5
bcf status,6
movwf(((?a_add_function+0)))
movf (((?a_add_function+0))),w
addwf (((?_add_function+0))),w
return
3 PICC語言和匯編語言的混合編程
一般情況下,主程序都是用C語言編寫的。C語言與匯編語言最大的區(qū)別在于,匯編程序執(zhí)行效率較高,因為,C語言首先要用C編譯器生成匯編代碼,在不少情況下,C編譯器生成的匯編代碼不如用手工生成的匯編代碼效率高。在PICC中,可以用兩種方法在C程序中調(diào)用匯編程序。一種方法是使用#asm,#endasm及asm()在C語言中直接嵌入?yún)R編代碼,#asm和#endasm指令分別用于標示嵌入?yún)R編程序塊的開頭和結(jié)屬;asm()用于將單條匯編指令嵌入到編譯器生成的代碼中,如下所示:
void func1(void){
asm("NOP");
#asm
nop
rlf_var,f
#endasm
asm("rlf_var,f");
}
需要注意的是,嵌入?yún)R編不是完整意義上的匯編,是一種偽匯編指令,使用時必須注意它們與編譯器生成代碼之間的互相影響。
另一種方法是將匯編作為一個獨立的模塊,用匯編編譯器(ASPIC)生成目標文件,然后用鏈接器和C語言生成的其它模塊的目標文件鏈接在一起。如果變量要公用時,則在另一個模塊中說明為外部類型,并允許使用形式參數(shù)和返回值。
例如,如果在C模塊中使用匯編模塊中的函數(shù),那么在C中可知下聲明:
extern char rotate_left(char);
本聲明說明了要調(diào)用的這個外部函數(shù)有一個char型形式參數(shù),并返回一個char型的值。而rotate_left()函數(shù)的真正函數(shù)體在外部可以被ASPIC編譯的匯編模塊(文件名后綴.as)中,具體代碼可以如下編寫:
processor16C84
PSECT text0,class=CODE,local,delta=2
GLOBAL _rotate_left
SIGNAT _rotate_4201
_rotate_left
movwf?a_rotate_left
rlf?a_rotate_left,w
return
FNSIZE _rotate_left,1,0
GLOBAL?a_rotate_left
END
需要注意的是,以C模塊中聲明的函數(shù)名稱,在匯編模塊中是以下劃線開頭的。GLOBAL定義了一個全局變量,也等同于C模塊中的extern,SIGNAL強制鏈接器在鏈接各個目標文件模塊時進行類型匹配檢查,F(xiàn)NSIZE定義局部變量和形式參數(shù)的內(nèi)存分配。
這種方法比較麻煩,如果對某一模塊的執(zhí)行效率要求較高時,可以采取這種辦法;但是,為了保證匯編程序能正常運行,必須嚴格遵守函數(shù)參數(shù)傳遞和返回規(guī)則。當然,為避免這些規(guī)則帶來的麻煩,一般情況下,可以先用C語言大致編寫一個類似功能的函數(shù),預先定義好各種變量,采用PICC-S選項對程序進行編譯,然后手工優(yōu)化編譯器產(chǎn)生的匯編代碼后將其作為獨立的模塊就可以了。
4 注意事項
使用PICC時,為了更有效地利用資源,應注意以下幾點:
①盡量使用無符號數(shù)和字節(jié)變量。
②在寄存器資源允許的情況下,對某些執(zhí)行效率要求較高的平級元相互調(diào)用函數(shù)中用到的內(nèi)部變量,可將其定義為全局臨時變量,編程時覆蓋使用,這樣可減少很多編譯代碼。而對于中斷函數(shù)內(nèi)部用到的變量,可用全局變量。
③對于有一定匯編經(jīng)驗的人在開始使用PICC時,應多注意觀看編譯后產(chǎn)生的匯編源代碼,并經(jīng)常觀看經(jīng)正確編譯鏈接后產(chǎn)生的映像文件(.MAP文件)。在該文件中,詳細列出了分配給變量和代碼的地址和生成代碼的大小等信息。使用者可了解代碼是否優(yōu)化,變量分配是否合理,堆棧是否溢出等,從而寫出高效簡潔的C源代碼。
④在很多情況下,PICC不支持類型強制轉(zhuǎn)換。即在類型不匹配時須查驗編譯后的匯編代碼,看是否正確,尤其是對指針操作的時候一定要注意。
⑤對某位變量自操作時,比如求反,不可以直接簡寫,例如:!flag;編譯后不能正確產(chǎn)生代碼,而須寫成:“flag=!flag;”
⑥盡量選擇全局優(yōu)化編譯選項。為保證寄存器頁(包括程序存儲期頁面和RAM寄存器頁)的正確轉(zhuǎn)換,PICC的編譯代碼中有大量的變換寄存器頁的代碼,選擇全局優(yōu)化PICC會優(yōu)化去大量有關(guān)RP0、RP1、PCLAPH所增加的變換代碼,從而加快程序執(zhí)行速度,并節(jié)省大量的程序空間。
⑦若有某一代碼很短的函數(shù)被多個函數(shù)經(jīng)常調(diào)用,最好將其定義為宏。因為若函數(shù)代碼很短時,由于被調(diào)函數(shù)和調(diào)用函數(shù)不在同一代碼頁所產(chǎn)生的附加代碼可能都會超過函數(shù)代碼本身的長度。
關(guān)鍵詞Microchip單片機功耗編程
由美國Microchip公司生產(chǎn)的PIC系列單片機,由于其超小型、低功耗、低成本、多品種等特點,已廣泛應用于工業(yè)控制、儀器、儀表、通信、家電、玩具等領(lǐng)域,本文總結(jié)了作者在PIC單片機開發(fā)過程中的一些經(jīng)驗、技巧,供同行參考。
1怎樣進一步降低功耗
功耗,在電池供電的儀器儀表中是一個重要的考慮因素。PIC16C××系列單片機本身的功耗較低(在5V,4MHz振蕩頻率時工作電流小于2mA)。為進一步降低功耗,在保證滿足工作要求的前提下,可采用降低工作頻率的方法,工作頻率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其電流可減小到15μA),但較低的工作頻率可能導致部分子程序(如數(shù)學計算)需占用較多的時間。在這種情況下,當單片機的振蕩方式采用RC電路形式時,可以采用中途提高工作頻率的辦法來解決。
具體做法是在閑置的一個I/O腳(如RB1)和OSC1管腳之間跨接一電阻(R1),如圖1所示。低速狀態(tài)置RB1=0。需進行快速運算時先置RB1=1,由于充電時,電容電壓上升得快,工作頻率增高,運算時間減少,運算結(jié)束又置RB1=0,進入低速、低功耗狀態(tài)。工作頻率的變化量依R1的阻值而定(注意R1不能選得太小,以防振蕩電路不起振,一般選取大于5kΩ)。
另外,進一步降低功耗可充分利用“sleep”指令。執(zhí)行“sleep”指令,機器處于睡眠狀態(tài),功耗為幾個微安。程序不僅可在待命狀態(tài)使用“sleep”指令來等待事件,也可在延時程序里使用(見例1、例2)。在延時程序中使用“sleep”指令降低功耗是一個方面,同時,即使是關(guān)中斷狀態(tài),PortB端口電平的變化可喚醒“sleep”,提前結(jié)束延時程序。這一點在一些應用場合特別有用。同時注意在使用“sleep”時要處理好與WDT、中斷的關(guān)系。
圖1提高工作頻率的方法
例1(用Mplab-C編寫)例2(用Masm編寫)
Delay()Delay
{;此行可加開關(guān)中斷指令
/*此行可加開關(guān)中斷指令*/movlw.10
for(i=0;i<=10;i++)movwfCounter
SLEEP();Loop1
}Sleep
decfszCounter
gotoLoop1
return
2注意INTCON中的RBIF位
INTCON中的各中斷允許位對中斷狀態(tài)位并無影響。當PORTB配置成輸入方式時,RB<7:4>引腳輸入在每個讀操作周期被抽樣并與舊的鎖存值比較,一旦不同就產(chǎn)生一個高電平,置RBIF=1。在開RB中斷前,也許RBIF已置“1”,所以在開RB中斷時應先清RBIF位,以免受RBIF原值的影響,同時在中斷處理完成后最好是清RBIF位。
3用Mplab-C高級語言寫PIC單片機程序時要注意的問題
3.1程序中嵌入?yún)R編指令時注意書寫格式見例3。
例3
…………
while(1){#asmwhile(1){
……#asm/*應另起一行*/
#endasm……
}/*不能正確編譯*/#endasm
……}/*編譯通過*/
……
當內(nèi)嵌匯編指令時,從“#asm”到“endasm”每條指令都必須各占一行,否則編譯時會出錯。
3.2加法、乘法的最安全的表示方法見例4。
例4
#include<16c71.h>
#include
unsignedinta,b;
unsignedlongc;
voidmain()
{a=200;
b=2;
c=a*b;
}/*得不到正確的結(jié)果c=400*/
原因是Mplab-C以8×8乘法方式來編譯c=a*b,返回單字節(jié)結(jié)果給c,結(jié)果的溢出被忽略。改上例中的“c=a*b;”表達式為“c=a;c=c*b;”,最為安全(對加法的處理同上)。
3.3了解乘除法函數(shù)對寄存器的占用
由于PIC片內(nèi)RAM僅幾十個字節(jié),空間特別寶貴,而Mplab-C編譯器對RAM地址具有不釋放性,即一個變量使用的地址不能再分配給其它變量。如RAM空間不能滿足太多變量的要求,一些變量只能由用戶強制分配相同的RAM空間交替使用。而Mplab-C中的乘除法函數(shù)需借用RAM空間來存放中間結(jié)果,所以如果乘除法函數(shù)占用的RAM與用戶變量的地址重疊時,就會導致出現(xiàn)不可預測的結(jié)果。如果C程序中用到乘除法運算,最好先通過程序機器碼的反匯編代碼(包含在生成的LST文件中)查看乘除法占用地址是否與其它變量地址有沖突,以免程序跑飛。Mplab-C手冊并沒有給出其乘除法函數(shù)對具體RAM地址的占用情況。例5是乘法函數(shù)對0×13、0×14、0×19、0×1A地址占用情況。
例5
部分反匯編代碼
#include01A7081FMOVF1F,W
#include01A80093MOVWF13
;借用
unsignedlongValue@0x101A90820MOVF20,W
charXm@0x2d;01AA0094MOVWF14
;借用
voidmain()01AB082DMOVF2D,W
{Value=20;01AC0099MOVWF19
;借用
Xm=40;01AD019ACLRF1A
;借用
Value=Value*Xm01AE235FCALL035Fh
;調(diào)用乘法函數(shù)
……01AF1283BCF03,5
}01B0009FMOVWF1F
;返回結(jié)果低字節(jié)
01B10804MOVF04,W
01B200A0MOVWF20
;返回結(jié)果高字節(jié)
4對芯片重復編程
對無硬件仿真器的用戶,總是選用帶EPROM的芯片來調(diào)試程序。每更改一次程序,都是將原來的內(nèi)容先擦除,再編程,其過程浪費了相當多的時間,又縮短了芯片的使用壽命。如果后一次編程的結(jié)果較前一次,僅是對應的機器碼字節(jié)的相同位由“1”變成“0”,就可在前一次編程芯片上再次寫入數(shù)據(jù),而不必擦除原片內(nèi)容。
在程序的調(diào)試過程中,經(jīng)常遇到常數(shù)的調(diào)整,如常數(shù)的改變能保證對應位由“1”變“0”,都可在原片內(nèi)容的基礎(chǔ)繼續(xù)編程。另外,由于指令“NOP”對應的機器碼為“00”,調(diào)試過程中指令的刪除,先用“NOP”指令替代,編譯后也可在原片內(nèi)容上繼續(xù)編程。
另外,在對帶EPROM的芯片編程時,特別注意程序保密狀態(tài)位。廠家對新一代帶EPROM芯片的保密狀態(tài)位已由原來的EPROM可擦型改為了熔絲型,一旦程序代碼保密熔絲編程為“0”,可重復編程的EPROM芯片就無法再次編程了。使用時應注意這點,以免造成不必要的浪費(Microchip資料并未對此做出說明)。
參考文獻
【關(guān)鍵詞】PIC單片機 警示裝置 太陽能 全方位
1 引言
電力輸配電導線(含電纜)、桿塔及戶外變壓裝置由于其分布范圍廣、環(huán)境復雜,特別是架空線、塔桿、變壓裝置等在人員密集區(qū)或城鄉(xiāng)結(jié)合部極易造成人員、施工機械或超高車輛的刮蹭和觸電。
目前,電力塔桿、變壓裝置等電力系統(tǒng)均安裝了警示標志,并且已取得了比較好的效果。但是,電力架空線路過路部分并沒有任何的警示標志,基于此我們研制了電力線路架空線過路警示裝置。
2 系統(tǒng)組成和工作原理
2.1系統(tǒng)安裝結(jié)構(gòu)
整體系統(tǒng)共有三組傳感器檢測電路組成,利用傳感器的角度范圍和安裝工藝,避免死區(qū)的出現(xiàn),達到全方位覆蓋檢測的效果,系統(tǒng)傳感器安裝圖如圖1所示。
2.2 電路系統(tǒng)結(jié)構(gòu)
線路警示裝置電路系統(tǒng)由太陽能及鋰電池蓄電部分、光敏電阻模塊,紅外傳感器模塊、超聲波傳感器模塊、微控制器、LED警示部分、聲音報警部分、蜂鳴器報警部分和單片機控制器構(gòu)成,系統(tǒng)結(jié)構(gòu)如圖2所示。
系統(tǒng)選用系列傳感器傳感器采集現(xiàn)場數(shù)據(jù),微控制器PIC單片機對傳感器采集過來的數(shù)據(jù)進行分析和處理,當環(huán)境中的不同變量到達或超過預警值時,微控制器智能響應不同的警示電路以提醒人或者物體遠離線路。當傳感器數(shù)據(jù)回復正常時,關(guān)閉報警器。達到保護線路免遭破壞和人民的生命財產(chǎn)安全不受到傷害。
3 系統(tǒng)硬件設計
系統(tǒng)硬件設計包括太陽能電源模塊設計,超聲波傳感器模塊設計,紅外傳感器模塊設計等幾個部分。
3.1 主控模塊芯片選擇
系統(tǒng)微控制器選用美國Microchip(微星)公司的PICl6F1503單片機。PIC單片機是一種用來開發(fā)的去控制設備的可編程集成電路,它是采用了精簡指令集(RISC)結(jié)構(gòu)和Harvard雙總線結(jié)構(gòu)的嵌入式微控制器,其高速度、低電壓、低功耗、大電流LCD驅(qū)動能力和低價位OTP技術(shù)等都體現(xiàn)出單片機新的技術(shù)趨勢。PICl6F1503單片機內(nèi)置看門狗(Watchdog)定時器,提高了程序運行的可靠性。
3.2 太陽能電源模塊設計
基于太陽能供電,環(huán)保節(jié)能。選擇無記憶性的鋰電池作為蓄電池,實現(xiàn)太陽能有效利用,保護環(huán)境,節(jié)約能源。 為高壓,為特定環(huán)境應用報警裝置不易更換電源提供了良好的解決方案。通過智能電源管理芯片,對鋰電池電池短路、過充、欠充有較好的保護作用。延長了蓄電池的使用壽命,并充分保證系統(tǒng)穩(wěn)定工作。太陽能電源模塊電路圖如圖3所示。
3.3超聲波傳感器模塊設計
超聲波傳感器:超聲波傳感器是利用超聲波的特性研制而成的傳感器。超聲波是指頻率高于20kHz的機械波,由換能晶片在電壓的激勵下發(fā)生振動產(chǎn)生的,它具有頻率高、波長短、繞射現(xiàn)象小,特別是方向性好、能夠成為射線而定向傳播等特點。聲波探頭主要由壓電晶片組成,既可以發(fā)射超聲波,也可以接收超聲波。小功率超聲探頭多作探測作用。超聲波傳感器模塊設計電路圖如圖4所示。
3.4 紅外傳感器模塊設計
熱釋電紅外傳感器主要是由一種高熱電系數(shù)制成的探測元件,在每個探測器內(nèi)裝入一個或兩個探測元件,并將兩個探測元件以反極性串聯(lián),以抑制由于自身溫度升高而產(chǎn)生的干擾。有探測元件將探測并接受到的紅外輻射轉(zhuǎn)變成為微弱的電壓信號,經(jīng)裝在探頭內(nèi)的場效應管放大后向外輸出,人體輻射的紅外線中心波長為9-10um,而探測元件的波長靈敏度靈敏度在0.2-20um范圍內(nèi)幾乎穩(wěn)定不變。在傳感器頂端裝上濾光鏡,這個濾光片可通過光的波長范圍是7-10um,正好適合于人體紅外輻射的探測,而對其他的波長紅外線由濾光片予以吸收,從而實現(xiàn)對人的檢測作用。紅外傳感器模塊電路如圖5所示。
5 結(jié)束語
本系統(tǒng)把可持續(xù)利用能源太陽能以及傳感器檢測與報警跟工程應用良好的結(jié)合起來,為架空線路的防護提供了更好的保障,通過傳感器對信號的采集,實時的對線路環(huán)境進行檢測,并通過單片機軟硬件的結(jié)合處理,使得系統(tǒng)的信號干擾更小,實驗測試證明,本設計安全可靠、保護環(huán)境,節(jié)約能源,具有一定的推廣價值。
參考文獻
[1]新編電子電路大全[M].北京:中國計量出版社,2011.
[2]何立民.單片機高級教程應用與設計[M].北京:北京航空航天大學出版社,2005.
[3]李廣弟,朱月秀,王秀山. 單片機基礎(chǔ)[M].北京:北京航空航天大學出版社,2011.
[4]孫肖子.實用電子電路手冊[M].北京:高等教育出版社,2009.
[5]沈輝,曾祖勤.太陽能光伏發(fā)電技術(shù)[M].背景:化學工業(yè)出版社,2005.
[4]高壓線路標準規(guī)范[M].北京:北京電力出版社,2008.
作者單位
關(guān)鍵詞:無線通信; PIC單片機; LabVIEW; 控制界面
中圖分類號:TN9234文獻標識碼:A文章編號:1004373X(2011)23020103
Design of Temperature and Humidity Monitoring System Based on PIC SCM
WANG Haifeng
(Guangdong Institute of Technology, Zhuhai 519090, China)
Abstract: The application of short range wireless communication technique in industrial data control is studied. The system architecture, the hardware and the software of the system are introduced. Adopting PIC SCM as control kernel, controlling micropower RF chip(nRF24E1) to achieve wireless data transmission, controlling ICL7135 chip to achieve A/D conversion of the data from sensor, adopting the LabVIEW to compile the software. Adopting this system, the accurate monitoring of temperature and humidity in complicate circumstance can be obtained, the monitoring curve and data storage can be displayed realtimely.
Keywords: wireless communication; PIC SCM; LabVIEW; control interface
收稿日期:201107210引言
隨著科學技術(shù)的發(fā)展,許多新興產(chǎn)業(yè)對環(huán)境提出了更高的要求:制造大規(guī)模集成電路需要極高的空氣潔凈度,生物化學制藥需要精確的溫濕度控制。因此,對溫、濕度和一些基本數(shù)據(jù)的監(jiān)測和控制已成為生產(chǎn)過程中非常重要的技術(shù)要求。
PIC單片機(Peripheral Interface Controller)是由美國Microchip公司推出的,由于它的硬件系統(tǒng)設計便捷、指令系統(tǒng)設計精煉、采用精簡指令集和哈佛總線結(jié)構(gòu),擁有速度高、功率低、驅(qū)動電流大及控制能力強等優(yōu)點,能滿足用戶的各種需要,因此得到廣泛的應用[1]。
本文提出一種采用PIC單片來設計實現(xiàn)的測量和控制系統(tǒng)。首先進行實例內(nèi)容描述。
1系統(tǒng)組成
該系統(tǒng)設計內(nèi)容分成兩大部分:溫濕度的測量和控制。
1.1溫濕度測量部分
溫濕度測量部分如圖1所示,由傳感器、信號調(diào)理前端、A/D模數(shù)轉(zhuǎn)換部分和無線收發(fā)模塊組成。
圖1溫度測量部分模塊1.2溫濕度控制回饋部分
控制回饋,就是控制核心MCU根據(jù)采集的數(shù)據(jù),通過特定的算法判斷當前的狀態(tài),并輸出相應的指令來控制特定的模塊以控制溫濕度。系統(tǒng)結(jié)構(gòu)框圖如圖2所示。
圖2系統(tǒng)結(jié)構(gòu)框圖2系統(tǒng)硬件設計
2.1溫濕度傳感器的選擇
溫濕度傳感器大致可以分為模擬溫濕度傳感器和數(shù)字溫濕度傳感器兩類。
模擬溫濕度傳感器輸出的是信號通常是電流、電壓等線性信號,要通過信號前端調(diào)理電路和A/D轉(zhuǎn)換電路來實現(xiàn)數(shù)字化,才能輸入PIC控制核心來運算。這類常用的型號如:熱敏電阻、熱電偶、ADI公司出品的AD590、美信公司出品的MAX6613等。
數(shù)字化的溫濕度傳感器在內(nèi)部集成了傳感器、調(diào)理電路和A/D轉(zhuǎn)換等電路,可以直接輸出數(shù)字信號,也可以直接與PIC單片機相連。常用的數(shù)字溫濕度傳感器有達拉斯公司出品的DS18B20,ADI公司出品的ADT75等。
該系統(tǒng)選用ADI公司出品的AD590,其主要特點如下:
(1) 線性化的電流輸出:1 μA對應1 K(K為絕對溫濕度單位)。
(2) 寬溫濕度測量范圍:-55~+150 ℃。
(3) 優(yōu)異的線性:全溫濕度范圍內(nèi)達到±0.3 ℃。
(4) 寬泛的供電范圍:4~30 V。
(5) 低廉的價格。
2.2PIC單片機硬件
PIC單片機作為控制核心,其最小系統(tǒng)原理如圖3所示。圖3中PIC16F877接上供電電壓(+5 V和GND),復位電路及晶振電路,即可正常工作,顯得簡潔易用[1]。
圖3PIC單片機最小系統(tǒng)原理2.3A/D轉(zhuǎn)換芯片
ICL7135是一種四位半的雙積分A/D轉(zhuǎn)換器,具有精度高(精度相當于14位二進制數(shù))、價格低廉、抗干擾能力強等優(yōu)點。該系統(tǒng)利用ICL7135進行串行數(shù)據(jù)采集。該方式結(jié)構(gòu)簡單、編程簡潔、占用單片機資源少。通過單片機PIC16F877的定時器T0來計脈沖個數(shù),定時器T0所用的頻率為系統(tǒng)晶振頻率的1/12。為了使定時器T0的計數(shù)脈沖與ICL7135工作所需的脈沖同步,可以將ICL7135的BUSY信號接至PIC16F877的PSP5引腳,此時定時器T0是否工作將受BUSY信號控制。當ICL7135開始工作時,即ICL7135的BUSY信號跳高時,定時器T0才開始工作。
ICL7135與單片機的接口電路如圖4所示。將單片機的ALE端的信號經(jīng)過D觸發(fā)器4分頻后連接到ICL7135的CLK端。這樣,定時器T0所記錄的脈沖數(shù)是ICL7135測量得到的脈沖數(shù)的2倍。將定時器記錄的脈沖個數(shù)除以2得到測量脈沖個數(shù)。再將測量脈沖個數(shù)減去10001就得到了A/D轉(zhuǎn)換的結(jié)果,這樣就得到了被測的模擬量,這些轉(zhuǎn)換的實現(xiàn)全部在軟件中完成,因此非常簡單。
圖4ICL7135與單片機接口電路圖2.4無線收發(fā)芯片nRF24E1
nRF24E1是挪威Nordic公司2003年開發(fā)的一種嵌入了高性能單片機內(nèi)核的高速單片無線收發(fā)模塊。采用QFN封裝,將射頻發(fā)射、接收、GMSK調(diào)制、解調(diào)、增強型8051內(nèi)核、9輸入12位ADC、125頻道、UART、SPI、PWM、RTC、WDT全部集成到單芯片中[23]。芯片的內(nèi)部結(jié)構(gòu)如圖5所示。
主要組成模塊有:
(1) 微處理器:增強型8051內(nèi)核。
(2) 可編程控制的PWM輸出。
(3) SPI接口:nRF24E1的SPI總線中含3條串口線(SDI,SCK和SDO)。
(4) RTC喚醒定時器、WTD和RC振蕩器。
(5) A/D轉(zhuǎn)換器:nRF24E1 A/D轉(zhuǎn)換器有10位的動態(tài)范圍。
(6) 無線收發(fā)器:nRF2401工作于全球開放的2.4~2.5 GHz頻段。收發(fā)器由1個完整的頻率合成器、1個功率放大器、1個調(diào)節(jié)器和2個接收器組成。
(7) 電源管理:在程序的控制下,nRF24E1可進入POWER DOWN省電模式,此時電流消耗僅為2 μA,外部中斷和看門狗復位能使系統(tǒng)退出省電模式。
(8) 抗干擾能力:采用nRF24E1芯片很容易引入跳頻機制,采用頻點躲避方式降低同頻干擾的影響。
圖5nRF24E1的硬件模塊3系統(tǒng)軟件設計
軟件部分包括初始化、A/D數(shù)據(jù)采集、閾值判斷以及控制輸入/輸出等幾個模塊,總體構(gòu)成如圖6所示。
圖6軟件系統(tǒng)組成3.1軟件系統(tǒng)
該系統(tǒng)的PC機端的軟件采用美國NI公司的圖形化編程語言LabVIEW平臺,該平臺是測控領(lǐng)域優(yōu)秀軟件,被譽為工程師的語言,可以加快產(chǎn)品開發(fā)速度。LabVIEW是實驗室虛擬儀器集成環(huán)境的簡稱,是目前應用最廣、發(fā)展最快、功能最強的圖形化軟件開發(fā)集成環(huán)境,摒棄了傳統(tǒng)開發(fā)工具的復雜性。LabVIEW將廣泛的數(shù)據(jù)采集、分析與顯示功能集中在同一個環(huán)境,且功能強大[46]。
由LabVIEW編寫的控制界面及框圖程序如圖7,圖8所示。
圖7監(jiān)控系統(tǒng)界面圖8監(jiān)控系統(tǒng)框圖程序4結(jié)語
本文介紹了一個完整的溫濕度測量、控制系統(tǒng)的設計方案,包括器件的選擇、硬件的設計、軟件的設計,以及代碼注釋。采用了PIC單片機上自帶的ADC模塊,用戶在自行設計時,可以考慮將其換成外部的高精度或高速的ADC器件,從而將精度、速度提高;也可以采用更新、更好的傳感器,從而簡化后級電路設計,也可以達到提高性能的目的。
參考文獻
關(guān)鍵詞 PIC單片機;電力線載波;PLC;OOK
中圖分類號:TN409 文獻標識碼:B
文章編號:1671-489X(2013)36-0138-03
1 引言
電力線載波(Power-line Communication,PLC)是一種充分利用電力線分布式系統(tǒng)的技術(shù)。該技術(shù)可以為用戶提供一系列的服務,如互聯(lián)網(wǎng)絡、家庭娛樂、家庭自動化等。同時,PLC技術(shù)也幫助電力供應者在管理電網(wǎng)的過程中有更多的競爭優(yōu)勢。因為電力供應商能夠通過電網(wǎng)將所有的用戶連接起來,所以它在電表通信系統(tǒng)中得到廣泛的應用。在遠程抄表系統(tǒng)中,大功率的信號通過電網(wǎng)傳輸給了用戶,然后再接受到所有用戶的反饋信息。該系統(tǒng)已經(jīng)廣泛在歐洲得到實施,在亞洲國家也有一些試點。
PLC系統(tǒng)也可以用在建筑物中的數(shù)據(jù)通信,如基于PLC的門禁系統(tǒng)、基于PLC的路由器。這一技術(shù)的應用使得鋪設線路方面的開支大大節(jié)省。同時,電力供應商通過捆綁銷售寬帶業(yè)務,從而獲得高額的利潤。
PLC技術(shù)能夠經(jīng)濟、有效地應用在一些特定的領(lǐng)域,主要是該技術(shù)具有許多其他有線和無線傳輸技術(shù)所不具有的優(yōu)勢:PLC利用現(xiàn)有的電力線網(wǎng)絡,節(jié)約了鋪設線路的成本;PLC傳輸比無線傳輸、電話線傳輸更安全,傳輸?shù)臄?shù)據(jù)不容易受到攻擊;PLC傳輸使得電網(wǎng)用戶始終在線,而且不需要過多考慮傳輸設備的電源問題。
同樣,也存在一些不利的因素制約了PLC傳輸技術(shù)的發(fā)展:電力線輻射所造成的干擾;電網(wǎng)中的負載和用電設備使得信道中的噪聲很大;電網(wǎng)中存在一定的安全隱患,使得PLC在維修的時候需要一定的專業(yè)防護。
為了實現(xiàn)簡單化,本系統(tǒng)使用OOK技術(shù)(on-off-keying,二進制啟閉監(jiān)控技術(shù))。同時,本系統(tǒng)中由接口電路來實現(xiàn)PIC單片機和電網(wǎng)之間的電氣隔離和阻抗適配。這就意味著該系統(tǒng)將使用大量的現(xiàn)成組件,從而節(jié)約了設計成本。通過分析和實驗,證實了本系統(tǒng)可以實現(xiàn)有效的信號傳輸。
2 PLC系統(tǒng)
眾所周知,電力線并不是數(shù)字信號良好的傳輸媒介,這是因為傳輸信道中的雜散信號會作為噪聲脈沖傳輸給接收端。所以,必須通過加強傳輸信號來克服傳輸通道中的干擾。這就使得基波傳輸變得不可行,而數(shù)字調(diào)制技術(shù)則可以實現(xiàn)信號的安全傳輸。
如圖1所示,基本的PLC發(fā)射端、接收端電路各分為5部分。在發(fā)射端的結(jié)構(gòu)框圖中,有數(shù)據(jù)采集端、串/并行轉(zhuǎn)換器、載波頻率振動器、數(shù)字調(diào)制模塊和接口電路。發(fā)射端的作用是將采集到的信號經(jīng)過調(diào)制電路調(diào)制后,傳送到電力線的網(wǎng)絡上。OOK模塊是一種簡易的調(diào)制模塊,它采用的是ASK技術(shù)(Amplitude-shift modulation,稱作幅移鍵控技術(shù),它是通過改變載波信號幅值的大小來表示數(shù)字信號的技術(shù))。接口電路用于隔離220 V的日常照明用電和低壓用電設備。同樣,PLC的接收端通過接口電路將其與電網(wǎng)連接起來。前級放大電路能夠?qū)崿F(xiàn)信號在電力線中傳輸?shù)膿p失補償。放大后的信號經(jīng)過解調(diào)模塊恢復為原始數(shù)據(jù)傳輸給接收端。
3 基于PIC的電力線載波系統(tǒng)
該電力線載波系統(tǒng)將通過PIC單片機實現(xiàn)數(shù)據(jù)的生成和同步。輸入PLC發(fā)射端的數(shù)據(jù)是由PC產(chǎn)生的并行數(shù)據(jù)。PIC單片機能夠讀取并行數(shù)據(jù),并將其轉(zhuǎn)換成串行數(shù)據(jù)。這樣就保證了PIC單片機能夠通過延遲消除數(shù)據(jù)傳輸過程中開關(guān)電路所造的尖峰噪聲。
PLC的發(fā)射端 如圖2所示,PLC的發(fā)射端由以下幾部分組成:PIC單片機,實現(xiàn)傳輸數(shù)據(jù)的同步,并作為數(shù)據(jù)源;OOK調(diào)制模塊,將傳輸信號轉(zhuǎn)換成隨幅值變化的電信號;電平轉(zhuǎn)換器,主要作用是實現(xiàn)PIC單片機與OOK調(diào)制模塊間的電平轉(zhuǎn)換;功率放大電路,減少信號在傳輸過程中的損失;接口電路,隔離電壓為220 V,頻率為50 Hz的高電壓和低電壓。
接口電路由LC諧波電路組成,可用于發(fā)射端和接收端,如圖3所示。接口電路的Tx端口連接到發(fā)射端,Rx端口連接到接收端。調(diào)制信號經(jīng)過接口電路傳輸?shù)诫娋W(wǎng)。根據(jù)工作經(jīng)驗選擇相應的參數(shù)來減少信道中的干擾,從而獲得最佳的輸出效果。因為所選擇的載波頻率必須是持續(xù)的、穩(wěn)定的,而且載波頻率應該比信號的傳輸頻率高,所以選用LM566組成的電壓控制振蕩器來生成頻率為140 KHz的矩形波。該頻率遠大于傳輸數(shù)據(jù)的頻率,之所以選擇矩形波,是因為它具有更強的抗干擾能力。
調(diào)制信號經(jīng)過功率放大電路,提高所需的電流電平來驅(qū)動接口電路。這里,功率放大電路由功率C3039晶體管組成。正是由于該晶體管能適應高電壓、高頻率的工作環(huán)境,所以廣泛應用于感應電路。PLC的集成電路將工頻電路和低壓電路分離開來,同時接口電路也可以用來抑制開關(guān)所產(chǎn)生的高電壓尖峰。
PLC的接收端 在PLC的接收端接收到的信號被前級的放大電路放大。這個放大信號經(jīng)過OOK解調(diào)模塊還原出原始的數(shù)據(jù),接收端被還原的數(shù)據(jù)傳遞到微控制器中,然后將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。這個接收端接口電路與發(fā)射端的接口電路具有同樣的功能,隔離工頻高壓電。如圖4所示,OOK調(diào)制解調(diào)模塊電路的設計采用基本的邏輯門電路進行電平轉(zhuǎn)換,該電路可以連接TTL和CMOS。由集成運放組成的比較器可以實現(xiàn)電平轉(zhuǎn)換。該電平轉(zhuǎn)換電路可以將電壓的幅值增加到8 V,而低電壓的幅值小于2 V。OOK中的載波信號來自于LM566組成的電壓控制電路。
4 流程圖
PIC單片機通過編程將端口中輸入的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)。PIC經(jīng)過RS232傳輸引腳將串行數(shù)據(jù)輸出。PIC的流程圖如圖5所示,可以看出,微控制器通過延遲來控制信號,從而減少信道中由于開關(guān)所產(chǎn)生的尖峰脈沖。
通過對接口電路漏電工頻的測量來實現(xiàn)對其的檢測。實驗結(jié)果表明,最大的漏電信號幅值為36 mV,這并不會給發(fā)射端和接收端信號傳輸造成太大的影響。通過3種不同類型的信號(正弦波、三角波、矩形波)來檢測接口電路,用得到的數(shù)據(jù)評估電路的衰減性能、失真和噪聲。在3個點(發(fā)射端、電力線、接收端)對發(fā)出信號的傳輸過程進行檢測,結(jié)果發(fā)現(xiàn),正弦信號有很強的衰減,所以矩形波被用作載波信號。
5 結(jié)束語
本文試圖設計一個簡單、可靠的PLC系統(tǒng),這個系統(tǒng)可以達到穩(wěn)定、可靠和精確的要求。通過不斷地分析和總結(jié)可以看出,這個基于PIC單片機的電力線載波系統(tǒng)具有較小的噪聲和失真。同時,該系統(tǒng)由現(xiàn)成的組件組成,減少了設計成本,有利于其實現(xiàn)規(guī)?;a(chǎn)。另外,它可以應用在低速率的數(shù)據(jù)傳輸上,比如遠程抄表系統(tǒng)和自動控制系統(tǒng)。
參考文獻
[1]俞品.電力線通信技術(shù)的發(fā)展與應用[J].電信科學,
2002,9(1):35-30.
[2]戚銀城,尚秋峰,等.電力線載波技術(shù)的現(xiàn)狀及發(fā)展[J].華北電力大學學報,2001(1):15-16.
[3]潘瑩玉.電力線載波通信的現(xiàn)狀分析[J].電網(wǎng)技術(shù),
1998(2):33-40.
[4]尹曉華.智能用電小區(qū)的寬帶無線綜合業(yè)務系統(tǒng)研究[J].中國電力教育,2010(S2):3-5.
[5]賴征田.電力線載波信道特性研究及仿真[J].電力系統(tǒng)通信,2010(10):6-8.
[6]陳蘭英,孔媛媛.電力線載波通信技術(shù)的發(fā)展與應用前景[J].江蘇電機工程,2007(6).
[7]何健,杜海霞.新時代的電力線通信技術(shù)[J].東北電力學院學報,2005(2):13-15.
[8]田秀華.低壓電力線擴頻載波遠程抄表系統(tǒng)的研究[J].信息技術(shù),2003(6):23-24.