王曉利 寶雞文理學(xué)院 馬毓伯 電子科技大學(xué)
隨著生活節(jié)奏的加快,人們對(duì)生活的品質(zhì)追求也朝著快捷、高效方向發(fā)展,各類家用電器,與日常生活關(guān)系密切。在南方,熱水器與居民的日常生活更是密不可分。通常從性價(jià)比考慮:燃?xì)鉄崴?、太?yáng)能熱水器和電熱水器使用較多,其中燃?xì)鉄崴鞯陌踩[患較電熱水器高,使用中有一氧化碳泄漏、中途熄火等隱患問(wèn)題;太陽(yáng)能熱水器,多由天氣來(lái)決定使用情況,時(shí)間和空間上都具有一定的局限性。電熱水器可有效避免上述問(wèn)題,其使用方便,且相對(duì)環(huán)保,熱水供應(yīng)實(shí)時(shí)性較好。為了使電熱水器溫度控制更加便利、安全,考慮到FPGA具有豐富的邏輯單元,容易實(shí)現(xiàn)電路設(shè)計(jì)且可以實(shí)時(shí)完成計(jì)算,故提出基于FPGA的紅外遙控?zé)崴骺刂葡到y(tǒng)的設(shè)計(jì)。
系統(tǒng)FPGA主控控制模塊采用Altera公司的芯片EPF10K10LC84-4。基于FPGA的硬件設(shè)計(jì)原理框圖如圖1所示:硬件系統(tǒng)主要由前端溫度傳感器、A/D轉(zhuǎn)換電路、溫度LCD顯示電路、過(guò)溫控制報(bào)警電路以及FPGA控制主單元組成。其中,F(xiàn)PGA是控制核心。水溫的設(shè)定是通過(guò)操作紅外遙控器裝置進(jìn)行設(shè)置的。當(dāng)通電工作時(shí),系統(tǒng)自動(dòng)讀取上一次設(shè)定的溫度數(shù)據(jù)并顯示在LCD1602上,若需更新溫度數(shù)據(jù),可通過(guò)紅外遙控器進(jìn)行升溫或者降溫的調(diào)節(jié),設(shè)置完畢,F(xiàn)PGA控制部分可根據(jù)用戶的設(shè)定或遙控操作,經(jīng)過(guò)實(shí)時(shí)運(yùn)算,假如溫度傳感器感應(yīng)到溫度低于設(shè)定值時(shí),系統(tǒng)進(jìn)入到加熱工作狀態(tài);當(dāng)溫度高于設(shè)定值時(shí),F(xiàn)PGA經(jīng)過(guò)邏輯運(yùn)算,判定是否繼續(xù)加熱,同時(shí)系統(tǒng)控制過(guò)溫報(bào)警電路發(fā)聲,此時(shí)停止加熱。
圖1 系統(tǒng)電路原理框圖
DS18B20溫度傳感器體積小,主要應(yīng)用于狹小空間,安裝方便,其作用是感應(yīng)當(dāng)前熱水器中的水溫變化,具有較高的靈敏度。溫度傳感器的工作原理圖如圖2所示,其自身帶有對(duì)溫度的寄存裝置,便于前段數(shù)據(jù)采集,信號(hào)經(jīng)由A/D轉(zhuǎn)換電路與FPGA之間進(jìn)行傳輸。
圖2 溫度傳感器的工作原理框圖
FPGA模塊控制ADC0809的工作狀態(tài),并接收來(lái)自ADC0809的數(shù)字信息,與按鍵輸入電路的預(yù)設(shè)信號(hào)進(jìn)行比較后,將控制信息傳送給DAC0832轉(zhuǎn)換后輸送給后向控制電路;設(shè)計(jì)預(yù)設(shè)溫度為38℃,38℃對(duì)應(yīng)的ADC0809輸出值為97,36℃對(duì)應(yīng)的ADC0809輸出值為92,則VHDL程序中設(shè)定為ADC0809輸入值大于或等于97時(shí),F(xiàn)PGA輸出到DAC0832的控制信號(hào)為0,即停止加熱;當(dāng)ADC0809輸入值小于92時(shí),F(xiàn)PGA輸出到DAC0832的控制信號(hào)為255,即以最大功率加熱;數(shù)值在92-96之間,輸出將細(xì)分為5個(gè)階段,即當(dāng)數(shù)值為92時(shí),對(duì)應(yīng)輸出為5,當(dāng)數(shù)值為96時(shí),對(duì)應(yīng)輸出為1,以逐次遞減的功率進(jìn)行加熱。
圖3 ADC和DAC控制電路原理框圖
紅外遙控器因設(shè)計(jì)簡(jiǎn)單,可靠性高,且能夠遠(yuǎn)距離對(duì)電子設(shè)備參數(shù)進(jìn)行設(shè)置,故得到廣泛應(yīng)用。其主要由發(fā)射器和接收器兩部分構(gòu)成。紅外線發(fā)射模塊選用IR Transmitter,紅外線接收模塊選用TSOP4838。在系統(tǒng)設(shè)計(jì)中使用紅外遙控器能夠靈活調(diào)整熱水器的預(yù)設(shè)溫度。紅外遙控系統(tǒng)的原理框圖如圖3所示。
如圖4所示:紅外遙控器也是以FPGA控制器為核心部件,紅外接收器接收紅外信號(hào),其模塊對(duì)信號(hào)進(jìn)行放大、檢波、整形并解調(diào)出基帶信號(hào)。FPGA控制器實(shí)時(shí)存儲(chǔ)解調(diào)出的信號(hào)的高、低電平的時(shí)間寬度,當(dāng)發(fā)射器按鍵按下發(fā)出紅外信號(hào)時(shí),從FPGA存儲(chǔ)區(qū)還原出相應(yīng)的紅外遙控編碼,即按鍵不同,發(fā)射出的遙控碼亦不同。該設(shè)計(jì)采用脈寬調(diào)制串行碼進(jìn)行發(fā)送,即在相同脈沖寬度,不同間隔、周期的基礎(chǔ)上,設(shè)置代碼“0”或者“1”,發(fā)送相應(yīng)的信息。
紅外遙控接收器主要任務(wù)是完成信號(hào)的接收,完成光電信號(hào)的轉(zhuǎn)換,調(diào)制出的控制信號(hào)驅(qū)動(dòng)紅外發(fā)光二極管發(fā)射紅外信號(hào),從而可實(shí)現(xiàn)對(duì)系統(tǒng)溫度的控制。
圖4 紅外遙控設(shè)計(jì)框圖
當(dāng)正常加熱,溫度未達(dá)到上限時(shí),繼電器不工作;當(dāng)檢測(cè)到溫度過(guò)高時(shí),繼電器產(chǎn)生動(dòng)作,使系統(tǒng)電路進(jìn)入警告狀態(tài),并切斷電源,實(shí)現(xiàn)溫度過(guò)熱時(shí)對(duì)用戶的保護(hù)。過(guò)溫保護(hù)控制電路如圖5所示。
圖5 過(guò)溫保護(hù)控制電路圖
系統(tǒng)開(kāi)始工作時(shí),初始化進(jìn)入到等待接收控制信息的狀態(tài),若沒(méi)有通過(guò)紅外遙控器更新溫度數(shù)據(jù),則系統(tǒng)讀取上一次設(shè)定的溫度數(shù)據(jù)進(jìn)行顯示,若需要更新溫度數(shù)據(jù),則系統(tǒng)等待溫度遞增或遞減的指令,若加1遞增則設(shè)置溫度上升,若減1遞減則設(shè)置溫度下降,設(shè)置完畢,系統(tǒng)顯示更新的溫度數(shù)據(jù),并進(jìn)入加熱或降溫工作狀態(tài),這時(shí)系統(tǒng)準(zhǔn)備接收判斷指令,當(dāng)溫度低于設(shè)定值時(shí)則繼續(xù)加熱,當(dāng)溫度高于設(shè)定值,系統(tǒng)控制繼電器斷開(kāi),停止加熱。主程序流程圖如圖6所示。
圖6 主程序的流程圖
3.2.1 紅外發(fā)射主要程序
library ieee;
use ieee.std_logic_1164.all;
entity hw_OUTPUT is
port(CLK:in std_logic;--50MHz
kin:in std_logic;
DATA:in std_logic_vector(31 downto 0);
IROUT:out std_logic);
end entity hw_OUTPUT;
architecture one of hw_OUTPUT is
type state is(s0,s1,s2,s3,s4);
signal sta:state;
signal clk_1m:std_logic; --1MHz
signal clk_38k:std_logic; --38kHz
begin
process(CLK)
variable clk_counter:integer range 0 to 25;
begin
if(CLK'event and CLK='1')then
clk_counter:=clk_counter+1;
if(clk_counter=25)then
clk_counter:=0;
clk_1m<=not clk_1m;
end if;
end if;
end process;
process(CLK)
variable clk_counter:integer range 0 to 658;
begin
if(CLK'event and CLK='1')then
clk_counter:=clk_counter+1;
if(clk_counter=658)then
clk_counter:=0;
clk_38k<=not clk_38k;
end if;
end if;
end process;
......
3.2.2 紅外接收主要程序
library ieee;
use ieee.std_logic_1164.all;
entity hw_InfraredPort is
port(CLK:in std_logic;--50MHz
RST:in std_logic;IRIN:in std_logic;
RD:in std_logic;
CS:in std_logic;
led:out std_logic;DATA:out std_logic_vector(31 downto 0));
end entity hw_InfraredPort;
architecture one of hw_InfraredPort is
type state is(s0,s1,s2,s3,s4);
signal sta:state;
signal vData:std_logic_vector(31 downto 0);
signal clk_1m:std_logic; --1MHz
begin
process(CLK)
variable clk_counter:integer range 0 to 25;
begin
if(CLK'event and CLK='1')then
clk_counter:=clk_counter+1;
if(clk_counter=25)then
clk_counter:=0;
clk_1m<=not clk_1m;
end if;
end if;
end process;
......
系統(tǒng)設(shè)計(jì)利用硬件描述語(yǔ)言VHDL進(jìn)行程序編寫,在QuarterII設(shè)計(jì)平臺(tái)進(jìn)行原理圖繪制和仿真等工作。并能根據(jù)仿真結(jié)果分析設(shè)計(jì)存在的問(wèn)題和缺陷,從而進(jìn)行程序的調(diào)試和完善。結(jié)果驗(yàn)證時(shí)以38℃作為預(yù)設(shè)溫度,觀察FPGAin與FPGAout兩端口。當(dāng)預(yù)設(shè)溫度為38℃時(shí),ADC模塊輸入數(shù)值為97時(shí),對(duì)應(yīng)DAC模塊輸出為0。同理,當(dāng)數(shù)值為92時(shí),對(duì)應(yīng)輸出為5,當(dāng)數(shù)值為96時(shí),對(duì)應(yīng)輸出為1,當(dāng)輸入不在92-97之間,輸入大于等于97時(shí),輸出為0,輸入小于92時(shí),輸出為255。如圖7所示的系統(tǒng)仿真總圖和如圖8所示的溫度變化時(shí)的控制波形,經(jīng)驗(yàn)證符合設(shè)計(jì)要求。
圖7 系統(tǒng)仿真總圖
圖8 溫度增加仿真圖
通過(guò)設(shè)計(jì),驗(yàn)證了基于FPGA制作的可行性,達(dá)到了實(shí)時(shí)控制目的。系統(tǒng)性能穩(wěn)定,運(yùn)行可靠,能夠滿足日常生活的基本要求。該溫度檢測(cè)器與傳統(tǒng)設(shè)計(jì)相比,具有測(cè)溫準(zhǔn)確,讀數(shù)方便的特點(diǎn),適用于對(duì)測(cè)溫要求準(zhǔn)確的場(chǎng)所。
通過(guò)對(duì)熱水器裝置的研究,設(shè)計(jì)出了基于FPGA控制核心的溫控系統(tǒng)和紅外遙控控制裝置,實(shí)現(xiàn)了預(yù)期控制功能,該設(shè)計(jì)不僅使用便捷,而且能夠?qū)崴M(jìn)行實(shí)時(shí)供應(yīng),在日常生活中,該系統(tǒng)可在醫(yī)院、賓館、寫字樓等場(chǎng)所投入運(yùn)行,有著較好的實(shí)用價(jià)值。