本帖最后由 gaoyang9992006 于 2022-12-12 14:22 编辑
测温电路如上所示,将OUT接入开发板的ADC接口,比如接入AIN2
接下来配置ADC,先设置ADC的时钟,然后配置IO端口作为ADC输入端口,然后选择该端口的通道切入ADC转化通路,然后使能ADC中断功能用于识别转化完成否,然后打开ADC功能开关。
接下来通过转换启动功能启动,然后通过中断寄存器判断是否完成转换,如果转换完成清理对应标志位,读取转换的结果。
根据转换的结果计算阻值,通过阻值计算温度。
- #include<rd8_conf.h>
- #include<stdio.h>
- #include <math.h>
- #define K 273.15
- #define T0 (25.0+K)
- #define R0 10000.0
- #define B 3455.0
- float Res_to_Tem(float res_val)
- {
- float temp;
- temp=1/((1/T0)+(log(res_val/R0)/B));
- return temp-K;
- }
- void SC_Init(void)
- {
- GPIO_Init(GPIO0, GPIO_PIN_1, GPIO_MODE_OUT_PP); //设置P01为强推挽模式
- GPIO_Init(GPIO1, GPIO_PIN_ALL, GPIO_MODE_IN_PU); //设置P1为高阻输入模式
- GPIO_Init(GPIO1, GPIO_PIN_1,GPIO_MODE_IN_PU);
- GPIO_Init(GPIO1, GPIO_PIN_3,GPIO_MODE_IN_PU);
- USCI1_ITConfig(DISABLE,LOW);
- USCI1_UART_Init(32000000,115200,USCI1_UART_Mode_10B,USCI1_UART_RX_ENABLE);
-
- ADC_Init(ADC_PRESSEL_3CLOCK,ADC_Cycle_Null);
- ADC_EAINConfig(ADC_EAIN_2,ENABLE);
- ADC_ChannelConfig(ADC_CHANNEL_2, ENABLE);
- ADC_ITConfig(ENABLE, LOW);
- ADC_Cmd(ENABLE);
- }
- //重写Printf发送函数
- char putchar (char c)
- {
- USCI1_UART_SendData8(c);
- while(!USCI1_GetFlagStatus(USCI1_UART_FLAG_TI));
- USCI1_ClearFlag(USCI1_UART_FLAG_TI);
- return c;
- }
- void Delay(unsigned int time)
- {
- unsigned int Single_Time;
- while(time--)
- {
- Single_Time = 4095;
- while(Single_Time --);
- }
- }
- void main(void)
- {
- uint16_t adc_val=0;
- uint16_t Res_val=0;
- float temp=0.0;
- SC_Init();
- while(1)
- {
- GPIO_TogglePin(GPIO0, GPIO_PIN_1);
- ADC_StartConversion(); //开启一次ADC转换
- while(!ADC_GetFlagStatus()); //等待ADC转换结束
- ADC_ClearFlag();
- adc_val = ADC_GetConversionValue();
- Res_val=(adc_val*6200.0)/(4095-adc_val);
- temp=Res_to_Tem(Res_val);
-
- Delay(2000);
- printf("adc_val = %d\n",adc_val);
- printf("Rx=%d Ohm\n",Res_val);
- printf("Temp=%.2f ℃\n",temp);
- printf("---------------------------\n");
- }
-
- }
|