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

热敏电阻传感器,其阻值随着温度的变化而变化,我们通过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 -----------------------------------------------------------------------------*/

猜你喜欢

转载自www.cnblogs.com/wangyanwen/p/11451495.html