欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

MLX90614 GY-906紅外測距單片機(jī)與ARDUINO源碼和資料下載

[復(fù)制鏈接]
ID:341332 發(fā)表于 2018-5-30 13:55 | 顯示全部樓層 |閱讀模式
內(nèi)含ARDUINO與51單片機(jī)CODE.
GY-906紅外測距電路原理圖如下:
0.png

MLX90614系列紅外測溫模塊的原理及應(yīng)用
南京航空航天大學(xué)  曾德志
摘要:  MLX90614 系列模塊是一組通用的紅外測溫模塊。在出廠前該模塊已進(jìn)行校驗(yàn)及線性化,具有非接觸、體積小、精度高,成本低等優(yōu)點(diǎn)。被測目標(biāo)溫度和環(huán)境溫度能通過單通道輸出,并有兩種輸出接口,適合于汽車空調(diào)、室內(nèi)暖氣、家用電器、手持設(shè)備以及醫(yī)療設(shè)備應(yīng)用等。本文以MLX90614AAA為例介紹其原理和應(yīng)用。

1 引言
一般來說,測溫方式可分為接觸式和非接觸式,接觸式測溫只能測量被測物體與測溫傳感器達(dá)到熱平衡后的溫度,所以響應(yīng)時(shí)間長,且極易受環(huán)境溫度的影響;而紅外測溫是根據(jù)被測物體的紅外輻射能量來確定物體的溫度,不與被測物體接觸,具有影響動(dòng)被測物體溫度分布場,溫度分辨率高、響應(yīng)速度快、測溫范圍廣、不受測溫上限的限制、穩(wěn)定性好等特點(diǎn),近年來在家庭自動(dòng)化、汽車電子、航空和軍事上得到越來越廣泛的應(yīng)用。

2  測溫原理概述
物體紅外輻射能量的大小和波長的分布與其表面溫度關(guān)系密切。因此,通過對(duì)物體自身紅外輻射的測量,能準(zhǔn)確地確定其表面溫度,紅外測溫就是利用這一原理測量溫度的。紅外測溫器由光學(xué)系統(tǒng)、光電探測器、信號(hào)放大器和信號(hào)處理及輸出等部分組成。光學(xué)系統(tǒng)匯聚其視場內(nèi)的目標(biāo)紅外輻射能量,視場的大小由測溫儀的光學(xué)零件及其位置確定。紅外能量聚焦在光電探測器上并轉(zhuǎn)變?yōu)橄鄳?yīng)的電信號(hào)。該信號(hào)經(jīng)過放大器和信號(hào)處理電路,并按照儀器內(nèi)的算法和目標(biāo)發(fā)射率校正后轉(zhuǎn)變?yōu)楸粶y目標(biāo)的溫度值。 PWM 的全稱是 Pulse Width Modulation(脈沖寬度調(diào)制)即通過調(diào)節(jié)脈沖的周期、寬度,以達(dá)到變壓、變頻的目的,數(shù)字式脈寬調(diào)制方式中,數(shù)字是控制信號(hào),通過改變高低電平數(shù)的比值達(dá)到改變占空比的目的,PWM 控制電路在開關(guān)穩(wěn)壓電源、不間斷電源(UPS)以及直流電機(jī)調(diào)速,交流電機(jī)變頻調(diào)速等控制電路中有著廣泛應(yīng)用。
   SMBus (System Management Bus,)是 1995 年由intel 公司提出的一種高效同步串行總線,SMBus 只有兩根信號(hào)線:雙向數(shù)據(jù)線和時(shí)鐘信號(hào)線,容許 CPU 與各種外圍接口器件以串行方式進(jìn)行通信、交換信息,即可以提高傳輸速度也可以減小器件的資源占用,另外即使在沒有SMBus 接口的單片機(jī)上也可利用軟件進(jìn)行模擬。
Melexis 公司生產(chǎn)的 MLX90614 系列測溫模塊是應(yīng)用非常方便的紅外測溫裝置,其所有的模塊都在出廠前進(jìn)行了校驗(yàn),并且可以直接輸出線性或準(zhǔn)線性信號(hào),具有很好的互換性,免去了復(fù)雜的校正過程。
     該模塊以 81101 熱電元件作為紅外感應(yīng)部分。輸出是被測物體溫度(TO)與傳感器自身溫度(Ta)共同作用的結(jié)果,理想情況下熱電元件的輸出電壓為:

