關于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)
2020-3-25 16:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|