久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15099|回復(fù): 24
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+MAX6675熱電偶(熱電堆)智能體溫檢測系統(tǒng)程序+PCB原理圖設(shè)計

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:418578 發(fā)表于 2020-6-27 14:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在日常生活中,需要檢測人員的體溫,而且這個溫度范圍很小。該系統(tǒng)采集主要以Atmel公司的AT89C51單片機(jī)為控制處理核心,由它完成對數(shù)據(jù)的采集處理以及控制數(shù)據(jù)在LCD顯示屏上的顯示。AT89C51單片機(jī)是一種低功耗/低電壓/高性能的8位單片機(jī),片內(nèi)帶有一個8KB的可編程/可擦除/只讀存儲器。
在本文中,主要說明單片機(jī)與K型熱電偶以及K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675的組合,形成單片機(jī)的溫度檢測系統(tǒng)。包括:如何根據(jù)選擇的器件設(shè)計外圍電路和單片機(jī)的接口電路,如何編寫控制溫度檢測器件進(jìn)行數(shù)據(jù)傳輸?shù)膯纹瑱C(jī)程序,如何使用LCD12864進(jìn)行字符的顯示,并簡要介紹數(shù)字溫度傳感器MAX6675的應(yīng)用。

1              系統(tǒng)總體方案設(shè)計
1.1              工作原理
1.2              總體設(shè)計方案
2              系統(tǒng)硬件設(shè)計
2.1              信號采集電路
2.1.1              傳感器
2.2              單片機(jī)系統(tǒng)電路
2.3              人機(jī)交互電路
2.4              溫度顯示電路
3              仿真電路及硬件分析
4              系統(tǒng)軟件設(shè)計
4.1              軟件設(shè)計思路
4.2              程序流程圖
4.3              主要程序代碼
5              實驗結(jié)果顯示
6              附錄及元器件清單
6.1              所用相關(guān)軟件
6.2              元器件清單

統(tǒng)總體方案設(shè)計
1.1    工作原理

熱電堆基本原理   

熱電堆是一種熱釋紅外線傳感器,它是由熱電偶構(gòu)成的一種器件。它在耳式體溫計、放射溫度計、電烤爐、食品溫度檢測等領(lǐng)域中,作為溫度檢測器件獲得了廣泛的應(yīng)用。熱電堆的組成基本單元--熱電偶。
K型熱電偶作為一種溫度傳感器,K型熱電偶通常和顯示儀表,記錄儀表和電子調(diào)節(jié)器配套使用。K型熱電偶可以直接測量各種生產(chǎn)中從0℃到1300℃范圍的液體蒸汽和氣體介質(zhì)以及固體的表面溫度。K型熱電偶通常由感溫元件、安裝固定裝置和接線盒等主要部件組成,K型熱電偶是目前用量最大的廉金屬熱電偶,其用量為其他熱電偶的總和。K型熱電偶絲直徑一般為1.2~4.0mm。K型熱電偶具有線性度好,熱電動勢較大,靈敏度高,穩(wěn)定性和均勻性較好,抗氧化性能強(qiáng),價格便宜等優(yōu)點,能用于氧化性惰性氣氛中廣泛為用戶所采用。 熱電偶測溫由熱電偶、連接導(dǎo)線及顯示儀表三部分組成。如果將熱電偶的熱端加熱,使得冷、熱兩端的溫度不同,則在該熱電偶回路中就會產(chǎn)生熱電勢,這種物理現(xiàn)象就稱為熱電現(xiàn)象(即熱電效應(yīng))。在熱電偶回路中產(chǎn)生的電勢由溫差電勢和接觸電勢兩部分組成。接觸電勢:它是兩種電子密度不同的導(dǎo)體相互接觸時產(chǎn)生的一種熱電勢。當(dāng)兩種不同的導(dǎo)體A和B相接觸時,假設(shè)導(dǎo)體A和B的電子密度分別為NA和NB并且NA>NB,則在兩導(dǎo)體的接觸面上,電子在兩個方向的擴(kuò)散率就不相同,由導(dǎo)體A擴(kuò)散到導(dǎo)體B的電子數(shù)比從B擴(kuò)散到A的電子數(shù)要多。導(dǎo)體A失去電子而顯正電,導(dǎo)體B獲得電子而顯負(fù)電。因此,在A、B兩導(dǎo)體的接觸面上便形成一個由A到B的靜電場,這個電場將阻礙擴(kuò)散運動的繼續(xù)進(jìn)行,同時加速電子向相反方向運動,使從B到A的電子數(shù)增多,最后達(dá)到動態(tài)平衡狀態(tài)。此時A、B之間也形成一電位差,這個電位差稱為接觸電勢。此電勢只與兩種導(dǎo)體的性質(zhì)相接觸點的溫度有關(guān),當(dāng)兩種導(dǎo)體的材料一定,接觸電勢僅與其接點溫度有關(guān)。溫度越高,導(dǎo)體中的電子就越活躍,由A導(dǎo)體擴(kuò)散到B導(dǎo)體的電子就越多,接觸面處所產(chǎn)生的電動勢就越大,即接觸電勢越大。

