XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

0 賣盤(pán)信息
BOM詢價(jià)
您現(xiàn)在的位置: 首頁(yè) > 電子資訊 >技術(shù)信息 > 基于溫度的MAXQ2000單片機(jī)風(fēng)扇控制辦法(MAX1407 DS1920)

基于溫度的MAXQ2000單片機(jī)風(fēng)扇控制辦法(MAX1407 DS1920)

來(lái)源: hqbuy
2024-02-26
類別:技術(shù)信息
eye 3
文章創(chuàng)建人 拍明芯城

憑借其眾多功能,MAXQ2000可以創(chuàng)建許多有用的應(yīng)用,例如通過(guò)脈寬調(diào)制(PWM)控制風(fēng)扇的速度。MAXQ2000的眾多功能包括其具有PWM和串行外設(shè)接口(SPI )的定時(shí)器以及1線 功能。本應(yīng)用筆記描述了MAXQ2000如何通過(guò)PWM實(shí)時(shí)驅(qū)動(dòng)風(fēng)扇并改變其速度。這個(gè)過(guò)程需要使用Maxim的另一款產(chǎn)品,MAX1407多通道數(shù)據(jù)采集系統(tǒng)(DAS)。利用SPI, MAXQ2000可以與MAX1407(包含16位數(shù)字轉(zhuǎn)換器[ADC]和數(shù)字轉(zhuǎn)換器[DAC])通信。作為使用熱敏電阻的替代方案,MAXQ2000的1-Wire總線主機(jī)可以與溫度一起使用按鈕(DS1920)。本應(yīng)用程序說(shuō)明中使用的源代碼可下載。

概述

該程序運(yùn)行在MAXQ2000評(píng)估套件(Rev. B)上,借助溫度按鈕(DS1920),或外部熱敏電阻。MAXQ2000評(píng)估套件(Rev. B)包括一個(gè)LCD顯示器,兩個(gè)按鈕,一個(gè)MAX1407 ADC,兩個(gè)uart,三個(gè)定時(shí)器,1線和許多其他功能。該程序使用LCD顯示,按鈕和MAX1407或1-Wire來(lái)檢測(cè)溫度。此外,還需要一個(gè)直流風(fēng)扇和適用的驅(qū)動(dòng)電路,一個(gè)熱敏電阻和一個(gè)電源。MAXQ2000評(píng)估套件將驅(qū)動(dòng)外部電路來(lái)控制風(fēng)扇速度。液晶顯示屏顯示當(dāng)前溫度,并定期從攝氏到華氏變化。按鈕允許用戶改變風(fēng)扇的低速和全速溫度閾值。

檢測(cè)溫度的默認(rèn)方法是通過(guò)使用按鈕,但如果正確按鈕不可用或通信有問(wèn)題,程序使用熱敏電阻通過(guò)MAXQ2000的SPI來(lái)獲得溫度值。的按鈕(DS1920)是一個(gè)溫度傳感1線器件。該程序使用RL1005-5744-103-SA熱敏電阻與MAX1407結(jié)合使用。

一旦溫度被讀取,顯示被發(fā)送到LCD, PWM占空比根據(jù)溫度變化進(jìn)行調(diào)整。

程序中有最低溫度和最高溫度兩個(gè)閾值,如果溫度低于最低溫度閾值,則風(fēng)扇關(guān)閉;如果溫度高于最高溫度閾值,風(fēng)扇將被設(shè)置為最高轉(zhuǎn)速。如果溫度介于最小閾值和最大閾值之間,則速度與兩個(gè)溫度閾值之間的分?jǐn)?shù)距離成正比。

這兩個(gè)閾值可以通過(guò)標(biāo)記為SW4和SW5的兩個(gè)按鈕進(jìn)行配置。SW4將閾值切換為更改——基數(shù)或最大值。為變化選擇的閾值顯示在數(shù)值數(shù)據(jù)和C/F字符之間。下劃線表示將更改基本閾值,而overscore表示將更改最大閾值。SW5將當(dāng)前選擇的閾值增加1。每改變一個(gè)門(mén)限,系統(tǒng)會(huì)重新計(jì)算風(fēng)扇轉(zhuǎn)速。

這個(gè)應(yīng)用程序需要在MAXQ2000上使用三個(gè)定時(shí)器中的兩個(gè)。定時(shí)器1通過(guò)熱敏電阻定期檢查溫度,定時(shí)器0使用P6.5的PWM輸出來(lái)控制風(fēng)扇。定時(shí)器1不能用于PWM,因?yàn)樗哂信cMAX1407通信期間使用的硬件資源。

