关于stm32温度采集 采用ADC采集NTC热敏电阻 通过led显示
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "adc.h"
- #include "dma.h"
- #define ADC1_DR_Address ((u32)0x40012400+0x4c)
- volatile u16 adc_value[6];
- float temp;
- //ntc函数
- //温度对应
- const static float ntc[21]=
- {1628.0369,1607.9082,1573.5637,1518.3742,1435.5667,1332.3733,1179.6867,1016.9468,
- 848.4260,688.30238,546.84645,428.67342,333.80328,260.01129,203.26611,159.43124,
- 125.75058,100.03476,80.186094,64.863774,52.957916}; //-20~80对应的mV值
-
- //通过ad值去计算温度
- float ntc_proc(long ad_data)
- {float mid,t;
- unsigned char i;
- mid = ad_data;
- mid = mid * 0.8058608058608059;//计算对应的电压值(mV)3300*ADC_value/4095 ADC是12位精度 3300/4095=0.8058608058608059
- for(i=1;i<21;i++)
- {if(mid>ntc[i])
- break;
- }
- t = (i - 4) * 100 - (mid-ntc[i]) / (ntc[i-1]-ntc[i]) * 100;
- return t;
- }
- //主函数
- int main(void)
- {
- Stm32_Clock_Init(9); //系统时钟设置
- uart_init(72,115200); //串口初始化为115200
- delay_init(72); //延时初始化
-
- MYDMA_Config(DMA1_Channel1,ADC1_DR_Address ,(u32) adc_value,6);
- printf("\r\n DMA_Init成功 \r\n");
-
- Adc_Init(); //ADC初始化
- printf("\r\n Adc_Init成功 \r\n");
- // ADC1->CR2|=1<<8; //开启DMA传输
- // printf("\r\n 开启adc_DMA \r\n");
-
-
- while(1)
- {
- temp=ntc_proc(adc_value[0]);
- printf("\r\n AD值 %d \r\n",adc_value[0]);
- printf("\r\n 温度值 %f \r\n",temp);
- //printf("\r\n AD值 %d %d %d %d %d %d \r\n",adc_value[0],adc_value[1],adc_value[2],adc_value[3],adc_value[4],adc_value[5]);
- }
- }
复制代码
所有资料51hei提供下载:
stm32 ntc温度测试程序.7z
(128.21 KB, 下载次数: 88)
|