MAX6675的工作原理與功能

根據(jù)熱電偶測溫原理,熱電偶的輸出熱電勢不僅與測量端的溫度有關(guān),而且與冷端的溫度有關(guān),使用硬件電路進(jìn)行冷端補(bǔ)償時,雖能部分改善測量精度,但由于熱電偶使用環(huán)境的不同及硬件電路本身的局限性,效果并不明顯;而使用軟件補(bǔ)償,通常是使用微處理機(jī)表格法或線性電路等方法來減小熱電偶本身非線性帶來的測量誤差,但同時也增加了程序編制及調(diào)試電路的難度。MAX6675對其內(nèi)部元器件參數(shù)進(jìn)行了激光修正,從而對熱電偶的非線性進(jìn)行了內(nèi)部修正。同時,MAX6675內(nèi)部集成的冷端補(bǔ)償電路、非線性校正電路、斷偶檢測電路都給K型熱電偶的使用帶來了極大方便,其工作原理如圖2所示。
(1) 溫度變換   
MAX6675內(nèi)部具有將熱電偶信號轉(zhuǎn)換為與ADC輸入通道兼容電壓的信號調(diào)節(jié)放大器,T+和T-輸入端連接到低噪聲放大器A1,以保證檢測輸入的高精度,同時是熱電偶連接導(dǎo)線與干擾源隔離。熱電偶輸出的熱電勢經(jīng)低噪聲放大器A1放大,再經(jīng)過A2電壓跟隨器緩沖后,送至ADC的輸入端。在將溫度電壓值轉(zhuǎn)換為相等價的溫度值之前,它需要對熱電偶的冷端進(jìn)行補(bǔ)償,冷端溫度即是MAX6675周圍溫度與0℃實際參考值之間的差值。對于K型熱電偶, 電壓變化率為41μ/℃, 電壓可由線性公式Vout=(41μ/℃)×(tR-tAMB)來近似熱電偶的特性。上式中, Vout為熱電偶輸出電壓(mV), tR是測量點溫度,tAMB是周圍溫度。
(2)冷端補(bǔ)償
熱電偶的功能是檢測熱、冷兩端溫度的差值,熱電偶熱節(jié)點溫度可在0℃~+1023.75℃范圍變化。冷端即安裝MAX6675的電路板周圍溫度,比溫度在-20℃~+85℃范圍內(nèi)變化。當(dāng)冷端溫度波動時,MAX6675仍能精確檢測熱端的溫度變化。
(3) 熱補(bǔ)償
在測溫應(yīng)用中,芯片自熱將降低MAX6675溫度測量精度,誤大小依賴于MAX6675封裝的熱傳導(dǎo)性、安裝技術(shù)和通風(fēng)效果。為降低芯片自熱引起的測量誤差,可在布線時使用大面積接地技術(shù)提高M(jìn)AX6675溫度測量精度。
(4) 噪聲補(bǔ)償
MAX6675的測量精度對電源耦合噪聲較敏感。為降低電源噪聲影響,可在MAX6675的電源引腳附近接入1只0.1μF陶瓷旁路電容。
(5)測量精度的提高
熱電偶系統(tǒng)的測量精度可通過以下預(yù)防措施來提高:①盡量采用不能從測量區(qū)域散熱的大截面導(dǎo)線;②如必須用小截面導(dǎo)線,則只能應(yīng)用在測量區(qū)域,并且在無溫度變化率區(qū)域用擴(kuò)展導(dǎo)線;③避免受能拉緊導(dǎo)線的機(jī)械擠壓和振動;④當(dāng)熱電偶距離較遠(yuǎn)時,應(yīng)采用雙絞線作熱電偶連線;⑤在溫度額定值范圍內(nèi)使用熱電偶導(dǎo)線;⑥避免急劇溫度變化;⑦在嚴(yán)劣環(huán)境中,使用合適的保護(hù)套以保證熱電偶導(dǎo)線;⑧僅在低溫和小變化率區(qū)域使用擴(kuò)展導(dǎo)線;⑨保持熱電偶電阻的事件
(6) SPI串行接口
MAX6675采用標(biāo)準(zhǔn)的SPI串行外設(shè)總線與MCU接口,且MAX6675只能作為從設(shè)備。MAX6675 SO端輸出溫度數(shù)據(jù)的格式如圖3所示,MAX6675 SPI接口時序如圖4所示。MAX6675從SPI串行接口輸出數(shù)據(jù)的過程如下:MCU使CS變低并提供時鐘信號給SCK,由SO讀取測量結(jié)果。CS變低將停止任何轉(zhuǎn)換過程;CS變高將啟動一個新的轉(zhuǎn)換過程。一個完整串行接口讀操作需16個時鐘周期,在時鐘的下降沿讀16個輸出位,第1位和第15位是一偽標(biāo)志位,并總為0;第14位到第3位為以MSB到LSB順序排列的轉(zhuǎn)換溫度值;第2位平時為低,當(dāng)熱電偶輸入開放時為高,開放熱電偶檢測電路完全由MAX6675實現(xiàn),為開放熱電偶檢測器操作,T-必須接地,并使能地點盡可能接近GND腳;第1位為低以提供MAX6675器件身份碼,第0位為三態(tài)。