其中溫度單位均為 Kelvin,A為元件的靈敏度常數(shù)。
目標(biāo)溫度和環(huán)境溫度由 81101 內(nèi)置的熱電偶測定測量,從 81101 中輸出的兩路溫度信號(hào)分別經(jīng)內(nèi)部 MLX90302 器件上高性能、低噪聲的斬波穩(wěn)態(tài)放大器放大再經(jīng)一個(gè) 17-bit 的模數(shù)轉(zhuǎn)換器(ADC)和強(qiáng)大的數(shù)字信號(hào)處理(DSP)單元后輸出。  
該系列模塊的溫度解析度可達(dá) 0.01°C,體積小巧,被測目標(biāo)和環(huán)境溫度能通過單通道(由 MLX90302 內(nèi)的狀態(tài)機(jī)控制)輸出,有兩種輸出方式:PWM 輸出、可編程 SMBus 輸出,適于多種應(yīng)用環(huán)境,下面以 MLX90614 為例,重點(diǎn)介紹其特性和使用方法。

通過 SMBus 編程可以更改模塊 EEPROM 內(nèi)的預(yù)設(shè)值并按照應(yīng)用要求進(jìn)行配置,并可以讀出 EEPROM 內(nèi)的配置信息;還可以讀出模塊 RAM 內(nèi)溫度等數(shù)據(jù)。  
MLX90614有適用于 3伏和 5 伏電源操作的兩種類型。由于3 伏型其小于 2 毫安的電流消耗,它非常適用于手提裝置和電池動(dòng)力裝置。為此,傳感器也具有一個(gè)節(jié)能“休眠”模式,此時(shí)電流消耗可低于 2 毫安。對(duì)于 12 伏汽車電池直接供電的情況,5 伏型包含的電子部件可與幾個(gè)外部元件一起在較高電壓下運(yùn)行。
3 MLX90614簡介
3.1 MLX90614 管腳
0.png

