• 热敏电阻温度传感器(基于传感器管理组件)


    热敏电阻传感器,其阻值随着温度的变化而变化,我们通过ADC采集热敏电阻上的电压值,再通过计算得到当前温度信息。

    注意:请按照自己热敏电阻的属性,修改代码内对应内容!!!

    temperature,c

      1 /**
      2  * @file temperature.c
      3  * @brief
      4  * @version 0.1
      5  * @date 2019-06-28
      6  *
      7  * @copyright Copyright (c) 2019  Chipintelli Technology Co., Ltd.
      8  *
      9  */
     10 /*-----------------------------------------------------------------------------
     11                             include
     12 -----------------------------------------------------------------------------*/
     13 #include "ci110x_adc.h"
     14 #include "ci110x_scu.h"
     15 #include "ci110x_uart.h"
     16 #include "ci110x_adc.h"
     17 #include "ci_misc.h"
     18 #include "ci_sensor.h"
     19 
     20 /*-----------------------------------------------------------------------------
     21                             define
     22 -----------------------------------------------------------------------------*/
     23 #define RESISTOR (10 * 1000)/*!< 分压电阻阻值 */
     24 #define TEMPERATURE_ADC (HAL_ADC_BASE)/*!< ADC控制器 */
     25 #define TEMPERATURE_ADC_CHANNEL (ADC_CHANNEL_2)/*!< ADC通道 */
     26 #define TEMPERATURE_ADC_PAD (AIN2_PAD)/*!< ADC引脚 */
     27 
     28 /*-----------------------------------------------------------------------------
     29                             extern
     30 -----------------------------------------------------------------------------*/
     31 extern void ADC_SetIOReuse(uint8_t channel);
     32 
     33 /*-----------------------------------------------------------------------------
     34                         struct / enum / union
     35 -----------------------------------------------------------------------------*/
     36 typedef struct
     37 {
     38     uint8_t temperature;
     39     float min_r;
     40     float max_r;
     41 }R_SENSOR_RANG;
     42 
     43 /*-----------------------------------------------------------------------------
     44                             global
     45 -----------------------------------------------------------------------------*/
     46 /**
     47  * @brief 电压-温度对应表
     48  *
     49  */
     50 R_SENSOR_RANG r_sensor_list[]=
     51 {
     52     {0,31.602,33.006  },
     53     {1,30.097,31.402  },
     54     {2,28.667,29.881  },
     55     {3,27.310,28.439  },
     56     {4,26.022,27.071  },
     57     {5,24.799,25.774  },
     58     {6,23.638,24.543  },
     59     {7,22.535,23.376  },
     60     {8,21.488,22.268  },
     61     {9,20.494,21.218  },
     62     {10,19.550,20.221 },
     63     {11,18.653,19.275 },
     64     {12,17.801,18.378 },
     65     {13,16.992,17.526 },
     66     {14,16.224,16.717 },
     67     {15,15.493,15.950 },
     68     {16,14.799,15.221 },
     69     {17,14.139,14.529 },
     70     {18,13.512,13.872 },
     71     {19,12.915,13.247 },
     72     {20,12.348,12.654 },
     73     {21,11.809,12.090 },
     74     {22,11.295,11.554 },
     75     {23,10.807,11.045 },
     76     {24,10.342,10.561 },
     77     {25,9.900,10.100  },
     78     {26,9.471,9.670   },
     79     {27,9.062,9.261   },
     80     {28,8.673,8.872   },
     81     {29,8.303,8.501   },
     82     {30,7.951,8.147   },
     83     {31,7.615,7.810   },
     84     {32,7.296,7.489   },
     85     {33,6.992,7.182   },
     86     {34,6.702,6.890   },
     87     {35,6.425,6.611   },
     88     {36,6.162,6.346   },
     89     {37,5.911,6.092   },
     90     {38,5.671,5.850   },
     91     {39,5.442,5.618   },
     92     {40,5.224,5.398   },
     93     {41,5.016,5.187   },
     94     {42,4.818,4.985   },
     95     {43,4.628,4.793   },
     96     {44,4.447,4.609   },
     97     {45,4.273,4.433   },
     98     {46,4.108,4.265   },
     99     {47,3.950,4.104   },
    100     {48,3.799,3.950   },
    101     {49,3.654,3.802   },
    102     {50,3.516,3.661   },
    103 };
    104 
    105 /*-----------------------------------------------------------------------------
    106                             declare
    107 -----------------------------------------------------------------------------*/
    108 
    109 /*-----------------------------------------------------------------------------
    110                             function
    111 -----------------------------------------------------------------------------*/
    112 
    113 /**
    114  * @brief 读取温度值
    115  *
    116  * @param voltage
    117  * @return unsigned char
    118  */
    119 unsigned char Caculate_Temperature(float voltage)
    120 {
    121     float Resis = 0;
    122     unsigned char Temprature = -1;
    123     Resis = (RESISTOR * voltage) / (3.3 - voltage);
    124     for(int i = 0;i < 51;i++)
    125     {
    126         float temp1 = (r_sensor_list[i].min_r)*1000;
    127         float temp2 = (r_sensor_list[i].max_r)*1000;
    128         if((Resis >= temp1) && (Resis <= temp2))
    129         {
    130             Temprature = r_sensor_list[i].temperature;
    131             break;
    132         }
    133     }
    134     return Temprature;
    135 }
    136 
    137 /**
    138  * @brief 初始化温度传感器
    139  *
    140  * @param irq_callback 中断回调
    141  * @retval RETURN_OK
    142  * @retval RETURN_ERR
    143  */
    144 int32_t temperature_open(void)
    145 {
    146     #if 0
    147     Scu_Setdiv_Parameter(TEMPERATURE_ADC,63);
    148     Scu_SetDeviceGate(TEMPERATURE_ADC,1);
    149     Scu_SetIOReuse(TEMPERATURE_ADC_PAD,FIRST_FUNCTION);
    150     ADC_SetIOReuse(TEMPERATURE_ADC_CHANNEL);
    151     adc_power_ctrl(ENABLE);
    152     adc_continuons_convert(DISABLE);
    153     adc_period_enable(ENABLE);
    154     adc_period_monitor(TEMPERATURE_ADC_CHANNEL,ENABLE);
    155     adc_chax_period(TEMPERATURE_ADC_CHANNEL,62);
    156     adc_calibrate(DISABLE);
    157     adc_int_sel(ADC_INT_MODE_TRANS_END);
    158     adc_mask_int(DISABLE);
    159     adc_convert_config(TEMPERATURE_ADC_CHANNEL,ADC_CLKCYCLE_1);
    160     #else
    161     adc_init_cycle_mode(TEMPERATURE_ADC_CHANNEL,4,NULL);
    162     #endif
    163     return RETURN_OK;
    164 }
    165 
    166 /**
    167  * @brief 读取温度
    168  *
    169  * @param data 读到的数据
    170  * @retval RETURN_OK
    171  * @retval RETURN_ERR
    172  */
    173 int32_t temperature_read(sensor_data_t *data)
    174 {
    175     float temp,adc_value;
    176     int real_temperature;
    177     temp = adc_get_result(TEMPERATURE_ADC_CHANNEL);
    178     adc_value = ((temp/4096)*3.3);
    179     real_temperature = Caculate_Temperature(adc_value);
    180     if(0xFF != real_temperature)
    181     {
    182         sensor_data_inform(SENSOR_TYPE_TEMPERATURE);
    183         data->temperature = real_temperature * 10;
    184     }
    185     return RETURN_OK;
    186 }
    187 
    188 /**
    189  * @brief 温度传感器ops
    190  *
    191  */
    192 sensor_ops_t temperature_ops =
    193 {
    194     temperature_open,
    195     temperature_read,
    196 };
    197 
    198 /*-----------------------------------------------------------------------------
    199                             end of the file
    200 -----------------------------------------------------------------------------*/

    temperature,h

     1 /**
     2  * @file temperature.h
     3  * @brief 温度传感器的头文件
     4  * @version 0.1
     5  * @date 2019-07-02
     6  *
     7  * @copyright Copyright (c) 2019  Chipintelli Technology Co., Ltd.
     8  *
     9  */
    10 
    11 #ifndef __TEMPERATURE_H__
    12 #define __TEMPERATURE_H__
    13 
    14 /**
    15  * @ingroup third_device_driver
    16  * @defgroup 热敏电阻
    17  * @brief 热敏电阻传感器驱动
    18  * @{
    19  */
    20 
    21 #ifdef __cplusplus
    22 extern "C" {
    23 #endif
    24 
    25 /*-----------------------------------------------------------------------------
    26                             include
    27 -----------------------------------------------------------------------------*/
    28 #include "ci_sensor.h"
    29 
    30 /*-----------------------------------------------------------------------------
    31                             define
    32 -----------------------------------------------------------------------------*/
    33 
    34 /*-----------------------------------------------------------------------------
    35                             extern
    36 -----------------------------------------------------------------------------*/
    37 extern sensor_ops_t temperature_ops;
    38 
    39 /*-----------------------------------------------------------------------------
    40                         struct / enum / union
    41 -----------------------------------------------------------------------------*/
    42 
    43 /*-----------------------------------------------------------------------------
    44                             global
    45 -----------------------------------------------------------------------------*/
    46 
    47 /*-----------------------------------------------------------------------------
    48                         function declare
    49 -----------------------------------------------------------------------------*/
    50 
    51 #ifdef __cplusplus
    52 }
    53 #endif
    54 
    55 /**
    56  * @}
    57  */
    58 
    59 #endif
    60 
    61 /*-----------------------------------------------------------------------------
    62                             end of the file
    63 -----------------------------------------------------------------------------*/
  • 相关阅读:
    Eclipse集成Tomcat:6个常见的”how to”问题
    linux环境变量配置
    (原创)JS点击事件——Uncaught TypeError: Cannot set property 'onclick' of null
    [ JS 进阶 ] 闭包,作用域链,垃圾回收,内存泄露
    webstorm安装后的一些设置技巧:
    前端工程师的知识体系
    Git常用命令及软件推荐
    Vue.js双向绑定的实现原理
    GET和POST面试知识点
    CSS 巧用 :before和:after
  • 原文地址:https://www.cnblogs.com/wangyanwen/p/11451495.html
Copyright © 2020-2023  润新知