LCD12864顯示原理

在數(shù)字電路中,所有的數(shù)據(jù)都是以0和1保存的,對LCD控制器進(jìn)行不同的數(shù)據(jù)操作,可以得到不同的結(jié)果。對于顯示英文操作,由于英文字母種類很少,只需要8位(一字節(jié))即可。而對于中文,常用卻有6000以上,于是我們的DOS前輩想了一個辦法,就是將ASCII表的高128個很少用到的數(shù)值以兩個為一組來表示漢字,即漢字的內(nèi)碼。而剩下的低128位則留給英文字符使用,即英文的內(nèi)碼。
      那么,得到了漢字的內(nèi)碼后,還僅是一組數(shù)字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數(shù)字,但它的意義卻與數(shù)字的意義有了根本的變化,它是用數(shù)字的各位信息來記載英文或漢字的形狀,如英文的'A'在字模的記載方式如圖1所示:
圖1 “A”字模圖
      而中文的“你”在字模中的記載卻如圖2所示:
圖2 “你”字模圖
根據(jù)芯片的不同取模的方式不同,有多種取模方式:單色點陣液晶字模,橫向取模,字節(jié)正序,單色點陣液晶字模,橫向取模,字節(jié)倒序,單色點陣液晶字模,縱向取模,字節(jié)正序,單色點陣液晶字模,縱向取模,字節(jié)倒序等等。
1.2    總體設(shè)計方案
本系統(tǒng)采用的是K型熱電偶采集溫度,因此本設(shè)計有溫度采集部分,數(shù)據(jù)處理部分,溫度顯示部分,故障顯示并顯示部分組成。AT89S52單片機(jī)以及單片機(jī)的外圍電路由晶振電路,復(fù)位電路,溫度采集電路,溫度顯示電路,報警電路組成。系統(tǒng)設(shè)計框圖如下:
系統(tǒng)框圖
溫度采集部分
先使用K型熱電偶對環(huán)境溫度進(jìn)行檢查,再經(jīng)過K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675,進(jìn)行溫度轉(zhuǎn)換,將環(huán)境溫度轉(zhuǎn)換成12位二進(jìn)制數(shù)據(jù)采集進(jìn)單片機(jī),以便單片機(jī)進(jìn)行數(shù)據(jù)處理。在本系統(tǒng)中,由于是4路溫度采集,因此使用串行的方式,依次對4路溫度進(jìn)行采集,并用單片機(jī)的P2口來傳輸與反饋數(shù)據(jù)。
數(shù)據(jù)處理部分
利用算法,在單片機(jī)中對采集到的數(shù)據(jù)進(jìn)行處理,并轉(zhuǎn)換成百、十、個位通過P0口進(jìn)行輸出。
溫度顯示部分
通過調(diào)用LCD的顯示函數(shù),將溫度以兩行的方式實時地顯示在LCD上。
超限報警部分
通過軟件算法,檢測4路的溫度是否超出人體正常體溫,一旦超過這個范圍,則進(jìn)行報警,并在LCD上顯示“發(fā)燒”,并且同時通過蜂鳴器以及LED燈,來進(jìn)行聲光報警。當(dāng)檢測到熱電偶出現(xiàn)斷耦時,在LCD上顯示“斷耦”,并且同時通過點亮對應(yīng)的LED燈進(jìn)行報警。

2         系統(tǒng)硬件設(shè)計2.1    信號采集電路2.1.1     傳感器
  該部分為四路溫度采集,采用K型熱電偶與K型熱電偶數(shù)模轉(zhuǎn)換器-MAX6675互相搭配的方式,如下圖所示:
  以其中一路為例,MAX6675的冷熱接收端分別于熱電偶的冷熱端相連,其串行數(shù)據(jù)輸出端分別與單片機(jī)的P2口相連。
    Maxim公司新近推出的MAX6675是一復(fù)雜的單片熱電偶數(shù)字轉(zhuǎn)換器, 內(nèi)部具有信號調(diào)節(jié)放大器、12位的模擬數(shù)字化熱電偶轉(zhuǎn)換器、冷端補(bǔ)償傳感和校正、數(shù)字控制器、1個SPI兼容接口和1個相關(guān)的邏輯控制。MAX6675內(nèi)部集成有冷端補(bǔ)償電路;帶有簡單的3位串行SPI接口;可將溫度信號轉(zhuǎn)換成12位數(shù)字量,溫度分辨率達(dá)0.25℃;內(nèi)含熱電偶斷線檢測電路。冷端補(bǔ)償?shù)臏囟确秶?20℃~80℃,它的溫度分辨能力為0. 25 ℃,可以測量0℃~1023.75℃的溫度,工作電壓為3. 0~5. 5V。 MAX6675的主要特性如下: ①簡單的SPI串行口溫度值輸出; ②0℃~+1024℃的測溫范圍; ③12位0.25℃的分辨率; ④片內(nèi)冷端補(bǔ)償; ⑤高阻抗差動輸入; ⑥熱電偶斷線檢測; ⑦單一+5V的電源電壓; ⑧低功耗特性; ⑨工作溫度范圍-20℃~+85℃; ⑩2000V的ESD信號。
