找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8551|回复: 8
打印 上一主题 下一主题
收起左侧

NTC热敏电阻温度Arduino采样程序

  [复制链接]
跳转到指定楼层
楼主
ID:510165 发表于 2019-4-12 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 硬件平台: Arduino UNO(ATMega328P);   2. 编译器(IDE): Arduino 1.88
3. 电路连接方式:+5V----10K上拉电阻----NTC(10K,B3950)----GND

单片机源程序如下:
  1. /************************************************************
  2.   Copyright (C), 2019-2019, xxxx Co., Ltd.
  3.   FileName:
  4.   Description:     // AD_NTC测试  
  5.   Version:         // 版本信息:1.0
  6.   Function List:   //
  7.    
  8. ************************************************************/

  9. // 硬件: Arduino UNO(ATMega328P);   编译器(IDE): Arduino 1.88
  10. #include <avr/pgmspace.h>
  11. #include <MsTimer2.h>

  12. #define RS232_DUBEG           //开启/关闭 串口调试

  13. /* ATMega328(比如UNO)有三个计时器timer 0-2, 一些延时语句比如delay(), millis() micros() 用的是timer0,
  14. 6个PWM输出脚当然也要用这些计时器,它们是这样分配的:
  15. Pins 5 and 6: timer0
  16. Pins 9 and 10: timer1
  17. Pins 11 and 3: timer2
  18. */

  19. #define PWM1_PIN       9          //3PIN PWMOUT
  20. #define PWM2_PIN       10         //5PIN PWMOUT
  21. #define AD_IN          A0         //电路连接方式:+5V----10K上拉电阻----NTC(10K,B3950)----GND

  22. #define NANO_LED       13         //NANO板载LED连接13脚




  23. //定义数据传输时间 (ATMega328P运行在16MHz下,一个时钟周期的时间为1/16,000,000s = 1/16,000m s= 1/16us = 62.5ns ,一个nop是62.5ns)
  24. #define NOP           asm("nop")


  25. boolean _1msFlg = 0;
  26. boolean bBlinkSta = 0;
  27. unsigned int uiAD_Value;
  28. unsigned char ucPWM_Value;
  29. char cNTC_Temp = 0;

  30. struct NTC_TEMP
  31. {
  32.         char cTemp;
  33.         unsigned int uiAD;
  34. };

  35. const struct NTC_TEMP NTC_Temp_Tab[] PROGMEM =    //电路连接方式:+5V----10K上拉电阻----NTC(10K,B3950)----GND
  36. {
  37.         {-40,0x3E3},{-39,0x3E1},{-38,0x3DF},{-37,0x3DD},{-36,0x3DA},{-35,0x3D8},{-34,0x3D5},{-33,0x3D3},{-32,0x3D0},{-31,0x3CD},
  38.         {-30,0x3CA},{-29,0x3C6},{-28,0x3C3},{-27,0x3BF},{-26,0x3BB},{-25,0x3B8},{-24,0x3B3},{-23,0x3AF},{-22,0x3AA},{-21,0x3A6},
  39.         {-20,0x3A1},{-19,0x39C},{-18,0x396},{-17,0x391},{-16,0x38B},{-15,0x385},{-14,0x37F},{-13,0x378},{-12,0x372},{-11,0x36B},
  40.         {-10,0x364},{-9 ,0x35C},{-8 ,0x355},{-7 ,0x34D},{-6 ,0x345},{-5 ,0x33D},{-4 ,0x334},{-3 ,0x32C},{-2 ,0x323},{-1 ,0x31A},
  41.         {0  ,0x310},{1  ,0x307},{2  ,0x2FD},{3  ,0x2F3},{4  ,0x2E9},{5  ,0x2DF},{6  ,0x2D5},{7  ,0x2CA},{8  ,0x2C0},{9  ,0x2B5},
  42.         {10 ,0x2AA},{11 ,0x29F},{12 ,0x294},{13 ,0x289},{14 ,0x27D},{15 ,0x272},{16 ,0x267},{17 ,0x25B},{18 ,0x250},{19 ,0x244},
  43.         {20 ,0x239},{21 ,0x22D},{22 ,0x222},{23 ,0x217},{24 ,0x20B},{25 ,0x200},{26 ,0x1F5},{27 ,0x1EA},{28 ,0x1DF},{29 ,0x1D4},
  44.         {30 ,0x1C9},{31 ,0x1BE},{32 ,0x1B3},{33 ,0x1A9},{34 ,0x19E},{35 ,0x194},{36 ,0x18A},{37 ,0x180},{38 ,0x176},{39 ,0x16D},
  45.         {40 ,0x163},{41 ,0x15A},{42 ,0x151},{43 ,0x148},{44 ,0x13E},{45 ,0x137},{46 ,0x12E},{47 ,0x126},{48 ,0x11E},{49 ,0x116},
  46.         {50 ,0x10E},{51 ,0x107},{52 ,0x100},{53 ,0xF8 },{54 ,0xF1 },{55 ,0xEB },{56 ,0xE4 },{57 ,0xDE },{58 ,0xD7 },{59 ,0xD1 },
  47.         {60 ,0xCB },{61 ,0xC5 },{62 ,0xC0 },{63 ,0xBA },{64 ,0xB5 },{65 ,0xB0 },{66 ,0xAB },{67 ,0xA6 },{68 ,0xA1 },{69 ,0x9C },
  48.         {70 ,0x98 },{71 ,0x93 },{72 ,0x8F },{73 ,0x8B },{74 ,0x87 },{75 ,0x83 },{76 ,0x80 },{77 ,0x7C },{78 ,0x78 },{79 ,0x75 },
  49.         {80 ,0x72 },{81 ,0x6E },{82 ,0x6B },{83 ,0x68 },{84 ,0x65 },{85 ,0x62 },{86 ,0x60 },{87 ,0x5D },{88 ,0x5A },{89 ,0x58 },
  50.         {90 ,0x55 },{91 ,0x53 },{92 ,0x51 },{93 ,0x4E },{94 ,0x4C },{95 ,0x4A },{96 ,0x48 },{97 ,0x46 },{98 ,0x44 },{99 ,0x42 },
  51.         {100,0x41 },{101,0x3F },{102,0x3D },{103,0x3B },{104,0x3A },{105,0x38 },
  52. };

  53. /*********************************************
  54. //NTC-温度转换
  55. *********************************************/
  56. char NTC2Temp(unsigned int NTC_AD_Value)
  57. {
  58.         unsigned char i;
  59.         char temp = 0;      // -40 --- 105 C
  60.        
  61.         for(i = 0; i < sizeof(NTC_Temp_Tab) / (sizeof(NTC_Temp_Tab[0].cTemp) + sizeof(NTC_Temp_Tab[0].uiAD)); i++)
  62.         {
  63.           if(pgm_read_word(&NTC_Temp_Tab[i].uiAD) <= NTC_AD_Value)
  64.                 {
  65.                         temp = pgm_read_byte(&NTC_Temp_Tab[i].cTemp);
  66.                         break;
  67.                 }
  68.         }
  69.         return(temp);
  70. }



  71. /*********************************************
  72. //TIMER2中断任务
  73. *********************************************/
  74. void Timer2Task(void)
  75. {
  76.   _1msFlg = 1;
  77. }

  78. /*********************************************
  79. //初始化
  80. *********************************************/
  81. void setup()
  82. {
  83.   #ifdef RS232_DUBEG
  84.   Serial.begin(9600);
  85.   #endif
  86.   
  87.   pinMode(PWM1_PIN,OUTPUT);
  88.   pinMode(PWM2_PIN,OUTPUT);
  89.   pinMode(NANO_LED,OUTPUT);
  90.   pinMode(AD_IN,INPUT);
  91.   
  92.   MsTimer2::set(1, Timer2Task); // 1ms
  93.   MsTimer2::start();
  94.   
  95.   
  96. }


  97. /*********************************************
  98. //主程序
  99. *********************************************/
  100. void loop()
  101. {
  102.   if ( _1msFlg)
  103.   {
  104.           #define _500MS_CNT    500
  105.           #define _100MS_CNT    100
  106.           static unsigned int ui500msCnt = _500MS_CNT;
  107.           static unsigned char uc100msCnt = _100MS_CNT;
  108.           unsigned char i;
  109.           
  110.      _1msFlg = 0;
  111.          
  112.          
  113.          if (--ui500msCnt == 0)
  114.          {
  115.                  ui500msCnt = _500MS_CNT;
  116.                  
  117.                  if (bBlinkSta)
  118.                  {
  119.                          bBlinkSta = 0;
  120.                          digitalWrite(NANO_LED,0);
  121.                  }
  122.                  else
  123.                  {
  124.                          bBlinkSta = 1;
  125.                          digitalWrite(NANO_LED,1);
  126.                  }
  127.                  
  128.                  uiAD_Value = analogRead(AD_IN);
  129.                 //ucPWM_Value = (unsigned char)(uiAD_Value >> 2);
  130.                 //analogWrite(PWM1_PIN,ucPWM_Value);                       
  131. ……………………

  132. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
AD_NTC.rar (2.2 KB, 下载次数: 122)





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:510165 发表于 2019-4-12 09:35 | 只看该作者
NTC与AD采样值对应表:http://www.51hei.com/bbs/dpj-156080-1.html
回复

使用道具 举报

板凳
ID:14408 发表于 2019-5-14 15:04 | 只看该作者
谢谢你的资料,非常感谢!
回复

使用道具 举报

地板
ID:586438 发表于 2019-8-6 16:55 | 只看该作者
前来学习  很需要这份资料。 非常感谢!
回复

使用道具 举报

5#
ID:619565 发表于 2019-10-5 19:19 | 只看该作者
正好在学习这个
回复

使用道具 举报

6#
ID:619565 发表于 2019-10-5 20:49 | 只看该作者
请问一下{100,0x41 },{101,0x3F },{102,0x3D },{103,0x3B },{104,0x3A },{105,0x38 },这种数据是怎么得出来的呢
假如我要得到200的数据应该是多少呢
回复

使用道具 举报

7#
ID:234938 发表于 2020-1-14 23:24 | 只看该作者
先收藏了,将来应该可以用到;感谢楼主分享。
回复

使用道具 举报

8#
ID:475084 发表于 2020-4-15 09:44 | 只看该作者
感谢up
回复

使用道具 举报

9#
ID:846761 发表于 2020-11-25 21:45 | 只看该作者
有接线图么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表