摘 "要:該文設(shè)計(jì)一個(gè)智能燃?xì)庠钊細(xì)猱惓Oɑ鸨Wo(hù)控制系統(tǒng),用熱電偶傳感器采集燃?xì)庠畹娜細(xì)馊紵郎囟?,以STC15W1K24S單片機(jī)作為核心控制器,介紹熱電偶的測溫原理以及使用MAX6675芯片將熱電偶的熱電勢信號轉(zhuǎn)換為數(shù)字信號,通過單片機(jī)STC15W1K24S的IO口采集處理,并根據(jù)采集的溫度閾值來控制氣閥的打開和關(guān)閉。
關(guān)鍵詞:熱電偶;STC15W1K24S單片機(jī);MAX6675芯片;控制系統(tǒng);燃?xì)庠?/p>
中圖分類號:TH811 " " "文獻(xiàn)標(biāo)志碼:A " " " " "文章編號:2095-2945(2024)20-0032-07
Abstract: In this paper, an intelligent gas stove abnormal flameout protection and control system is designed. The gas combustion temperature of the gas stove is collected by thermocouple sensor, and STC15W1K24S single-chip microcontroller is used as the core controller. The principle of thermocouple temperature measurement is introduced, and MAX6675 chip is used to convert thermocouple's thermopotential signal into digital signal. The thermocouple is collected and processed through the IO port of the single-chip microcontroller STC15W1K24S, and the gas valve is turned on and off according to the collected temperature threshold.
Keywords: thermocouple; STC15W1K24S single-chip microcontroller; MAX6675 chip; control system; gas stove
隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,越來越多的家庭使用智能家用燃?xì)庠钸M(jìn)行烹飪,以實(shí)現(xiàn)更便捷、更輕松的烹飪方式,是廚房電器的一次新的科技革命。本文以傳統(tǒng)灶具為平臺,利用傳感器技術(shù)、單片機(jī)技術(shù)設(shè)計(jì)了智能燃?xì)庠町惓Oɑ鸨Wo(hù)控制系統(tǒng),用熱電偶傳感器采集燃?xì)庠畹娜細(xì)馊紵郎囟?,以STC15W1K24S單片機(jī)作為核心控制器件進(jìn)行信號采集處理,當(dāng)燃燒溫度異?;驘犭娕紨嗑€時(shí),氣閥關(guān)閉(以燈泡的開啟來模擬),當(dāng)燃燒溫度正常時(shí),氣閥打開(以燈泡的關(guān)閉來模擬)。整個(gè)控制系統(tǒng)的控制信息可以顯示在管理中心系統(tǒng)上。
1 "熱電偶傳感模塊以及和單片機(jī)的硬件連接
1.1 "熱電偶傳感模塊介紹
熱電偶是最常用的測溫元件之一,能夠直接將溫度信號轉(zhuǎn)換為熱電勢信號,再配以信號放大處理電路等,可以輸出模擬量信號,也可以用數(shù)字處理電路,將熱電勢信號轉(zhuǎn)換為數(shù)字信號,直接由單片機(jī)或者上位機(jī)采集測量信號。
K型熱電偶是廉價(jià)金屬熱電偶的一種,由于K型熱電偶具有線性度好,熱電動勢大,靈敏度高,熱穩(wěn)定性和均勻度較好,價(jià)格便宜等優(yōu)點(diǎn),是目前最常使用的熱電偶類型之一。本系統(tǒng)設(shè)計(jì)中采用的熱電偶傳感模塊便采用了K型熱電偶。圖1為熱電偶傳感模塊,其中用灰色框起來的為使用MAX6675芯片進(jìn)行ADC轉(zhuǎn)換的數(shù)字式熱電偶測量電路,它將測量得到的熱電勢信號經(jīng)過ADC轉(zhuǎn)換后通過SPI兼容接口輸出數(shù)字信號。圖1熱電偶傳感模塊當(dāng)中的其余電路部分用于K型熱電偶的模擬信號測量。圖2為熱電偶感溫探頭。
1.2 "MAX6675芯片介紹
熱電偶傳感模塊中的數(shù)字式熱電偶測量電路中使用了MAX6675芯片進(jìn)行熱電勢信號的處理和轉(zhuǎn)換。下面對MAX6675芯片進(jìn)行簡要介紹。
MAX6675芯片是一款帶有冷端溫度補(bǔ)償、非線性矯正、熱電偶斷線檢測的K型熱電偶數(shù)據(jù)轉(zhuǎn)換器,能輸出12位分辨率的模數(shù)轉(zhuǎn)換信號,可讀取溫度最大到1 024 ℃。當(dāng)K型熱電偶進(jìn)行溫度測量時(shí),熱端為被測介質(zhì)的溫度,冷端為環(huán)境溫度,此時(shí)需要進(jìn)行冷端補(bǔ)償。MAX6675芯片采用熱敏二極管將環(huán)境溫度轉(zhuǎn)換為電壓值,然后將熱電偶回路當(dāng)中的熱電勢信號和熱敏二極管的電壓信號相加后送入模數(shù)轉(zhuǎn)換模塊中進(jìn)行轉(zhuǎn)換,從而求得真實(shí)的熱端溫度。圖3為MAX6675芯片的引腳結(jié)構(gòu)圖以及引腳各功能定義。
MAX6675芯片用簡單的3線串行SPI接口進(jìn)行數(shù)據(jù)訪問。3線分別為CS——片選信號(低電平有效);SCK——串行時(shí)鐘輸入;SO——串行數(shù)據(jù)輸出;
當(dāng)CS片選信號變?yōu)榈碗娖綍r(shí),MAX6675將停止轉(zhuǎn)換過程,進(jìn)入數(shù)據(jù)的讀取狀態(tài)。經(jīng)過Tcss時(shí)間后,SO引腳的數(shù)據(jù)信號變?yōu)橛行?,此時(shí)在SCK串行時(shí)鐘信號輸入的上升沿信號驅(qū)動下,SO引腳輸出數(shù)據(jù)。SO引腳輸出的數(shù)據(jù)為16位,所以整個(gè)數(shù)據(jù)的讀取過程需要SCK引腳輸出16個(gè)上升沿周期信號,當(dāng)數(shù)據(jù)讀取完畢,CS片選信號變?yōu)楦唠娖剑藭r(shí)停止數(shù)據(jù)讀取過程,MAX6675進(jìn)入信號轉(zhuǎn)換狀態(tài)。串行數(shù)據(jù)輸出時(shí)序圖如圖4所示。
MAX6675芯片轉(zhuǎn)換以后的數(shù)據(jù)從SO引腳輸出,數(shù)據(jù)輸出的格式從D0~D15共16位。D2位為熱電偶斷線檢測位,當(dāng)此位為1時(shí),表示熱電偶斷線未接入。D3~D14位這12位數(shù)據(jù)為溫度值,溫度范圍最大可以到1 024 ℃。具體數(shù)據(jù)輸出格式見表1。
1.3 "MAX6675和單片機(jī)的硬件連接
熱電偶傳感模塊和單片機(jī)之間通過MAX6675芯片的SPI接口進(jìn)行通信,它們的連接電路如圖5所示。
2 "系統(tǒng)硬件連接
整個(gè)系統(tǒng)的控制要求是當(dāng)燃燒溫度大于閾值,說明燃?xì)庠顪囟日?,氣閥打開(用燈泡的關(guān)閉來模擬);當(dāng)燃燒溫度小于閾值,說明燃?xì)庠顪囟犬惓Oɑ?,氣閥關(guān)閉(用燈泡的打開來模擬);系統(tǒng)的控制信息可以通過ocm12864液晶顯示屏進(jìn)行顯示。整個(gè)系統(tǒng)用到的硬件設(shè)備有STC15W1K24S單片機(jī)模塊、熱電偶傳感模塊、K型熱電偶感溫探頭、ocm12864液晶顯示模塊、繼電器模塊、12V燈泡。整個(gè)系統(tǒng)的硬件環(huán)境接線圖如圖6所示。
此硬件接線中使用的設(shè)備較多,對各設(shè)備接線做如下說明。
第一,熱電偶感溫探頭接熱電偶傳感模塊數(shù)字式熱電偶測量電路K型熱電偶的輸入端,接線時(shí)注意正負(fù)電極不要接反。
第二,熱電偶傳感模塊數(shù)字式測量電路的SPI兼容輸出接口SO引腳連接單片機(jī)的P1.1口,CS引腳連接單片機(jī)的P1.2口,SCK引腳連接單片機(jī)的P1.3口。
第三,12 V燈泡需要通過繼電器來驅(qū)動,繼電器的信號驅(qū)動由單片機(jī)的P1.7口輸出。
第四,顯示模塊使用ocm12864液晶顯示模塊,可顯示各種漢字和圖形。此系統(tǒng)中使用ocm12864A-1,可顯示8 192個(gè)中文漢字(16×16點(diǎn)陣)、128個(gè)字符(16×8點(diǎn)陣),可直接與單片機(jī)I/O口進(jìn)行連接,具有7條控制線,8位標(biāo)準(zhǔn)數(shù)據(jù)總線。ocm12864液晶顯示模塊的DB0~DB7為數(shù)據(jù)總線,8條數(shù)據(jù)線連接STCW1K24S單片機(jī)的P00~P07,CS1/CS2/RST/BL分別連接STCW1K24S單片機(jī)的P24~P27,R/S、R/W、E分別連接STCW1K24S單片機(jī)的P21~P23。ocm12864液晶顯示模塊的接口說明見表2。
3 "系統(tǒng)功能代碼設(shè)計(jì)
3.1 "熱電偶溫度采集功能代碼設(shè)計(jì)
單片機(jī)用SPI接口直接讀取MAX6675的SO引腳輸出的16位數(shù)據(jù)dat。根據(jù)MAX6675的數(shù)據(jù)讀取時(shí)序圖,在讀取數(shù)據(jù)前,先要將CS電平拉低,此時(shí)讓SCK也處于低電平,SO引腳的數(shù)據(jù)開始處于有效狀態(tài),然后將SCK電平拉高,在SCK的上升沿開始讀取SO引腳的數(shù)據(jù)。SO引腳先輸出的是16位數(shù)據(jù)的最高位,此時(shí)需要將SO引腳讀出的數(shù)據(jù)向左移一位,每讀完一位數(shù)據(jù),將SCK電平拉低,然后讀取下一位時(shí)再將SCK電平拉高,這樣重復(fù)循環(huán)16次,需要在SCK的16個(gè)周期脈沖下才能將SO引腳的16位數(shù)據(jù)讀取完畢,讀取完畢以后,將CS引腳電平拉高,表示MAX6675一個(gè)數(shù)據(jù)讀取過程結(jié)束,將進(jìn)入數(shù)據(jù)轉(zhuǎn)換狀態(tài)。讀取的16位數(shù)據(jù),需要舍去D0~D2這3位,取D3~D14位作為溫度值。MAX6675的量程是0~1 024 ℃,而12位數(shù)字量表示的范圍是0~4 096,根據(jù)它們之間的比例關(guān)系,溫度值=,所以在最后的數(shù)據(jù)處理中,還需要將讀得的12位數(shù)字量除以4才是溫度值。相應(yīng)的程序代碼設(shè)計(jì)如下。
sbit CS "=P1^2;
sbit SCK =P1^3;
sbit SO "=P1^1;
void MAX6675_ReadData(void)
{
int8u "i=0;
int16u dat=0;
CS = 0;
SCK = 0;
for(i=0;ilt;16;i++) //get D15-D0 from 6675
{
SCK = 1;
_nop_();
dat = datlt;lt;1;
if(SO)
dat = dat|0x01;
SCK = 0;
_nop_();
}
CS=1;
Max6675.temperature = dat;
if (dat amp; 0x0004)
{
Max6675.losemax6675bit = 1; //未檢測到熱電偶 當(dāng)K型熱電偶沒有接入時(shí)返回1
Max6675.temperature =0;
}
else
{
Max6675.losemax6675bit = 0;
Max6675.temperature gt;gt;= 3;//讀出來的數(shù)據(jù)的D3~D14是溫度值
Max6675.temperature gt;gt;= 2;//MAX6675的量程是0 ~ 1023.75攝氏度,而12bit表示的范圍是 0 ~ 4095
}
}
3.2 "ocm12864液晶顯示功能代碼設(shè)計(jì)
3.2.1 "ocm12864主要指令介紹
ocm12864是128×64點(diǎn)陣,即64行,128列,顯示一個(gè)漢字需要16×16點(diǎn)陣,顯示一個(gè)數(shù)字或字符需要16×8點(diǎn)陣,所以ocm12864最多可以顯示4行8列的漢字。ocm12864在使用時(shí)先要通過寫命令字的方式進(jìn)行初始化設(shè)置及忙狀態(tài)檢測等。下面先對使用到的幾個(gè)主要指令做一下介紹。
1)顯示開/關(guān)設(shè)置,如圖7所示。
功能:設(shè)置屏幕顯示開/關(guān)。DB0=H:屏幕顯示打開;DB0=L:屏幕顯示關(guān)閉。
當(dāng)初始化ocm12864時(shí),需要將顯示打開,此時(shí)需要向ocm12864寫入命令字0X3F;需要將R/W位置0,表示對ocm12864進(jìn)行寫操作;R/S位置0,表示此時(shí)數(shù)據(jù)線DB0~DB7上傳送的為指令,送入指令寄存器。
2)狀態(tài)檢測,如圖8所示。
功能:讀忙信號標(biāo)志位(BF)、復(fù)位信號標(biāo)志位(RST)和開關(guān)顯示狀態(tài)位(ON/OFF)。
BF=H:內(nèi)部正在執(zhí)行操作;BF=L:空閑狀態(tài);RST=H:正處于復(fù)位初始化狀態(tài);RST=L:正常狀態(tài);ON/OFF=H:表示顯示關(guān)閉;ON/OFF=L:表示顯示打開。
當(dāng)讀取忙信號標(biāo)志位BF、復(fù)位信號標(biāo)志位RST和開關(guān)顯示狀態(tài)位ON/OFF時(shí),需要將R/W位置1,表示從ocm12864讀數(shù)據(jù);R/S位置0,表示從DB0~DB7數(shù)據(jù)線上傳送的為指令信號,送入指令寄存器;每當(dāng)從ocm12864讀數(shù)據(jù)時(shí)都需要進(jìn)行忙信號狀態(tài)檢測。
3)設(shè)置顯示起始行,如圖9所示。
功能:執(zhí)行該命令后,所設(shè)置的行將顯示在屏幕的第一行。
當(dāng)初始化ocm12864時(shí),需要設(shè)置起始行。一般都是將第0行的地址設(shè)置為顯示起始行,此時(shí)需要向ocm12864寫入命令字0XC0;
4)設(shè)置頁地址,如圖10所示。
功能:執(zhí)行該命令后,讀寫操作將在指定頁內(nèi),直到重新設(shè)置。頁地址就是文本顯示RAM的行地址,頁地址存儲在X地址計(jì)數(shù)器中,DB2~DB0可表示8頁,讀寫數(shù)據(jù)對頁地址沒有影響。除本指令可改變頁地址外,復(fù)位信號(RST)可把頁地址計(jì)數(shù)器內(nèi)容清零。
此處所說的頁地址是把ocm12864的64行分成了8頁,每頁8行,這8頁的地址用DB2~DB0(0~7)來表示。數(shù)據(jù)為縱向讀寫,每一頁的第一行對應(yīng)DB0,第八行對應(yīng)DB7,這樣每一頁的第一列對應(yīng)一個(gè)字節(jié),而顯示一個(gè)漢字需要16×16的點(diǎn)陣,所以一個(gè)漢字需要2頁16列,這樣剛好對應(yīng)了一個(gè)漢字字模有32個(gè)字節(jié)的數(shù)據(jù)。
5)設(shè)置列地址,如圖11所示。
功能:文本顯示RAM的列地址存儲在Y地址計(jì)數(shù)器中,讀寫數(shù)據(jù)對列地址有影響,再對文本顯示RAM進(jìn)行讀寫操作后,Y地址自動加1。
ocm12864有128列,列地址可取0~127,但因?yàn)榭梢赃x擇左半屏和右半屏,所以列地址Y只在0~64之間變化,當(dāng)列地址Y大于64時(shí),此時(shí)選擇右半屏,并將列地址Yamp;OX3F,然后根據(jù)設(shè)置列地址指令,再將相與后的結(jié)果與0X40相加即可。
6)寫顯示數(shù)據(jù),如圖12所示。
功能:寫數(shù)據(jù)到DDRAM,DDRAM是文本顯示RAM。文本顯示RAM提供8個(gè)×4行的漢字顯示空間。寫指令執(zhí)行后列地址計(jì)數(shù)器自動加1。DB7~DB0數(shù)據(jù)位為1表示顯示,數(shù)據(jù)為0表示不顯示。寫數(shù)據(jù)到DDRAM前,要先執(zhí)行“設(shè)置頁地址”及“設(shè)置列地址”命令。
3.2.2 "ocm12864顯示程序代碼設(shè)計(jì)
1)Lcd的接口信號(邏輯管腳與物理管腳的對應(yīng)表)。
sbit LCD_BL "= P2^7;
sbit LCD_RST = P2^6;
sbit LCD_CS2 = P2^5;
sbit LCD_CS1 = P2^4;
sbit LCD_E " = P2^3;
sbit LCD_RW = P2^2;
sbit LCD_RS "= P2^1;
#define LCD_DATA " "P0
2)檢測是否空閑函數(shù)。
void BusycChk_12864(void)
{
int16u timeout = 0;
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
while((LCD_DATA amp; 0x80) amp;amp; ++timeout != 0); //忙狀態(tài)檢測, 等待超時(shí)時(shí)間為60ms
LCD_E = 0;
}
3)LCD初始化函數(shù)。
void Lcd_Init (void)
{
LCD_BL "= 0; " " " //打開背光
LCD_RST = 0; " " " //復(fù)位信號有效
Delay100ms();
LCD_RST = 1;
Delay1ms();
LCD_CS1 = 1;
LCD_CS2 = 1;
Lcd_WrCmd(0xC0); " "http://設(shè)置顯示起始行
Lcd_WrCmd(0x3F); " //顯示打開
}
4)往ocm12864寫命令函數(shù)。
void Lcd_WrCmd(int8u cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_E = 1;
NOP;
LCD_E = 0;
}
5)往ocm12864寫數(shù)據(jù)函數(shù)
void Lcd_WrData(int8u wdata)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = wdata;
LCD_E = 1;
NOP;
LCD_E = 0;
}
6)地址轉(zhuǎn)換函數(shù)。
ocm12864有128列,列地址可以取的值為0~127,但128列被平均分為左半屏和右半屏,則兩半屏分別對應(yīng)的列地址取值范圍為0~63,所以對于列地址的取值當(dāng)大于等于64時(shí),需要選擇右半屏,并把列地址的值轉(zhuǎn)換到對應(yīng)的0~64的范圍內(nèi),當(dāng)列地址取值小于64時(shí),選擇左半屏即可,所以需要進(jìn)行地址轉(zhuǎn)換。
void Lcd_Select(int8u x, int8u y)
{
if( ygt;=64 )
{
LCD_CS2 = 1; " " "http://選中右屏
LCD_CS1 = 0;
}
else
{
LCD_CS1 = 1; " " "http://選中左屏
LCD_CS2 = 0;
}
Lcd_WrCmd(0xC0);
Lcd_WrCmd(0x40 + (yamp;0x3F)); " " //設(shè)置列地址
Lcd_WrCmd(0xB8 + (xamp;7)); " " " "http://設(shè)置頁地址
}
7)LCD清屏函數(shù)。
每顯示完一屏數(shù)據(jù),需要顯示第二屏數(shù)據(jù)前,都需要調(diào)用LCD清屏函數(shù)進(jìn)行清屏。
void Lcd_Clr(void)
{
int8u i, x=0;
for(x=0; xlt;8; x++)
{
Lcd_Select(x, 0); " " " "http://選中左屏
for(i=0; ilt;64; i++)
{
Lcd_WrData(0);
}
Lcd_Select(x, 64); " " " "http://選中右屏
for(i=0; ilt;64; i++)
{
Lcd_WrData(0);
}
}
}
8)Lcd顯示一行函數(shù)。
void Lcd_DispOneRow(int8u x, int8u y, int8u *buf, int8u len)
{
x = xamp;7;
Lcd_Select(x, y);
while(len--)
{
Lcd_WrData(*buf);
buf++;
y++;
if( y == 64 )
{
Lcd_Select(x, y); " " "http://選中右屏
}
}
}
4 "程序運(yùn)行結(jié)果驗(yàn)證
當(dāng)熱電偶正常接入,并且對熱電偶感溫探頭進(jìn)行加熱,當(dāng)溫度超過30℃時(shí),指示燈關(guān)閉,顯示屏幕顯示熱電偶狀態(tài)正常,如圖13所示;當(dāng)熱電偶未接入或?qū)犭娕几袦靥筋^不加熱,溫度低于30 ℃時(shí),指示燈開啟,顯示屏幕顯示熱電偶狀態(tài)信息,如圖14所示。
5 "結(jié)束語
本文采用北京新大陸有限公司NEWLab平臺套件設(shè)計(jì)了燃?xì)庠町惓Oɑ鸨Wo(hù)控制系統(tǒng),重點(diǎn)闡述了熱電偶數(shù)字信號處理芯片MAX6675的工作原理、硬件連接以及信號輸出的代碼設(shè)計(jì),除此之外還介紹了OCM12864的顯示原理以及顯示程序設(shè)計(jì),代碼經(jīng)過在實(shí)際設(shè)備上驗(yàn)證,能正確實(shí)現(xiàn)控制系統(tǒng)功能要求。
參考文獻(xiàn):
[1] 老盛林,何式鍵.MAX6675在K型熱電偶溫度測量中的應(yīng)用[J].現(xiàn)代信息科技,2019,3(8):195-196.
[2] 王前波,閻沖,段曉健,等.基于單片機(jī)的熱電偶溫度測量系統(tǒng)設(shè)計(jì)[J].科技信息,2012(12):124.
[3] 虞致國,徐健健.MAX6675的原理及應(yīng)用[J].國外電子元器件,2002(12):41-43.