該器件采用8引腳SO帖片封裝。引腳排列如圖1所示,引腳功能如下表所列。
為了正確使用MAX6675芯片,設(shè)計時還必須注意以下幾點:
(1)利用輸出數(shù)據(jù)中的D2進(jìn)行斷偶檢測時,熱電偶的輸入負(fù)極T·必須接地,且應(yīng)盡可能地靠近MX6675的引腳地(即PIN1)
(2)由于冷端溫度是由MAX6675本身檢測的因此為了提髙測量的精確度電路板的地線盡可能地大;
(3)由于熱電偶信號為微弱信號,因此要盡可能地釆取措施防止噪聲千擾。可在MAX675電源與地線之間接個0.1uF的陶瓷電容。
以下是具體電路:這里只給出一路

2.2    單片機(jī)系統(tǒng)電路
AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。   
主要特性:
1、與MCS-51 兼容 2、4K字節(jié)可編程閃爍存儲器 3、1000寫/擦循環(huán)數(shù)據(jù)保留時間10年  4、全靜態(tài)工作,0Hz-24Hz·三級程序存儲器鎖定  5、128*8位內(nèi)部RAM32可編程I/O線  6、兩個16位定時器/計數(shù)器  7、5個中斷源 8、可編程串行通道低功耗的閑置和掉電模式  9、片內(nèi)振蕩器和時鐘電路
主要管腳說明:
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。
P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
   以下是單片機(jī)系統(tǒng)的電路圖:
2.3    人機(jī)交互電路
通過蜂鳴器和4顆紅色LED可以判斷被檢測者體溫是否發(fā)熱。當(dāng)體溫狀況是大于37.1℃即發(fā)燒時,蜂鳴器響,四顆LED燈亮,LCD顯示發(fā)燒者的溫度;人員可以通過SOUND和STOP/RESET來控制蜂鳴器和檢測是否暫停;電源指示燈用來表示系統(tǒng)是否已經(jīng)通電;當(dāng)系統(tǒng)檢測斷耦時,四顆LED會對應(yīng)四個熱電偶,如果出現(xiàn)斷耦,對應(yīng)的LED會亮,LCD顯示屏上也會顯示“斷耦”字符。
以下是各個人機(jī)交換電路的設(shè)計圖:
2.4    溫度顯示電路
該部分是通過LCD進(jìn)行對溫度數(shù)據(jù)的顯示其使能端與P3口相連,數(shù)據(jù)輸入端與P0口相連,如下圖所示是仿真軟件中的電路:
下圖所示是實際電路中的設(shè)計,使用的是一個2.54間距20Pin的排針插座:
附系統(tǒng)原理圖:
3         仿真電路及硬件分析
仿真系統(tǒng)使用Protues 8 Professional軟件進(jìn)行仿真。仿真電路可以分為主控模塊、溫度采集模塊、溫度顯示模塊、聲光警報模塊和按鍵模塊。溫度采集模塊使用四顆K型熱電偶和四顆MAX6675芯片,聲光報警系統(tǒng)使用一個蜂鳴器和四個紅色LED,主控模塊主要采用AT89C51芯片,溫度顯示模塊使用一塊不帶中文字庫的LCD12864顯示屏,按鍵模塊由兩個帶鎖開關(guān)組成。
進(jìn)過仿真測試,各個功能可以達(dá)到設(shè)計的要求。MAX6675的分辨率為0.25℃,在模擬中,可以測試出在此誤差條件下,改測量系統(tǒng)對溫度的采集符合設(shè)計要求。