單片機(jī)源程序如下:
  1. #include"at89x52.h"
  2. #include"intrins.h"
  3. //************************************
  4. #define  uint  unsigned int
  5. #define  uchar unsigned char
  6. #define  Nack_counter  10
  7. //************** 端口定義**************
  8. //LCD 控制線接口
  9. uchar flag1;
  10. sbit  RS=P0^7;
  11. sbit  RW=P0^6;
  12. sbit  LCDE=P0^5;
  13. //mlx90614 端口定義
  14. sbit  SCL=P1^6;// 時(shí)鐘線
  15. sbit  SDA=P1^7;// 數(shù)據(jù)線
  16. //************ 數(shù)據(jù)定義****************
  17. bdata uchar flag;//可位尋址數(shù)據(jù)
  18. sbit bit_out=flag^7;
  19. sbit bit_in=flag^0;
  20. uchar DataH,DataL,Pecreg;
  21. //************ 函數(shù)聲明*****************************************
  22. void   start_bit();                 //MLX90614 發(fā)起始位子程序
  23. void   stop_bit();                 //MLX90614發(fā)結(jié)束位子程序
  24. uchar  rx_byte(void);              //MLX90614 接收字節(jié)子程序
  25. void   send_bit(void);             //MLX90614發(fā)送位子程序
  26. void   tx_byte(uchar dat_byte);     //MLX90614 接收字節(jié)子程序
  27. void   receive_bit(void);           //MLX90614接收位子程序
  28. void   delay(uint N);              //延時(shí)程序
  29. uint   memread(void);             // 讀溫度數(shù)據(jù)
  30. void   init1602(void);        //LCD 初始化子程序
  31. void   chk_busy_flg(void);         //LCD 判斷忙子程序
  32. void   dis_cmd_wrt(uchar cmd);     //LCD 寫命令子程序
  33. void   dis_dat_wrt(uchar dat);       //LCD 寫數(shù)據(jù)子程序
  34. void   display(uint Tem);           // 顯示子程序
  35. //*************主函數(shù)*******************************************
  36. void main()
  37. {
  38. uint Tem;
  39. //函數(shù)部分
  40. SCL=1;SDA=1;_nop_();
  41. _nop_();_nop_();_nop_();
  42. SCL=0;
  43. delay(1000);
  44. SCL=1;
  45. init1602();
  46. while(1)
  47. {
  48.    Tem=memread();
  49.    display(Tem);
  50.    delay(20);
  51. }
  52. }
  53. //*********輸入轉(zhuǎn)換并顯示*********
  54. void display(uint Tem)
  55. {
  56. uint T,a,b;
  57. T=Tem*2;
  58.   dis_cmd_wrt(0x01);//清屏
  59. if(T>=27315)
  60. {
  61.    T=T-27315;
  62.    a=T/100;
  63.    b=T-a*100;
  64. //---------------------------
  65.    if(a>=100)
  66.    {
  67.     dis_dat_wrt(0x30+a/100);
  68.     a=a%100;
  69.     dis_dat_wrt(0x30+a/10);
  70.     a=a%10;
  71.     dis_dat_wrt(0x30+a);
  72.    }
  73.    else if(a>=10)
  74.    {
  75.     dis_dat_wrt(0x30+a/10);
  76.     a=a%10;
  77.     dis_dat_wrt(0x30+a);
  78.    }
  79.    else
  80.    {
  81.     dis_dat_wrt(0x30+a);
  82.    }
  83.    dis_dat_wrt(0x2e);// 顯示點(diǎn)
  84.    //---------------------------
  85.   if(b>=10)
  86.   {
  87.     dis_dat_wrt(0x30+b/10);
  88. //    b=b%10;
  89. //    dis_dat_wrt(0x30+b);
  90.   }
  91.   else
  92.   {
  93.     dis_dat_wrt(0x30);
  94. //    dis_dat_wrt(0x30+b);
  95.   }
  96. }
  97. //==========
  98. else
  99. {
  100.   T=27315-T;
  101.   a=T/100;
  102.     b=T-a*100;
  103.   dis_dat_wrt(0x2d);
  104. //--------------------------
  105.   if(a>=10)
  106.   {
  107.     dis_dat_wrt(0x30+a/10);
  108.     a=a%10;
  109.     dis_dat_wrt(0x30+a);
  110.   }
  111.   else
  112.   {
  113.     dis_dat_wrt(0x30+a);
  114.   }
  115.   dis_dat_wrt(0x2e);//顯示點(diǎn)
  116. //--------------------------
  117.   if(b>=10)
  118.   {
  119.     dis_dat_wrt(0x30+b/10);
  120.     b=b%10;
  121.     dis_dat_wrt(0x30+b);
  122.   }
  123.   else
  124.   {
  125.     dis_dat_wrt(0x30);
  126.     dis_dat_wrt(0x30+b);
  127.   }
  128. }
  129. }

  130. //************************************
  131. void   start_bit(void)
  132. {
  133.    SDA=1;
  134.    _nop_();_nop_();_nop_();_nop_();_nop_();
  135.    SCL=1;
  136.    _nop_();_nop_();_nop_();_nop_();_nop_();
  137.    SDA=0;
  138.    _nop_();_nop_();_nop_();_nop_();_nop_();
  139.    SCL=0;
  140.    _nop_();_nop_();_nop_();_nop_();_nop_();

  141. }
  142. //------------------------------
  143. void   stop_bit(void)
  144. {

  145.    SCL=0;
  146.    _nop_();_nop_();_nop_();_nop_();_nop_();
  147.    SDA=0;
  148.    _nop_();_nop_();_nop_();_nop_();_nop_();
  149.    SCL=1;
  150.    _nop_();_nop_();_nop_();_nop_();_nop_();
  151.    SDA=1;
  152. }
  153. //--------- 發(fā)送一個(gè)字節(jié)---------
  154. void  tx_byte(uchar dat_byte)
  155. {
  156.    char i,n,dat;
  157.    n=Nack_counter;
  158. TX_again:
  159.    dat=dat_byte;
  160.    for(i=0;i<8;i++)
  161.    {
  162.      if(dat&0x80)
  163.       bit_out=1;
  164.      else
  165.       bit_out=0;
  166.      send_bit();
  167.      dat=dat<<1;
  168.    }
  169.    
  170.       receive_bit();
  171.    if(bit_in==1)
  172.    {
  173.     stop_bit();
  174.     if(n!=0)
  175.     {n--;goto Repeat;}
  176.     else
  177.      goto exit;
  178.    }
  179.    else
  180.     goto exit;
  181. Repeat:
  182.     start_bit();
  183.     goto TX_again;
  184. exit: ;
  185. }
  186. //-----------發(fā)送一個(gè)位---------
  187. void  send_bit(void)
  188. {
  189.   if(bit_out==0)
  190.   
  191.        SDA=0;
  192.   else
  193.      SDA=1;
  194.   _nop_();
  195.   SCL=1;
  196.   _nop_();_nop_();_nop_();_nop_();
  197.   _nop_();_nop_();_nop_();_nop_();
  198.   SCL=0;
  199.   _nop_();_nop_();_nop_();_nop_();
  200.   _nop_();_nop_();_nop_();_nop_();
  201. }
  202. //---------- 接收一個(gè)字節(jié)--------
  203. uchar rx_byte(void)
  204. {
  205.   uchar i,dat;
  206.   dat=0;
  207.   for(i=0;i<8;i++)
  208.   {
  209.     dat=dat<<1;
  210.     receive_bit();
  211.     if(bit_in==1)
  212.      dat=dat+1;
  213.   }
  214.   send_bit();
  215.   return dat;
  216. }

  217. //---------- 接收一個(gè)位----------
  218. void receive_bit(void)
  219. {
  220.   SDA=1;bit_in=1;
  221.   SCL=1;
  222.   _nop_();_nop_();_nop_();_nop_();
  223.   _nop_();_nop_();_nop_();_nop_();
  224.   bit_in=SDA;
  225.   _nop_();
  226.   SCL=0;
  227.   _nop_();_nop_();_nop_();_nop_();
  228.   _nop_();_nop_();_nop_();_nop_();
  229. }
  230. //------------ 延時(shí)--------------
  231. void   delay(uint N)
  232. {
  233.   uint i;
  234.   for(i=0;i<N;i++)
  235.   
  236.      _nop_();
  237. }
  238. //------------------------------
  239. uint memread(void)
  240. {
  241.   start_bit();
  242.   tx_byte(0xB4);  //Send SlaveAddress ==============================
  243.   //tx_byte(0x00);
  244.   tx_byte(0x07);  //Send Command
  245.   //------------
  246.   start_bit();
  247.   tx_byte(0x01);
  248.   bit_out=0;
  249.   DataL=rx_byte();
  250.   bit_out=0;
  251.   DataH=rx_byte();
  252.   bit_out=1;
  253.   Pecreg=rx_byte();
  254.   stop_bit();
  255.   return(DataH*256+DataL);
  256. }
  257. //******************LCD 顯示子函數(shù)***********************
  258. void init1602(void)        // 初始化LCD
  259. {
  260.    dis_cmd_wrt(0x01);
  261.    dis_cmd_wrt(0x0c);
  262.    dis_cmd_wrt(0x06);
  263.    dis_cmd_wrt(0x38);
  264.    
  265.    }

  266. void chk_busy_flg(void) //LCD 忙標(biāo)志判斷
  267. {
  268.    flag1=0x80;
  269.   while(flag1&0x80)
  270. {
  271.    P2=0xff;
  272.    RS=0;
  273.    RW=1;
  274.    LCDE=1;
  275. ……………………

  276. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

0.png

所有資料51hei提供下載:

GY-906資料.rar (2.26 MB, 下載次數(shù): 105)


回復(fù)

使用道具 舉報(bào)

ID:343923 發(fā)表于 2018-6-3 21:19 | 顯示全部樓層
你好!我想問一下這個(gè)GY906 和單個(gè)MLX90614的區(qū)別在哪里?使用還是要加上拉電阻還是怎樣呢?新人求解!
回復(fù)

使用道具 舉報(bào)

ID:212262 發(fā)表于 2018-11-25 22:00 | 顯示全部樓層
同樓上,想問GY906和MLX90614區(qū)別
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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