硬件設(shè)置


圖1 將熱敏電阻硬件連接到MAXQ2000評(píng)估套件。

首先,使用RL1005-5744-103-SA熱敏電阻和10k歐姆電阻構(gòu)建熱敏電阻設(shè)置。這是通過(guò)首先將J7引腳7和8連接到熱敏電阻的一側(cè)來(lái)完成的。在熱敏電阻的另一側(cè),從J7的引腳1連接一根電線。接下來(lái),連接J7的引腳1和接地(J2的引腳71或72是接地)之間的10k歐姆電阻。如果按鈕選項(xiàng)正在使用,然后是按鈕應(yīng)放在按鈕夾DS9094FS(或類似的東西),應(yīng)該焊接到電路板的1線部分。接下來(lái),通過(guò)切換SW6.2和SW6.5來(lái)啟用按鈕。LCD顯示器連接到J3。為了通過(guò)熱敏電阻讀取溫度,打開(kāi)所有SW3,使其能夠與MAX1407通信。MAX1407的ADC部分將來(lái)自熱敏電阻的信號(hào)轉(zhuǎn)換成可用于計(jì)算溫度的數(shù)字值。an的使用按鈕需要JU7和JU8和an上的跳線按鈕剪輯。


圖2 將PWM輸出連接到風(fēng)扇的可能硬件設(shè)置。

解釋軟件的定義和內(nèi)容

#define PWMFREQ 1000 //將此更改為所需的PWM頻率#define CPUFREQ 13500000 //將此更改為匹配當(dāng)前時(shí)鐘//頻率#define MIN_TICKS 0 //最小計(jì)時(shí)器滴答數(shù)//風(fēng)扇克服靜摩擦#define POLLING_INTERVAL 500 //溫度檢查之間的毫秒數(shù)//


以下是編譯時(shí)要檢查的一些基本定義:

#define LCD0_PATTERN_C 0x039#define LCD0_PATTERN_F 0x071#define lcd0_pattern_0 0x03F#define LCD_PATTERN_1 0x006#define LCD_PATTERN_2 0x05B#define LCD_PATTERN_4 0x066#define LCD_PATTERN_5 0x06D#define LCD_PATTERN_6 0x07D#define LCD_PATTERN_7 0x07F#define LCD_PATTERN_9 0x067int PATTERNS[] = {LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_4, LCD_PATTERN_5,LCD_PATTERN_6, LCD_PATTERN_7, LCD_PATTERN_8, LCD_PATTERN_9};


使用上述定義,數(shù)字的LCD顯示非常容易。LCD模式是預(yù)定義的,然后添加到一個(gè)名為patterns的數(shù)組中以供檢索。顯示某個(gè)數(shù)字非常簡(jiǎn)單,如下所示:

LCD2 = PATTERNS[desired_digit];

定時(shí)器1初始化

t2 = 0xFFFF - (CPUFREQ/128/1000*POLLING_INTERVAL);//設(shè)置重載值。T2r1 = t2v1;//設(shè)置當(dāng)前定時(shí)器值T2C1 = 0x00000;//設(shè)置比較值T2CFG1_bit。T2DIV = 7 //設(shè)置分割模式為除以128 T2CNA1_bit。Tr2 = 1;//啟動(dòng)定時(shí)器T2CNA1_bit。T2pol0 = 1;//設(shè)置極性高T2CNA1_bit。Et2 = 1;//使能定時(shí)器中斷T2CNB1_bit。T2oe1 = 1;//打開(kāi)定時(shí)器輸出IMR_bit。Im4 = 1;//啟用模塊4的中斷