仿真圖1:系統(tǒng)開機(jī)初始界面:
仿真圖2:正常測體溫,未發(fā)現(xiàn)發(fā)熱狀況
仿真圖3:正常測體溫,發(fā)現(xiàn)發(fā)熱狀況,并發(fā)出聲光報警
仿真圖4:正常測體溫,1路采集發(fā)生斷耦,未發(fā)現(xiàn)發(fā)熱狀況,并發(fā)出光警報
4         系統(tǒng)軟件設(shè)計4.1    軟件設(shè)計思路
程序開始后,先初始化LCE12864顯示屏,在開機(jī)界面顯示“歡迎使用 智能溫度 檢測系統(tǒng) 深圳大學(xué)”的文字,延時一定時間后進(jìn)行清屏工作。
下面進(jìn)入while循環(huán)。讀取存儲四個MAX6675芯片上測量的K型熱電偶的溫度值并進(jìn)行標(biāo)度轉(zhuǎn)換,并且根據(jù)MAX6675輸出數(shù)據(jù)上的D2位是否置1來判斷是否短線,如果短線,則將輸出數(shù)據(jù)置0,并且在熱電偶對應(yīng)的LED長亮,由此來判斷哪只電偶出現(xiàn)斷線。由于MAX6675的轉(zhuǎn)換時間的典型值是0.17s,最大值是0.22s,所以在轉(zhuǎn)換時,要加入一定時間的延遲。然后將標(biāo)度轉(zhuǎn)換后的溫度數(shù)據(jù)在LCD顯示屏上顯示出。此時對4路溫度進(jìn)行判斷,如果測量的體溫已經(jīng)大于37.1℃則說明被測者已經(jīng)發(fā)熱,37.3-38℃是低燒,38.1-40℃是高燒。此時,儀器產(chǎn)生聲光警報,暫停測量,引入2個外部按鍵開關(guān)中斷,如果STOP/RESET按鍵置低電位,則繼續(xù)測量,置高電位表示保持暫停轉(zhuǎn)態(tài),方便人員進(jìn)行數(shù)據(jù)記錄; 如果SOUND按鍵置低電位,表示關(guān)閉蜂鳴器。如果在測量的過程中未發(fā)現(xiàn)發(fā)熱狀況,人員也可以對STOP/RESET按鍵置低電位,來暫停測量,對SOUND按鍵置低電位,表示關(guān)閉蜂鳴器。
4.2    程序流程圖
4.3    主要程序代碼數(shù)據(jù)獲取部分
由于MAX6675采用的是12位二進(jìn)制的串行數(shù)據(jù)輸出的方式,而且,其有效的數(shù)據(jù)分別在3~~14位,因此需要進(jìn)行串行數(shù)據(jù)的移位操作,MAX6675最大數(shù)值為1023.75,而AD精度為12位,即2的12次方為4096,轉(zhuǎn)換對應(yīng)數(shù),故要除4(*0.25)。轉(zhuǎn)換公式是:實際溫度=Temp_1*0.25-24.1。以下為部分軟件算法:
/***********************************************************
函數(shù)名稱:Re_Convert_1()
函數(shù)功能:讀取第一顆MAX6675芯片上的原始數(shù)據(jù)
入口參數(shù):
出口參數(shù):溫度Temp_1
***********************************************************/
float Re_Convert_1()
{
              uchar i;
              int cut_off_flag = 1;
  unsigned int Temp_1;
  Temp_1=0;
  CS=1;
  SCK=0;
  _nop_();
              _nop_();

  CS=0;
  for(i=0;i<16;i++) //獲取16位MSB
   {
                            Temp_1<<=1; //sck置低
                   _nop_();
                   SCK=1;
       if(SO1==1)//取當(dāng)前值
                                          {
                                             Temp_1=Temp_1|0x01;
                                          }
                   else
                                                        Temp_1=Temp_1|0x00;
                   _nop_();                                                                                                     
       SCK=0;
                   _nop_();
   }
              cut_off_flag = (Temp_1>>2)&0x0001;  //當(dāng)斷耦時,D2位置1
              if(cut_off_flag == 1) //斷偶標(biāo)志是 0的話,斷開
                            {
                                          flag1 = 0;
                            }            
                            else  flag1 = 1;
              Temp_1=Temp_1<<1;              //去掉第15位
   Temp_1=Temp_1>>4;              //去掉第0~2位
  return(Temp_1);     
}
以上算法把數(shù)據(jù)左移移一位,然后再右移四位,從而得到完整的12位二進(jìn)制溫度數(shù)據(jù)。

數(shù)據(jù)顯示部分
LCD上的漢字以及數(shù)據(jù),都需要使用相應(yīng)的字模軟件來對漢字和數(shù)據(jù)進(jìn)行編碼,并存儲在相應(yīng)的數(shù)組中,通過相應(yīng)的函數(shù)調(diào)用,將所需顯示的數(shù)據(jù),按照相應(yīng)的格式顯示在LCD上,以下為部分軟件算法:
漢字顯示函數(shù):
void Display_HZ(uchar screen,uchar page,uchar column,uchar *p)
{
              uchar i;
              SelectScreen(screen);
              Set_page(page);                                                                      //寫上半頁:16*8
              Set_column(column*16);                                           //控制列
              for(i=0;i<16;i++)                                                          //控制16列的數(shù)據(jù)輸出,左右各64個點,可顯示4個漢字
              {
                            write_LCD_data(p);                             //漢字的上半部分
              }
              Set_page(page+1);                                                        //寫下半頁:16*8
              Set_column(column*16);                                          //控制列
    for(i=0;i<16;i++)                                                        //控制16列的數(shù)據(jù)輸出
              {
                            write_LCD_data(p[i+16]);              //漢字的下半部分
              }
}
數(shù)字顯示函數(shù):
void Display_ASCII(uchar screen,uchar page,uchar column,uchar *p)  //左右各64個點,可顯示8個字符
{
              uchar i;
              SelectScreen(screen);
              Set_page(page);
              Set_column(column);
              for(i=0;i<8;i++)                                          //顯示字符上半部分:8*8
              {
                            write_LCD_data(p);
              }
              Set_page(page+1);                                          //顯示字符下半部分:8*8
              Set_column(column);
              for(i=0;i<8;i++)
              {
                            write_LCD_data(p[i+8]);
              }
}
調(diào)用方式如下:
Display_HZ(1,0,2,huan);
Display_HZ(1,0,3,ying);
Display_ASCII(1,0,0*8,shuzi[10]);
Display_ASCII(1,0,1*8,shuzi[1]);

