找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5866|回復(fù): 3
收起左側(cè)

基于單片機(jī)設(shè)計(jì)的讀取K型感溫頭并控制強(qiáng)電設(shè)備的系統(tǒng)

[復(fù)制鏈接]
ID:209219 發(fā)表于 2017-6-8 15:36 | 顯示全部樓層 |閱讀模式
溫度傳感器種類繁多,在學(xué)校比較常用DS18B20,DTH11,做些簡(jiǎn)單室溫檢測(cè)。后來逐漸接觸到一些工業(yè)級(jí)的溫感,前些時(shí)間做過一個(gè)NTC型感溫頭的控制系統(tǒng),溫度的變化引起電阻的變化,這就需要用AD轉(zhuǎn)化測(cè)出阻值,利用函數(shù)公式求溫度,或者利用查詢法測(cè)出溫度,感覺略顯麻煩,不過NTC有NTC的優(yōu)勢(shì)。最近主要是在用K型感溫頭來做實(shí)驗(yàn),關(guān)于各種感溫頭的優(yōu)勢(shì)和劣勢(shì),大家可以去百度看看。好了,話不多說,上圖,上程序:

/*
功能:自動(dòng)檢測(cè)溫度,開機(jī)加熱20分,進(jìn)入恒溫75℃±2℃,
      按鍵k4----強(qiáng)制加熱
          具有未放置加熱鍋提示、感溫頭損壞或未連接提示、
          加熱狀態(tài)和恒溫狀態(tài)自動(dòng)切換和手動(dòng)切換等功能   
         
修改時(shí)間:17/6/3
*/

0.png 0.png 0.png

原理圖和PCB圖如下:
QQ截圖20170608153252.png QQ截圖20170608153145.png

