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