以下為LCD顯示測量溫度函數(shù)部分:(以1路為例)
void Disp_temp()
{
   temp1=(int)(wendu1*10);
  if(wendu1)
{
  fen1=temp1%10;
  temp1=temp1/10;
  ge1=temp1%10;
  shi1=temp1/10;
  Display_ASCII(1,0,5*8,shuzi[fen1]);
  Display_ASCII(1,0,3*8,shuzi[ge1]);
  Display_ASCII(1,0,2*8,shuzi[shi1]);
}
else if(wendu1==0)
{
  Display_ASCII(1,0,5*8,shuzi[0]);
  Display_ASCII(1,0,3*8,shuzi[0]);
  Display_ASCII(1,0,2*8,shuzi[0]);
}
Display_HZ(1,0,0,fuhao_1);
    Display_ASCII(1,0,4*8,shuzi[13]);
   Display_HZ(1,0,3,fuhao_ssd);
}

斷耦檢測函數(shù)
如果熱電偶發(fā)生斷耦標(biāo)志位wendu=1,則LED長亮。
void cut_off_flag()
{
                if(flag1 == 0)
                            {
                                          LED1 = 1;            
      wendu1 = 0;
     Display_HZ(1,6,3,duan);
                            Display_HZ(2,6,0,ou);                                         
                            }                                         
                                         
    if(flag2==0)
                            {
                                                        LED2 = 1;
                    wendu2 = 0;
                            Display_HZ(1,6,3,duan);
                            Display_HZ(2,6,0,ou);            
                            }            
                           
    if(flag3==0)
                            {
                                                        LED3 = 1;
                                wendu3= 0;
     Display_HZ(1,6,3,duan);
                            Display_HZ(2,6,0,ou);            
                            }            
                           
    if(flag4==0)
                            {
                                                        LED4 = 1;
                                            wendu4 = 0;
     Display_HZ(1,6,3,duan);
                            Display_HZ(2,6,0,ou);            
                            }                                         
}

發(fā)燒檢測函數(shù)
如果四個熱電偶其中有一個檢測到發(fā)燒,則暫停檢測、LED長亮、蜂鳴器響、顯示字符“發(fā)燒xx.x℃”;按STOP/RESET鍵可復(fù)位重新進(jìn)行檢測。
void fever_check()//發(fā)燒檢測
{
                float wendu_H;
                int wenduH,fenH,geH,shiH;
                            if((wendu1<37.1) && (wendu2<37.1) && (wendu3<37.1) && (wendu4<37.1)) //檢測是否發(fā)燒
                            {
                                          SPEAKER = 0;//蜂鳴器不響,LED不亮
                                          LED1 = 0;
                                          LED2 = 0;
                                          LED3 = 0;
                                          LED4 = 0;
                            }
                            else
                            {
                                          if(SOUND == 0)  //外部按鍵中斷,蜂鳴器的控制
                                          {
                                                        SPEAKER =0;
                                          }
                                          else
                                            SPEAKER = 1;//蜂鳴器響
                                          LED1 = 1;//LED亮
                                          LED2 = 1;
                                          LED3 = 1;
                                          LED4 = 1;
                           
     if((wendu1-wendu2)>0.0001)
     {
                                          wendu_H = wendu1;
                            }
     else
     {
                                          wendu_H = wendu2;
                            }

     if((wendu_H<wendu3)>0.001)
     {
                                          wendu_H = wendu3;
                            }                                         
                           
     if((wendu_H<wendu4)>0.001)
     {
                                          wendu_H = wendu4;
                            }

     wenduH=(int)(wendu_H*10);
                                          fenH=wenduH%10;
                                          wenduH=wenduH/10;
                                          geH=wenduH%10;
                                          shiH=wenduH/10;
                                          Display_ASCII(1,4,6*8,shuzi[shiH]);
                                          Display_ASCII(1,4,7*8,shuzi[geH]);
                                Display_ASCII(2,4,0*8,shuzi[13]);
                                          Display_ASCII(2,4,1*8,shuzi[fenH]);            
                            Display_HZ(1,4,1,fa);
        Display_HZ(1,4,2,sao);
                            Display_HZ(2,4,1,fuhao_ssd);
                                          for(;STOP == 1;)  //當(dāng)檢測到發(fā)燒時,暫停
                                          {
                                                                      if(SOUND == 0)  //外部按鍵中斷,蜂鳴器的控制
                                                        {
                                                                      SPEAKER =0;
                                                        }
                                                        else
                                                                      SPEAKER = 1;//蜂鳴器響
                                          }
                                            ClearScreen(0);
                            }
                           
                            for(;STOP == 0;)  //外部按鍵中斷,暫停
                            {
                            }
}

實驗結(jié)果顯示
將實物連接起來后的PCB電路如下所示:
  圖5-1  實物圖-正面
圖5-1  實物圖-背面
6         附錄及元器件清單6.1    所用相關(guān)軟件
  • Keil——51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng)
  • ISIS——proteus仿真軟件
  • Altium——Altium Designer 9 PCB繪制軟件