定時(shí)器1負(fù)責(zé)定期檢查溫度。初始值(T2V1)取決于溫度輪詢之間的毫秒時(shí)間長(zhǎng)度(POLLING_INTERVAL)。計(jì)算在兩個(gè)不同的行上完成的原因是為了防止值變得太大而使寄存器無(wú)法處理。T2R1指定定時(shí)器到達(dá)65,535時(shí)返回的值。T2C1被設(shè)置在重新加載值(T2R0)以下,以確保它永遠(yuǎn)不會(huì)產(chǎn)生中斷。T2CFG1是配置許多定時(shí)器選項(xiàng)的寄存器。定時(shí)器的時(shí)鐘劃分被設(shè)置為將系統(tǒng)時(shí)鐘除以128,這意味著每128個(gè)系統(tǒng)時(shí)鐘周期相當(dāng)于1個(gè)定時(shí)器周期。系統(tǒng)時(shí)鐘也可以被分割,然后將一個(gè)計(jì)時(shí)器周期的時(shí)間乘以(以2的冪)。T2CNA1是定時(shí)器0本身的寄存器。這將啟動(dòng)定時(shí)器運(yùn)行并啟用定時(shí)器中斷,而T2CNB1啟用定時(shí)器輸出。最后,啟用模塊4中的中斷。

定時(shí)器0初始化

T2V0 = 0xFFFF - (CPUFREQ / PWMFREQ);//設(shè)置當(dāng)前定時(shí)器值T2R0 = T2V0;//設(shè)置重載值T2C0 = T2R0+1;//設(shè)置比較值為加載值+1 T2CNA0_bit。t20e0 = 0;//關(guān)閉PWM輸出T2CNA0_bit。T2pol0 = 0;//改變PWM的極性,所以它開(kāi)始“關(guān)閉”T2CNA0_bit。t20e0 = 1;// T2CFG0 = 0x00;//設(shè)置定時(shí)器分割為1


下一個(gè)要初始化的項(xiàng)目是定時(shí)器0,它控制PWM,并通過(guò)它控制風(fēng)扇。定時(shí)器0是一個(gè)16位定時(shí)器,與定時(shí)器1完全相同。當(dāng)定時(shí)器達(dá)到比較值(即T2V0 == T2C0)時(shí),端口引腳狀態(tài)倒轉(zhuǎn)。當(dāng)定時(shí)器重新加載時(shí),端口引腳也反轉(zhuǎn)(圖3)。t2v0設(shè)置定時(shí)器的初始值,而T2R2設(shè)置重新加載值,兩者都設(shè)置為0xFFFF - (CPU頻率/ PWM頻率)。此計(jì)算用于使將代碼移植到具有不同CPU時(shí)鐘速度的系統(tǒng)或更改所需的PWM頻率更容易。


圖3 端口引腳圖。

子選項(xiàng)T2EO0確保PWM輸出關(guān)閉,以改變極性(T2POL0)。當(dāng)極性開(kāi)關(guān)設(shè)為0時(shí),則PWM的啟動(dòng)狀態(tài)為關(guān)斷;如上圖所示。T2CFG0確保定時(shí)器不分割系統(tǒng)時(shí)鐘,并告訴定時(shí)器比較T2V0和T2C0。

getadcng負(fù)責(zé)將信號(hào)轉(zhuǎn)換為數(shù)字值。從熱敏電阻中恢復(fù)溫度的步驟如下所示。

sendSPI (RD_ADC);//讀取1407的ADC寄存器spiData = sendSPI(0x0FF);spiData |= 0x01;//設(shè)置起始轉(zhuǎn)換位。sendSPI (WR_ADC);//將新值寫(xiě)回sendSPI(spiData);// 1407寄存器。do {sendSPI(RD_STAT);//讀取1407的狀態(tài)寄存器。spiData = sendSPI(0x0FF);} while((spiData &0x02) == 0x00);//位1表示AtoD轉(zhuǎn)換完成。sendSPI (RD_DATA);//發(fā)送命令讀取1407的數(shù)據(jù)寄存器。SPICF = 0x04;//設(shè)置SPI為16位模式。spiData = sendSPI(0x0FFFF);//讀取Data寄存器。SPICF = 0x00;//將SPI調(diào)回8位模式。返回spiData;

液晶初始化

/ / LCRA_bit。FRM = 7;//設(shè)置幀頻率。/ / LCRA_bit。LCCS = 1;//設(shè)置時(shí)鐘源為HF/128。/ / LCRA_bit。占空率= 0;//設(shè)置靜態(tài)占空比。/ / LCRA_bit。Lra = 0;//設(shè)置R-adj為0。/ / LCRA_bit。Lrigc = 1;//選擇外置LCD驅(qū)動(dòng)電源。LCRA = 0x03E0;//一次執(zhí)行所有配置更改。PCF = 0x0F;//設(shè)置所有段作為輸出。LCFG_bit。Opm = 1;//設(shè)置為正常運(yùn)行模式。LCFG_bit。Dpe = 1;//啟用顯示。LCD1 = 0x08;


