[开发工具] 【新定义MCU开发板测评】+ ADC使用NTC热敏电阻测温

[复制链接]
1132|3
 楼主| gaoyang9992006 发表于 2022-12-10 19:12 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2022-12-12 14:22 编辑

001.jpg
测温电路如上所示,将OUT接入开发板的ADC接口,比如接入AIN2
接下来配置ADC,先设置ADC的时钟,然后配置IO端口作为ADC输入端口,然后选择该端口的通道切入ADC转化通路,然后使能ADC中断功能用于识别转化完成否,然后打开ADC功能开关。
接下来通过转换启动功能启动,然后通过中断寄存器判断是否完成转换,如果转换完成清理对应标志位,读取转换的结果。
根据转换的结果计算阻值,通过阻值计算温度。
  1. #include<rd8_conf.h>
  2. #include<stdio.h>
  3. #include <math.h>

  4. #define K 273.15
  5. #define T0 (25.0+K)
  6. #define R0 10000.0
  7. #define B 3455.0

  8. float Res_to_Tem(float res_val)

  9. {
  10.         float temp;
  11.         temp=1/((1/T0)+(log(res_val/R0)/B));
  12.         return temp-K;
  13. }


  14. void SC_Init(void)
  15. {
  16.   GPIO_Init(GPIO0, GPIO_PIN_1, GPIO_MODE_OUT_PP); //设置P01为强推挽模式
  17.         GPIO_Init(GPIO1, GPIO_PIN_ALL, GPIO_MODE_IN_PU); //设置P1为高阻输入模式
  18.         GPIO_Init(GPIO1, GPIO_PIN_1,GPIO_MODE_IN_PU);
  19.         GPIO_Init(GPIO1, GPIO_PIN_3,GPIO_MODE_IN_PU);
  20.         USCI1_ITConfig(DISABLE,LOW);
  21.         USCI1_UART_Init(32000000,115200,USCI1_UART_Mode_10B,USCI1_UART_RX_ENABLE);
  22.         
  23.         ADC_Init(ADC_PRESSEL_3CLOCK,ADC_Cycle_Null);
  24.         ADC_EAINConfig(ADC_EAIN_2,ENABLE);
  25.         ADC_ChannelConfig(ADC_CHANNEL_2, ENABLE);
  26.         ADC_ITConfig(ENABLE, LOW);
  27.   ADC_Cmd(ENABLE);
  28. }

  29. //重写Printf发送函数
  30. char putchar (char c)
  31. {
  32.         USCI1_UART_SendData8(c);
  33.         while(!USCI1_GetFlagStatus(USCI1_UART_FLAG_TI));
  34.         USCI1_ClearFlag(USCI1_UART_FLAG_TI);
  35.         return c;
  36. }

  37. void Delay(unsigned int time)
  38. {
  39.         unsigned int Single_Time;
  40.         while(time--)
  41.         {
  42.                 Single_Time = 4095;
  43.                 while(Single_Time --);
  44.         }
  45. }

  46. void main(void)
  47. {
  48.         uint16_t adc_val=0;
  49.         uint16_t Res_val=0;
  50.         float temp=0.0;


  51.         SC_Init();
  52.         while(1)
  53. {
  54.         GPIO_TogglePin(GPIO0, GPIO_PIN_1);
  55.         ADC_StartConversion();                        //开启一次ADC转换
  56.         while(!ADC_GetFlagStatus());                        //等待ADC转换结束
  57.         ADC_ClearFlag();
  58.         adc_val = ADC_GetConversionValue();
  59.         Res_val=(adc_val*6200.0)/(4095-adc_val);
  60.         temp=Res_to_Tem(Res_val);
  61.         
  62.         Delay(2000);
  63.         printf("adc_val = %d\n",adc_val);
  64.         printf("Rx=%d Ohm\n",Res_val);
  65.         printf("Temp=%.2f ℃\n",temp);
  66.         printf("---------------------------\n");

  67. }
  68.         

  69. }
002.png
幸福小强 发表于 2024-5-21 15:25 | 显示全部楼层
ADC的使用。
幸福小强 发表于 2024-5-21 15:48 | 显示全部楼层
这个公式的误差有多大?
AdaMaYun 发表于 2024-5-23 09:36 | 显示全部楼层
ADC使用NTC热敏电阻测温
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部