圖6-1 本設(shè)計所用相關(guān)軟件
6.2    元器件清單
7         總結(jié)及體會
(寫下總結(jié)及體會,以及對授課方式等的意見和建議。)
剛開始對于體溫檢測傳感器的選擇,不是很正確,走了一下彎路。在老師指導(dǎo)后才知道使用熱電堆進(jìn)行體溫的檢測會更加準(zhǔn)確合理。在熱電偶的選擇上也是查閱了好多資料,對比現(xiàn)存的很多設(shè)計方案,從系統(tǒng)的復(fù)雜性、精確度和原件價格入手,采用了采用K型熱電偶與K型熱電偶模數(shù)轉(zhuǎn)換器—MAX6675的組合。顯示器上也使用了LCD12864,可以實現(xiàn)中英文顯示,使用方便。
確定好方案后,在對MAX6675的串行數(shù)據(jù)進(jìn)行Protues仿真讀取時,卻出現(xiàn)了很多小問題。MAX6675與單片機(jī)的通訊中,對片選和時鐘電平如果沒有適當(dāng)延時的話會出現(xiàn)錯誤的數(shù)據(jù),并且花費了很多時間才解決掉這一問題,同時出現(xiàn)的問題還有MAX6675芯片的輸出數(shù)據(jù)在Protues仿真和芯片數(shù)據(jù)手冊的輸出數(shù)據(jù)是不一樣的,這一點原先不知道,也是花費了很長時間才意識到Protues仿真得出的結(jié)果和實際結(jié)果存在幾十℃的偏差,這才解決掉輸出溫度誤差很大的問題。起初溫度數(shù)據(jù)的誤差大不正常還以為是時序有問題,修改了很多遍SPI通訊的代碼,在花費很長時間后才發(fā)現(xiàn)最初的代碼沒錯,而是Protues的問題。
在LCD12864上顯示數(shù)字和文字也出現(xiàn)了一個問題,本身代碼沒有問題,但是因為keil5的一個設(shè)置(Memory Model需要選擇Small,否則會出錯),會導(dǎo)致在代碼成功的條件下運行出錯,導(dǎo)致LCD顯示屏一直亂碼。也是花了一段時間梳理代碼,確保代碼沒出錯后,才解決問題。


全部資料51hei下載地址:
智能體溫檢測.7z (2.18 MB, 下載次數(shù): 266)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:418578 發(fā)表于 2020-6-27 14:01 | 只看該作者
為什么發(fā)不了圖片?????
回復(fù)

使用道具 舉報

板凳
ID:328014 發(fā)表于 2020-6-28 18:18 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

地板
ID:385637 發(fā)表于 2020-6-29 14:47 | 只看該作者
好資料,51黑有你更精彩。。!
回復(fù)

使用道具 舉報

5#
ID:385637 發(fā)表于 2020-6-29 15:20 | 只看該作者
可惜少了防真
回復(fù)

使用道具 舉報

6#
ID:418578 發(fā)表于 2020-6-29 15:43 | 只看該作者

仿真有
回復(fù)

使用道具 舉報

7#
ID:794582 發(fā)表于 2020-7-2 11:13 | 只看該作者
請問可以把直接幾個max6675的so并到單片機(jī)的一個i/o口上嗎
回復(fù)

使用道具 舉報

8#
ID:794377 發(fā)表于 2020-7-3 16:36 來自手機(jī) | 只看該作者
真的超級超級愛了
回復(fù)

使用道具 舉報

9#
ID:794377 發(fā)表于 2020-7-3 18:42 來自手機(jī) | 只看該作者
請問有你制作的這些的原件庫
回復(fù)

使用道具 舉報

10#
ID:695384 發(fā)表于 2020-7-6 16:33 | 只看該作者
你是不是害羞 發(fā)表于 2020-7-2 11:13
請問可以把直接幾個max6675的so并到單片機(jī)的一個i/o口上嗎

可以這做的
回復(fù)

使用道具 舉報

11#
ID:695384 發(fā)表于 2020-7-6 16:34 | 只看該作者
MAX6675要停產(chǎn)淘汰了,升級版是MAX31855

【MAX31855關(guān)鍵特性】
冷端補(bǔ)償
14位、0.25°C分辨率
轉(zhuǎn)換器的溫度分辨率為0.25°C,
溫度讀數(shù)為-270°C 至+1800°C,
對于K型熱電偶,在-200°C至+700°C溫度范圍內(nèi),保持±2°C精度。
提供K、J、N、T和E型熱電偶器件版本
簡單的SPI兼容接口(只讀)
檢測熱電偶對GND或VCC短路
檢測熱電偶開路
應(yīng)用
電器設(shè)備
汽車
HVAC
工業(yè)

【MAX6675關(guān)鍵特性】
冷端溫度補(bǔ)償
12位、0.25°C分辨率
可讀取溫度達(dá)0°C至+1024°C,
熱電偶在0°C至+700°C溫度范圍內(nèi)精度為8 LSB。
簡單的SPI兼容串行接口
熱電偶開路檢測
MAX6675采用小尺寸、8引腳SO封裝
應(yīng)用
電器設(shè)備
HVAC
工業(yè)

回復(fù)