單片機(jī)源程序:
  1. #include <REGX52.H>
  2. #include "intrins.h"
  3. #include "dingyi.c"

  4. void main()
  5. {
  6.         TIMER_INIT();                        //定時(shí)器初始化
  7.         
  8.         while(1)
  9.         {               
  10.                 anjian();                //按鍵掃描        
  11.                 temp=Re_Convert();        // 熱電偶數(shù)據(jù)讀取,返回溫度
  12.                 Temp_Change();            //加熱狀態(tài)切換
  13.         }
  14. }



  15. void t0_time() interrupt 1           //定時(shí)中斷
  16. {
  17.   TH0=(65536-48000)/256;// 給高8位賦值
  18.   TL0=(65536-48000)%256;//給低8位賦值
  19.   num++;
  20.   if(num==10)
  21.   {
  22.     num=0;
  23.     miao--;
  24.         led=0;
  25.         if(miao<=0)
  26.         {
  27.           miao=60;
  28.           fen--;
  29.           if(fen<0)                 //加熱時(shí)間到,則關(guān)閉加熱,關(guān)閉定時(shí)器 ,切換到恒溫狀態(tài)
  30.           {
  31.                   TR0=0;
  32.                   led=1;
  33.                   jiare=1;
  34.                   biaozhi=1;
  35.                   delay(10);                 
  36.           }
  37.     }
  38.   }

  39. }

  40. //********************************************************//



  41. #define  uint unsigned int
  42. #define uchar unsigned char
  43. sbit SCK=P1^7;
  44. sbit CS =P1^6;
  45. sbit SO =P1^5;         //MAX6675接口

  46. sbit led=P1^0;
  47. sbit k4 =P3^3;         //強(qiáng)制加熱按鍵
  48. sbit jiare=P3^2; //加熱控制繼電器

  49. uint temp,m,c=0;
  50. uchar num,Flag_connect;
  51. char fen=10,miao=0;
  52. uchar biaozhi=0;

  53. uint Re_Convert();
  54. void anjian();
  55. void Temp_Change();
  56. void TIMER_INIT();
  57. uint Re_Convert(); //熱電偶數(shù)據(jù)讀取,返回溫度

  58. void delay(uint x)
  59. {
  60.         uint i,j;
  61.         for(i=x;i>0;i--)
  62.           for(j=440;j>0;j--);
  63. }


  64. void TIMER_INIT()
  65. {
  66.         TH0=(65536-50000)/256;// 給高8位賦值
  67.     TL0=(65536-50000)%256;//給低8位賦值
  68.     TMOD=0X01;// 設(shè)置T0工作方式為1,定時(shí)模式
  69.         TR0=1;//  開始定時(shí)器0
  70.     ET0=1;// 開始定時(shí)器0中斷
  71.         EA=1;

  72.         led=0;
  73.         jiare=0;  //加熱開
  74. }


  75. void anjian()          //按鍵掃描
  76. {
  77.         if(k4==0)                                 //強(qiáng)制加熱
  78.         {
  79.                   delay(10);
  80.                 if(k4==0)
  81.                 {
  82.                    while(k4==0)
  83.                    {
  84.                                    delay(10);
  85.                                 m++;                                
  86.                    }
  87.                    if(m>=200)
  88.                         {
  89.                                 biaozhi=2;
  90.                                 m=0;
  91.                         }
  92.                         if(m>0&&m<200)
  93.                         {
  94.                            m=0;
  95.                            biaozhi++;
  96.                            if(biaozhi>=2)
  97.                            biaozhi=0;
  98.                         }
  99.                 }
  100.         }
  101.         
  102. }

  103. void Temp_Change()           //加熱狀態(tài)切換
  104. {

  105.         if(Flag_connect==0)          //判斷k型熱電偶是否連接
  106.         {
  107.                 if(temp<=220)           //判斷加熱盤溫度是否過高,即是否放鍋        
  108.                 {
  109.                         if(biaozhi==0)                   //加熱狀態(tài)
  110.                         {
  111.                           led=0;
  112.                           jiare=0;          //加熱開
  113.                           TR0=1;          //定時(shí)器開
  114.                         }

  115.                         if(biaozhi==1)                 //恒溫狀態(tài)
  116.                         {
  117.                           TR0=0;          //定時(shí)器關(guān)                  
  118.                       miao=0;                          
  119.                       fen=10;          //加熱時(shí)間復(fù)位
  120.                           if(temp>=80)
  121.                           {
  122.                                   jiare=1;        //加熱關(guān)
  123.                                 
  124.                           }
  125.                           else               
  126.                           {
  127.                                   if(temp<=75)
  128.                                 {
  129.                                   jiare=0;          //加熱開
  130.                                 }
  131.                           }
  132.                           delay(180);
  133.                           c++;
  134.                           if(c>=5)
  135.                           {                          
  136.                                 led=~led;
  137.                                 c=0;
  138.                           }
  139.                         }
  140.                         if(biaozhi==2)
  141.                         {
  142.                                 led=1;
  143.                                 jiare=1;
  144.                         }                        
  145.                 }
  146.                 else                         //        加熱盤溫度是過高,
  147.                 {
  148.                         led=1;
  149.                         jiare=1;        //加熱關(guān)閉
  150.                 }
  151.         }
  152.    else          //Flag_connect為1表示 熱電偶未連接,
  153.    {
  154.                     led=1;
  155.                         jiare=1;        //加熱關(guān)閉
  156.         }        
  157. }

  158. uint Re_Convert() //熱電偶數(shù)據(jù)讀取,返回溫度
  159. {
  160.         unsigned char i;   
  161.         unsigned int dat;
  162.          
  163.         i   = 0;   
  164.         dat = 0;
  165.         CS  = 1;
  166.         _nop_();   
  167.         
  168.         CS  = 0;
  169.         _nop_();
  170.         _nop_();
  171.         SCK = 0;     
  172.         _nop_();
  173.         for(i=0; i<16; i++)                //get D15-D0 from 6675  
  174.         {      
  175.                 SCK = 1;   
  176.                 dat = dat<<1;
  177.                   
  178.                 if( SO==1 )   
  179.                         dat = dat|0x01;
  180.                 else
  181.                     dat=dat|0x00;
  182.                           
  183.                 SCK = 0;
  184.                 _nop_();   
  185.         }
  186.         CS = 1;
  187.         Flag_connect=dat&0x04;                         //讀出數(shù)據(jù)的D2位是熱電偶掉線標(biāo)志位,該位為1表示掉線,
  188.                                             //該位為0表示連接
  189.     Flag_connect=Flag_connect>>2;         //MAX6675是否在線
  190.         
  191.         dat = dat<<1;                                                   //讀出來的數(shù)據(jù)的D3~D14是溫度值
  192.     dat = dat>>4;
  193.     dat = dat/4;                                                //測(cè)得的溫度單位是0.25,所以要乘以0.25
  194.         return dat;   

  195. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-6-8 17:34 | 顯示全部樓層
絕對(duì)好資料啊,樓主能分享下頭文件嗎?最好傳個(gè)工程壓縮包啊
回復(fù)

使用道具 舉報(bào)

ID:209219 發(fā)表于 2017-6-9 08:20 | 顯示全部樓層
admin 發(fā)表于 2017-6-8 17:34
絕對(duì)好資料啊,樓主能分享下頭文件嗎?最好傳個(gè)工程壓縮包啊

#include <REGX52.H>、#include "intrins.h"這兩個(gè)KEil自帶。
#include "dingyi.c"已用分割符在文中區(qū)分開來了,后半部分就是。
回復(fù)

使用道具 舉報(bào)

ID:209219 發(fā)表于 2017-6-9 13:36 | 顯示全部樓層
匹配PCB板的程序

WN_CDG溫控板程序.rar

31.33 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表