為了顯示當(dāng)前的溫度,你必須打開(kāi)液晶顯示器。前五行代碼被注釋掉了,因?yàn)樗鼈儽粔嚎s成一條語(yǔ)句。LCRA是LCD調(diào)整寄存器,它控制LCD顯示設(shè)置。改變FRM設(shè)置幀頻率;有了這個(gè),你可以降低頻率和使用更少的功率。幀頻率是用于顯示在LCD上的電源頻率。LCCS將LCD時(shí)鐘劃分為128。Duty將顯示設(shè)置為靜態(tài),這意味著顯示輸出永遠(yuǎn)不會(huì)改變。LCFG是LCD配置寄存器。因?yàn)長(zhǎng)CD只需要顯示,將PCF更改為0x0F將LCD中的所有段設(shè)置為輸出。將OPM和DPE設(shè)置為1分別打開(kāi)LCD并使能顯示。LCD1 = 0x08顯示下劃線,表示按鈕將增加最小閾值。通過(guò)下面的兩行簡(jiǎn)單代碼,LCD顯示器現(xiàn)在處于活動(dòng)狀態(tài)并準(zhǔn)備顯示。

LCRA = 0x03E0;LCFG = 0xF3;


所有需要做的就是將值(如PATTERNS[digit]中的項(xiàng)目)加載到LCD寄存器中,這是非常快速和容易的。

初始化按鈕

EIE1 = 0x84;//啟用中斷15和10 EIES1 = 0x84;//設(shè)置邊緣過(guò)渡。Im1 = 1;//打開(kāi)模塊1的中斷


現(xiàn)在該初始化按鈕了。與按鈕綁定的中斷為10和15,對(duì)應(yīng)于EIE1(外部中斷啟用1)上的4和80(十六進(jìn)制)。EIE1啟用這些外部中斷,而EIES1(外部中斷邊緣選擇1)將中斷觸發(fā)器設(shè)置為下降沿(按下按鈕)。如果這被清除為零,釋放按鈕是觸發(fā)中斷的動(dòng)作。IMR是中斷掩碼寄存器,它跟蹤哪個(gè)模塊允許來(lái)自哪個(gè)模塊的中斷,IM1啟用來(lái)自模塊1的中斷。

按鈕中斷

按鈕允許用戶更改base_temp和max_temp閾值。SW4(中斷10)更改將要更改的閾值,而SW5(中斷15)將閾值增加1。如果max_temp值達(dá)到149,它會(huì)將自身降低為base_temp+1。如果base_temp比max_temp低1,則base_temp變?yōu)?0。

#pragma vector = 1__interrupt void pushButtonInterrupt {if (EIF1 &0x04) //中斷10 //修改閾值改變{if(last_state == 0) //修改max_temp而不是base_temp {LCD1 = 0x01;//更改顯示下劃線last_state = 1;} else //修改base_temp而不是max_temp {LCD1 = 0x08;Last_state = 0;//將顯示更改為overscore}}


"#pragma vector = 1"是一個(gè)編譯器指令,表示該函數(shù)處理來(lái)自模塊1的任何中斷,模塊1是外部中斷的來(lái)源。

pushButtonInterrupt函數(shù)首先檢查觸發(fā)了哪個(gè)中斷。中斷10為0x04,中斷15為0x80。如果它要更改閾值,那么它將更改切換并更新顯示。如果它是閾值增量器,則閾值增加1。如果閾值已達(dá)到其上限,則繞到下限。

if (EIF1 &0x80) //中斷15 //增加基本或最大溫度的閾值{if(last_state == 0){//增加base_temp if(base_temp <(max_temp -1)) {++base_temp;如果(base_temp比;LCD4 = 0x40) //如果大于99,則輸出100位的1;else LCD4 = 0;//否則不打印LCD3 = getLCDDigit((base_temp /10) %10);//打印10的數(shù)字LCD2 = getLCDDigit(base_temp %10);//打印1的數(shù)字}else if (base_temp == max_temp -1) //如果基本溫度將等于最大溫度{//將基本溫度設(shè)置為50而不是增加base_temp = 50;LCD3 = getLCDDigit(5);//打印50顯示LCD2 = getLCDDigit(0);}}


如果閾值被修改,它會(huì)檢查last_state的值。當(dāng)last_state為0時(shí),base_temp被修改;否則max_temp會(huì)被修改。如果base_temp正好比max_temp小1,程序?qū)ase_temp包裝為任意值50。

