基于無線溫度控制系統(tǒng)硬件介紹:
該設(shè)計(jì)采用51單片機(jī)STC89C52控制DS18B20實(shí)現(xiàn)的無線溫度控制系統(tǒng)。通過簡(jiǎn)單的無線通信協(xié)議,實(shí)現(xiàn)可靠性與功耗平衡。該系統(tǒng)能實(shí)現(xiàn)對(duì)溫度的測(cè)量,同時(shí)還可以進(jìn)行溫度的設(shè)定,是可以實(shí)現(xiàn)遠(yuǎn)程控制的無線溫度控制系統(tǒng)。無線傳輸采用nRF24L01模塊傳輸。 該硬件電路設(shè)計(jì)主要分為三部分:主機(jī)和從機(jī)以及語音模塊。 具體如下: 從機(jī):由溫度傳感器DS18B20,STC89C52單片機(jī)和nRF24L01無線射頻模塊,以及LCD1602液晶顯示模塊和驅(qū)動(dòng)模塊、繼電器等組成。 主機(jī):由STC89C52單片機(jī),nRF24L01無線射頻模塊,LCD12864液晶模塊、電源穩(wěn)壓等組成。 語音模塊:主要基于ISD1720設(shè)計(jì),外接揚(yáng)聲器。
無線溫度控制原理圖與pcb(包含主機(jī)從機(jī)和ISD1720語音模塊):
無線領(lǐng)域的總結(jié),1、注意微機(jī)之間的通信,2、選擇接受通道,3、設(shè)置工作通道頻率
4、接收通道選擇和發(fā)送通道相同有效數(shù)據(jù)寬度5、發(fā)射速率、功耗功能設(shè)置
6、CRC使能,16位CRC校驗(yàn),上電,模式選擇
單片機(jī)源程序如下(部分內(nèi)容預(yù)覽):
- //軟件調(diào)試第三個(gè)問題,ISD1720有二種工作模式,SPI模式,也就是用單片機(jī)直接控制,
- //獨(dú)立按鍵模式,直接用其外圍按鍵控制,剛做好硬件發(fā)現(xiàn)獨(dú)立按鍵模式工作不正常,
- //所以選擇SPI模式。對(duì)ISD1720定點(diǎn)錄好音后發(fā)現(xiàn)并不能實(shí)現(xiàn)連續(xù)放音,剛開始考慮到
- //可能是指令發(fā)送后1720沒有足夠的時(shí)間完成就收到了第二條指令才導(dǎo)致放音不連續(xù),
- //于是考慮用延時(shí),延時(shí)后發(fā)現(xiàn)可以把定點(diǎn)錄的音都播放出來,但是各段語音之間有停頓
- //不能實(shí)現(xiàn)無縫播放,語音聽起來很生硬,于是繼續(xù)查看芯片數(shù)據(jù)手冊(cè),對(duì)這一點(diǎn)并沒有介紹,
- //于是上網(wǎng)查SPI1720調(diào)試心得,發(fā)現(xiàn)ISD1720內(nèi)部有先進(jìn)先出數(shù)據(jù)緩沖器,F(xiàn)IFO是英文First
- //In First Out 的縮寫,是一種先進(jìn)先出的數(shù)據(jù)緩存器,這是一種傳統(tǒng)的按序執(zhí)行方法,
- //先進(jìn)入的指令先完成并引退,跟著才執(zhí)行第二條指令,并且ISD1720狀態(tài)寄存器第四位INT作用
- //是當(dāng)一個(gè)操作完成后被置1,可被CLR_INT清除。當(dāng)發(fā)送一次定點(diǎn)播放命令后,不斷地讀狀態(tài)寄
- //存器,判斷INT位是否為1,若不是繼續(xù)讀狀態(tài)寄存器,再判讀,當(dāng)INT為1時(shí),用CLR_INT清楚,
- //緊接著發(fā)送第二條定點(diǎn)播放指令,至此實(shí)現(xiàn)了定點(diǎn)語音的無縫播放
- if(temperature ==tempwant )
- {
- TxBuf[1] =0x07;//當(dāng)溫度相同時(shí),自動(dòng)發(fā)送停止降溫或加熱指令
- tf = 1 ;
- }
- if(tf ==1 )
- {
- TX_Mode(TxBuf);
- delay_ms(20);
- TX_Mode(TxBuf);
- delay_ms(20);
- TX_Mode(TxBuf);//采用連發(fā),為的是擔(dān)心從機(jī)工作在發(fā)送模式,而接不到指令
- delay_ms(20);
- Check_ACK(1); // 等待發(fā)送完畢,清除TX FIFO
- tf = 0 ; //自動(dòng)跳出發(fā)射狀態(tài)
- delay_ms(100);
- RX_Mode(); // 設(shè)置為接收模式
- }
- }
- //軟件調(diào)試第二個(gè)問題,當(dāng)調(diào)試NRF24L01通信時(shí)發(fā)現(xiàn)程序多次進(jìn)入進(jìn)入死循環(huán),經(jīng)查資料發(fā)現(xiàn),
- //NRF24L01不能同時(shí)工作在發(fā)送接收二種狀態(tài),因?yàn)樗前腚p工通信。雖然可以收也可以發(fā),
- //但是收的時(shí)候不能發(fā),發(fā)的時(shí)候不能收,這種通信方式可以實(shí)現(xiàn)雙向的通信,但不能在
- //兩個(gè)方向上同時(shí)進(jìn)行,必須輪流交替地進(jìn)行。也就是說,通信信道的每一段都可以是發(fā)送端,
- //也可以是接收端。但同一時(shí)刻里,信息只能有一個(gè)傳輸方向。
- /**************************************************
- 函數(shù):main()
- 描述:
- 主函數(shù)
- /**************************************************/
- void main(void)
- {
- init();//初始化液晶
- pitcure(table_t);//開機(jī)圖片
- delay(1000);
- SID_Init();//ISD1720初始化
- delay(500);
- ISD_set_play(0X7E,0X00,0X9E,0X00);//播放開機(jī)音樂
- ISD_set_play(0X6D,0X00,0X6D,0X00);
- //軟件調(diào)試第四個(gè)問題:開機(jī)音樂不能實(shí)現(xiàn)正常播放,當(dāng)下載程序的時(shí)候,
- //開機(jī)音樂正常播放,斷電后再接通,開機(jī)音樂不播放,其中有一個(gè)細(xì)節(jié)性的問題,
- //就是下載程序時(shí)ISD1720有足夠的時(shí)間初始化,由于再錄音的時(shí)候使用了定點(diǎn)刪除,
- //導(dǎo)致錄音沒有遵從1720內(nèi)部環(huán)形存儲(chǔ)體系,導(dǎo)致1720自檢需要很長(zhǎng)的時(shí)間,
- //改進(jìn)辦法:當(dāng)接通電源后,在1720開機(jī)音樂定點(diǎn)播放命令前面放入開機(jī)圖片,
- //以此代替延時(shí),使1720初始化完全后再給其發(fā)送開機(jī)音樂定點(diǎn)播放命令。
- write_com(0x01);//清屏
- init_io(); // NRF24L01初始化IO
- TX_Mode(); // 設(shè)置為發(fā)射模式
- RX_Mode();
- while(1)
- {
- display();
- display_state();
- key(); // 按鍵掃描
- if(tf ==0 )
- {
- sta = SPI_Read(STATUS); // 讀狀態(tài)寄存器
- //if(RX_DR) 判斷是否接受到數(shù)據(jù)
- SPI_Read_Buf(RD_RX_PLOAD, RxBuf, TX_PLOAD_WIDTH);
- // 從RX FIFO讀出數(shù)據(jù)
- SPI_RW_Reg(WRITE_REG + STATUS, sta); //接收到數(shù)據(jù)后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標(biāo)志
- }
- }
- }
復(fù)制代碼
函數(shù):FS()
軟件調(diào)試第二個(gè)問題,當(dāng)調(diào)試NRF24L01時(shí)發(fā)現(xiàn)程序多次進(jìn)入進(jìn)入死循環(huán),它是半雙工通信。雖然可以收也可以發(fā),但是收的時(shí)候不能發(fā),發(fā)的時(shí)候不能收,這種通信方式可以實(shí)現(xiàn)雙向的通信,但不能在兩個(gè)方向上同時(shí)進(jìn)行,必須輪流交替地進(jìn)行。也就是說,通信信道的每一段都可以是發(fā)送端,也可以是接收端。但同一時(shí)刻里,信息只能有一個(gè)傳輸方向。在此設(shè)置
主機(jī)軟件
② 源程序
無線溫度控制主機(jī)程序,包括三大模塊,12864,NRF24L01,ISD1720,此程序在調(diào)試時(shí)出現(xiàn)三大難題,一:NRF24L01是單收單發(fā)行器件,不能同時(shí)工作在既發(fā)射有接收狀態(tài),為此必須做以下調(diào)整,主機(jī):一直工作在接受狀態(tài),當(dāng)有按鍵被按下時(shí)進(jìn)入發(fā)射狀態(tài),同時(shí)停止接受,當(dāng)發(fā)射結(jié)束后,自動(dòng)跳出,進(jìn)入接受狀態(tài);
從機(jī):用標(biāo)志位循環(huán)工作在發(fā)射接受狀態(tài),當(dāng)發(fā)射結(jié)束后,自動(dòng)定義標(biāo)志位使其進(jìn)入接受狀態(tài),然后再跳出接收狀態(tài),進(jìn)入發(fā)射狀態(tài),如此循環(huán)。二:在isd1720定點(diǎn)播放時(shí)要想實(shí)現(xiàn)無縫連接需要讀狀態(tài)寄存器,判斷ISD1720返回的信號(hào)是否上一個(gè)指令已經(jīng)完成,每次定點(diǎn)錄音后1720會(huì)自動(dòng)在語音結(jié)尾加EOM標(biāo)志,所以錄音時(shí)不應(yīng)全部錄完然后再查找所需要的語音,應(yīng)單個(gè)錄音,三:應(yīng)調(diào)試發(fā)現(xiàn)ISD1720反應(yīng)比較慢所以要想實(shí)現(xiàn)開機(jī)音樂必須在主程序中加3秒延時(shí),使語音芯片有足夠的時(shí)間初始化,等待SPI指令的到來。
經(jīng)驗(yàn)及教訓(xùn):1、學(xué)習(xí)一個(gè)新型原器件時(shí)應(yīng)該反復(fù)琢磨芯片使用說明書,查看別人的學(xué)習(xí)新的體會(huì),2、其中重要的是狀態(tài)寄存器和微機(jī)之間的通信,3、單片機(jī)高電平時(shí)輸出電流小于10個(gè)ma,低電平時(shí)大概為30~40MA,NRF24L01正常工作單片機(jī)輸出電流應(yīng)小于10個(gè)MA,否則容易燒毀模塊,一般采用2K電阻限流。待續(xù)
軟件介紹: 無線溫度控制主機(jī)程序,包括三大模塊,12864,NRF24L01,ISD1720。此程序在調(diào)試時(shí)出現(xiàn)三大難題。 1、NRF24L01是單收單發(fā)行器件,不能同時(shí)工作在既發(fā)射有接收狀態(tài)。為此必須做以下調(diào)整主機(jī),一直工作在接受狀態(tài)。當(dāng)有按鍵被按下時(shí)進(jìn)入發(fā)射狀態(tài),同時(shí)停止接受,當(dāng)發(fā)射結(jié)束后,自動(dòng)跳出,進(jìn)入接受狀態(tài)。從機(jī)用標(biāo)志位循環(huán)工作在發(fā)射接受狀態(tài),當(dāng)發(fā)射結(jié)束后,自動(dòng)定義標(biāo)志位使其進(jìn)入接受狀態(tài),然后再跳出接收狀態(tài),進(jìn)入發(fā)射狀態(tài),如此循環(huán)。 2、在isd1720定點(diǎn)播放時(shí)要想實(shí)現(xiàn)無縫連接需要讀狀態(tài)寄存器,判斷ISD1720返回的信號(hào)是否上一個(gè)指令已經(jīng)完成,每次定點(diǎn)錄音后1720會(huì)自動(dòng)在語音結(jié)尾加EOM標(biāo)志,所以錄音時(shí)不應(yīng)全部錄完然后再查找所需要的語音,應(yīng)單個(gè)錄音。 3、應(yīng)調(diào)試發(fā)現(xiàn)ISD1720反應(yīng)比較慢所以要想實(shí)現(xiàn)開機(jī)音樂必須在主程序中加3秒延時(shí),使語音芯片有足夠的時(shí)間初始化,等待SPI指令的到來。
附件內(nèi)容包括: 無線溫度控制系統(tǒng)完整硬件設(shè)計(jì)原理圖和PCB源文件(包括主機(jī)和從機(jī)以及語音模塊); C語言源代碼(有詳細(xì)的中文注釋); 材料清單;
所有資料51hei提供下載:
基于51單片機(jī)無線溫度控制系統(tǒng)完整項(xiàng)目設(shè)計(jì)開源.zip
(1.37 MB, 下載次數(shù): 124)
2017-12-7 23:08 上傳
點(diǎn)擊文件名下載附件
|