使用道具 舉報

12#
ID:766589 發(fā)表于 2020-8-14 21:12 來自手機(jī) | 只看該作者
前輩您好,請問4個max6675的SO口可不可以接在一個單片機(jī)的IO口上呢?
回復(fù)

使用道具 舉報

13#
ID:766589 發(fā)表于 2020-8-14 21:20 來自手機(jī) | 只看該作者
前輩您好,我問一下4個max6675的SO口可不可以接在一個單片機(jī)的IO口上呢?
回復(fù)

使用道具 舉報

14#
ID:752974 發(fā)表于 2021-1-19 14:39 | 只看該作者
請問樓主,傳感器到底是使用熱電偶還是熱電堆?
回復(fù)

使用道具 舉報

15#
ID:140370 發(fā)表于 2021-9-8 10:46 | 只看該作者
watanoki_yuko 發(fā)表于 2020-8-14 21:12
前輩您好,請問4個max6675的SO口可不可以接在一個單片機(jī)的IO口上呢?

SO不是開漏的話應(yīng)該不行,SCLK可以共用。
回復(fù)

使用道具 舉報

16#
ID:97678 發(fā)表于 2021-9-8 11:55 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

17#
ID:382454 發(fā)表于 2021-11-15 17:48 | 只看該作者
學(xué)習(xí)了。謝謝樓主的無私分享。
回復(fù)

使用道具 舉報

18#
ID:38662 發(fā)表于 2022-3-24 11:17 | 只看該作者
謝謝!參考參考!買了MAX6675模塊試試。
回復(fù)

使用道具 舉報

19#
ID:965189 發(fā)表于 2022-9-17 11:15 | 只看該作者
好料,值得學(xué)習(xí)。謝謝樓主的分享。
回復(fù)

使用道具 舉報

20#
ID:496636 發(fā)表于 2022-9-17 13:09 | 只看該作者
MAX6675冷端溫度補(bǔ)償、熱電偶數(shù)字轉(zhuǎn)換器可進(jìn)行冷端溫度補(bǔ)償,并將K型熱電偶信號轉(zhuǎn)換成數(shù)字信號。數(shù)據(jù)輸出為12位分辨率、SPI兼容、只讀格式。[1]

轉(zhuǎn)換器溫度分辨率為0.25°C,可讀取溫度達(dá)+1024°C,熱電偶在0°C至+700°C溫度范圍內(nèi)精度為8 LSB。

MAX6675采用小尺寸、8引腳SO封裝。
精度不行啊,做體溫計。
熱電偶受冷端的影響,用補(bǔ)償方式模擬冷端,就會引入很大的誤差,如果你用在熱水器上,還是能用的,用在體溫計上,真的不行,用PT100傳感器做吧。
回復(fù)

使用道具 舉報

21#
ID:341416 發(fā)表于 2023-12-29 19:09 | 只看該作者
溫度差很多嗎?
回復(fù)

使用道具 舉報

22#
ID:302495 發(fā)表于 2024-12-2 16:03 | 只看該作者
謝謝朋友的資料共享
回復(fù)

使用道具 舉報

23#
ID:433219 發(fā)表于 2024-12-3 14:04 | 只看該作者
QQ820270087 發(fā)表于 2020-7-6 16:34
MAX6675要停產(chǎn)淘汰了,升級版是MAX31855

【MAX31855關(guān)鍵特性】

有國產(chǎn)的兼容 MAX31855  類似器件么???
回復(fù)

使用道具 舉報

24#
ID:1041200 發(fā)表于 2024-12-3 16:04 | 只看該作者
正在學(xué)習(xí)這個,要是STM32版本的就好了
回復(fù)

使用道具 舉報

25#
ID:1138642 發(fā)表于 2024-12-5 10:30 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品国产三级国产aⅴ无密码 | 久久国产精品免费一区二区三区 | 国产精品久久久久久久久久久久久久 | 久久免费精品视频 | www网站在线观看 | 久久av综合 | 久久国产综合 | 欧美xxxⅹ性欧美大片 | 久久久久国产 | 综合二区 | 人操人人| www.国产精 | 亚洲视频 欧美视频 | 日本不卡高字幕在线2019 | 国产黄色大片在线免费观看 | 午夜国产羞羞视频免费网站 | 玖玖国产精品视频 | 久久精品国产一区二区电影 | 日本在线免费看最新的电影 | 国产精品久久久久久久久免费高清 | 91精品久久久久久综合五月天 | 国产综合久久久久久鬼色 | 成在线人视频免费视频 | 综合激情av | 特级特黄特色的免费大片 | 中文字幕国产一区 | 国产一区二区在线视频 | 久久这里只有精品首页 | 久久草在线视频 | 亚洲精品91 | 91精品国产综合久久福利软件 | 国产精品一区二区av | 欧美在线观看免费观看视频 | 日韩精品成人网 | 久久久蜜桃 | 一级做a爰片性色毛片视频停止 | 亚洲综合在线一区二区 | 日韩精品成人 | 久久久久成人精品亚洲国产 | 日韩欧美三级电影在线观看 | 精品国产乱码久久久久久中文 |