else if(last_state == 1) //增加max_temp {if(max_temp <149) {++max_temp;如果(max_temp比;99) LCD4 = 0x40;//顯示100位數(shù)字else LCD4 = 0;LCD2 = getLCDDigit(max_temp %10);//顯示LCD3 = getLCDDigit((max_temp / 10) %10);//顯示10s位}else {if (max_temp == 149) //如果max_temp為極限,則循環(huán)max_temp = base_temp+1;//如果(max_temp >99) LCD4 = 0x40;//清除100位數(shù)字否則LCD4 = 0;LCD2 = getLCDDigit(max_temp %10);//顯示LCD3 = getLCDDigit((max_temp / 10) %10);//顯示10s位}}xplier = ((CPUFREQ/PWMFREQ) / (max_temp - base_temp));//重新計(jì)算乘數(shù)}EIF1 = 0;//清除外部中斷標(biāo)志


按鈕中斷的這一部分改變了max_temp的閾值。它增加max_temp直到它等于149,然后它繞到比base_temp大1。如果base_temp是65,那么max_temp將是66。

新增加/包裝的值會(huì)在LCD上短暫顯示,這樣用戶就知道它已經(jīng)改變了。下一次計(jì)時(shí)器重新加載時(shí),LCD會(huì)變回溫度,并以溫度更新顯示。

閾值更改后,將重新計(jì)算xplier。xplier是決定T2C1值的乘數(shù)。在按鈕中斷完成之前,它清除EIF1(外部中斷標(biāo)志1),以便為下一個(gè)中斷做好準(zhǔn)備。

定時(shí)器1中斷

#pragma vector = 4 __interrupt void timer1Interrupt {T2CNA1_bit。Tr2 = 0;//停止計(jì)時(shí)器。if(++count == 20) //偶爾改變單位。{count = 0;攝氏= ~攝氏度;} readTemp  ;//獲取并顯示當(dāng)前溫度。T2CNB1_bit。Tf2 = 0;//清除溢出標(biāo)志。T2CNB1_bit。Tcc2 = 0;//清除溢出標(biāo)志。//輸出一個(gè)帶有第一個(gè)小數(shù)點(diǎn)的'alive'信號(hào),LCD0.7 if (count &1) LCD0 = LCD0 | 0x80;else LCD0 = LCD0 &0 x7f;T2CNA1_bit。Tr2 = 1;//啟動(dòng)定時(shí)器}


注意:如果定時(shí)器2也被使用,這個(gè)函數(shù)將運(yùn)行定時(shí)器2的中斷,因?yàn)槎〞r(shí)器2也位于模塊4。

將TR2設(shè)置為0將定時(shí)器關(guān)閉,然后檢查計(jì)數(shù)是否等于20。count用于定期將顯示從華氏溫度更改為攝氏溫度。readTemp 調(diào)用負(fù)責(zé)檢測(cè)溫度的函數(shù)。readTemp完成后,指示可能的計(jì)時(shí)器溢出的標(biāo)志(TF2和TCC2)被清除。if語(yǔ)句檢查計(jì)數(shù)實(shí)際上是在每次檢查溫度時(shí)創(chuàng)建一個(gè)“勾號(hào)”。這個(gè)“勾號(hào)”是啟用或禁用單位字符左邊的小數(shù)點(diǎn)。這有助于了解它檢查的頻率和速度,以及當(dāng)溫度保持不變時(shí)它正在運(yùn)行。最后,計(jì)時(shí)器再次啟動(dòng)。

功能

readTemp 函數(shù)負(fù)責(zé)讀取和顯示溫度,以及驅(qū)動(dòng)PWM。

if(re ButtonTemp(&temp)==FALSE) //檢查是否可以找到設(shè)備{//如果沒(méi)有找到iButton設(shè)備adc = getADCRe ng ;//讀取熱敏電阻值。= convertToTemp(adc);//將此值轉(zhuǎn)換為攝氏度。} showTemp(臨時(shí));//顯示溫度驅(qū)動(dòng)pwm (temp);//更新風(fēng)扇轉(zhuǎn)速


它做的第一件事是試圖從1-Wire或按鈕設(shè)備。如果沒(méi)有有效的1線溫度裝置或通信發(fā)生錯(cuò)誤,則使用熱敏電阻讀取溫度。一旦讀取溫度,通過(guò)調(diào)用showTemp函數(shù),LCD顯示將更新為最新的溫度。之后,drivePWM改變風(fēng)扇的轉(zhuǎn)速。

有關(guān)與1-Wire通信的更多信息和按鈕設(shè)備,請(qǐng)參閱1-Wire公共領(lǐng)域套件。這是一個(gè)軟件開(kāi)發(fā)工具包,包含用C編寫(xiě)的1-Wire API,并包括本應(yīng)用程序中使用的溫度示例。

浮點(diǎn)convertToTemp(unsigned int adc){double temp = -0.00135477 * (double)adc + 69.17;返回(浮動(dòng))臨時(shí);}


convertToTemp將MAX1407的溫度轉(zhuǎn)換為攝氏度。請(qǐng)注意,這個(gè)公式給出了室溫附近的近似值,并沒(méi)有補(bǔ)償熱敏電阻隨溫度的非線性變化。

無(wú)效showTemp(int temp){LCFG_bit。Dpe = 0;//禁用顯示。//清除除溫度單位(F或C)以外的所有顯示。LCD0 = ((celsius == 0) ?Lcd0_pattern_f: lcd0_pattern_c);//清除數(shù)字LCD1 = LCD2 = LCD3 = LCD4 = 0;if(last_state == 0) //顯示正在編輯的正確閾值LCD1 = 0x08;else LCD1 = 0x01;


showTemp函數(shù)所做的第一件事是將單位系統(tǒng)寫(xiě)入顯示器,然后通過(guò)將LCD寄存器設(shè)置為0來(lái)清除顯示器上的所有數(shù)字。然后顯示表示要通過(guò)按鈕編輯的閾值的下劃線或下劃線。

if(celsius == 0) {temp = CtoF(temp);//轉(zhuǎn)換為華氏溫度}if (temp >199) //如果溫度是200+ {temp = temp % 200;} if(temp >99) //如果溫度為100+ {show100s ;//在LCD上顯示一個(gè)'1'溫度-= 100;//調(diào)整溫度變量。} LCD3 = getLCDDigit(temp / 10);//顯示LCD上的十位LCD2 = getLCDDigit(temp % 10);//顯示LCFG_bit上的1位。Dpe = 1;//啟用顯示。


如果當(dāng)前的單位制是華氏溫度,則通過(guò)函數(shù)CtoF將溫度轉(zhuǎn)換為華氏溫度。如果溫度超過(guò)100,它將顯示100位數(shù)字的1,并在顯示器上顯示其他數(shù)字。

drivePWM是通過(guò)改變PWM比較值來(lái)設(shè)置風(fēng)扇功率的功能。

T2CNA0_bit。Tr2 = 0;//關(guān)閉定時(shí)器T2CNA0_bit。t20e0 = 0;//關(guān)閉PWM輸出T2CNA0_bit。T2pol0 = 0;//改變PWM的極性,使其從T2CNA0_bit開(kāi)始。t20e0 = 1;//使PWM輸出T2V0 = T2R0;//手動(dòng)重新加載定時(shí)器值


此順序關(guān)閉風(fēng)扇,然后手動(dòng)重新加載計(jì)時(shí)器值。下面,代碼設(shè)置了風(fēng)扇的實(shí)際速度。如果溫度低于base_temp閾值,則風(fēng)扇將設(shè)置在盡可能低的設(shè)置上,否則它將檢查溫度是否高于最大閾值,在這種情況下,風(fēng)扇將設(shè)置在最高設(shè)置上。最后,如果溫度在閾值之間,它會(huì)根據(jù)溫度計(jì)算風(fēng)扇的轉(zhuǎn)速。然后計(jì)時(shí)器被重新打開(kāi)。


圖4 頂部的輸出是正常的,而底部的跟蹤是可能的,如果計(jì)時(shí)器沒(méi)有停止和手動(dòng)重新加載。

在更新比較和重新加載值時(shí)禁用計(jì)時(shí)器,以避免無(wú)意中反轉(zhuǎn)輸出,這一點(diǎn)很重要。圖4顯示了兩種類型的輸出。頂部的輸出是正常的,而底部的圖形是可能的,如果計(jì)時(shí)器沒(méi)有停止并手動(dòng)重新加載。發(fā)生的情況是,新的比較值高于當(dāng)前計(jì)時(shí)器值,當(dāng)計(jì)時(shí)器最終達(dá)到新的比較值時(shí),端口引腳狀態(tài)反轉(zhuǎn),計(jì)時(shí)器繼續(xù)。然而,由于狀態(tài)的變化是不希望的,因此它具有反轉(zhuǎn)定時(shí)器輸出極性的效果。

if(temp <= base_temp) //低于此溫度風(fēng)扇關(guān)閉{//強(qiáng)制端口引腳P6.5低PO6 &= 0xDF;} else {if(temp >= max_temp) //超過(guò)此溫度風(fēng)扇全速運(yùn)行{//強(qiáng)制端口引腳P6.5高PO6 |= 0x20;} else //根據(jù)溫度設(shè)置風(fēng)扇轉(zhuǎn)速{T2C0 = 65535 - ((temp - base_temp) * xplier);if((65535 - T2C0) <Min_ticks) t2c0 = 65535 - Min_ticks;T2CNA0_bit。Tr2 = 1;//重啟定時(shí)器}}


高于base_temp閾值的每個(gè)度數(shù)都有自己的速度,這是基于所需的PWM占空比和兩個(gè)閾值之間的范圍。MIN_TICKS是定時(shí)器周期的最小數(shù)量,PWM輸出必須高,以便風(fēng)扇以最低速度運(yùn)行。隨著溫度的升高,風(fēng)扇轉(zhuǎn)速呈線性增加。只有當(dāng)閾值改變時(shí),速度的變化率才會(huì)改變。例如,base_temp和max_temp的默認(rèn)閾值分別為75和85。這意味著xplier(每度風(fēng)扇轉(zhuǎn)速的增加)是1350。如果閾值分別更改為75和90,則xplier將為900 -這意味著風(fēng)扇速度的每一度增加都會(huì)減少。導(dǎo)風(fēng)器越低,風(fēng)機(jī)增加越平穩(wěn)。

void main {initTimer1 ;//為熱敏電阻初始化timer1 /iButton輪詢initTimer0 ;//初始化PWM輸出timer0 init1407 ;//初始化1407 initOW ;//初始化1線子系統(tǒng)initLCD ;//初始化LCD顯示initPushButtons ;//初始化按鈕__enable_interrupt ;//啟用全局中斷while(1);}


main函數(shù)調(diào)用初始化函數(shù)并啟用全局中斷。程序本身是中斷驅(qū)動(dòng)的,因此它在中斷觸發(fā)之前一直處于while循環(huán)中。

結(jié)論

MAXQ2000是一款高性能微控制器,具有許多有用的功能。溫度驅(qū)動(dòng)的風(fēng)扇控制應(yīng)用是使用MAXQ2000的PWM, 1-Wire和SPI功能的一個(gè)很好的例子。當(dāng)這些功能與按鈕和LCD顯示器等交互元素結(jié)合在一起時(shí),可能的應(yīng)用程序的數(shù)量幾乎是無(wú)限的。


責(zé)任編輯:David

【免責(zé)聲明】

1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開(kāi)資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。

2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。

3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。

4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。

拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。

標(biāo)簽: MAXQ2000 MAX1407 DS1920

相關(guān)資訊

XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

          综合久久888| 少妇厨房愉情理伦bd在线观| jizzjizz中国少妇中文| 荫蒂添的喷水A片视频小说| 亚洲麻豆国产自偷在线| 久久人妻一区二区三区| 老熟妇毛片| 人人澡人人爽人人精品| 不卡av影院| 色情WWW.556在线观看| 娇小被黑人巨嗷嗷叫另类| 99国产精品久久久久99打野战| 成全视频在线观看免费完整| 天天综合天天做天天综合| 精品成人人妻av一区二区| 在线中文字幕一区二区| 国产无遮挡网站| 国产精品视频一二三四区| jizz jizz jizz12| 99精品一区二区| 人妻在夫旁边没忍住被按摩中出| 国产91亚洲| 亚洲av网站在线播放| 欧美激情精品久久久久| 人妻射精一区二区| 午夜免费福利视频| 一边摸一边抽搐一进一出视频| 精品久久久久久亚洲精品| 亚洲成人高清在线观看| 自慰无码一区二区三区| 日日夜夜超碰| 少妇av在线| 少妇被大狼拘躁| av总站| 91精品无人成人www| 色婷婷色综合| 伊人久久亚洲综合大香线蕉| 少妇美女极品美軳人人体潮| 久久久久久午夜精品| 国产免费一区二区三区四区| 欧美久久激情|