|
本貼拾取項目中部分代碼(因項目正在進行中,尚無法完全公開原碼,請多多包涵)
以下為功能函數(shù) temp.c文件
- ///*********************************************************
- //Copyright(C), Gao Zhan Optoelectronic Technology Co. LTD
- //Author: lanxichang
- //Version : V0.0
- //Date : 2023-05-09 17:28:29
- //Date : 2023-05-27 09:10:10
- //History :
- //**********************************************************/
- #include "temp.h"
- #include "stm32g0xx_hal.h"
- #include "stdbool.h"
- #include "math.h"
- //#ifdef HAL_ADC_MODULE_ENABLED
- extern ADC_HandleTypeDef hadc1;
- int ADC_Value;
- extern float ADC_gather(void);
- #define NUM 30
- int ave_temp1[NUM+1];
- uint8_t tableNum;
- /***********************************************************************
- 備注說明:NTC就是隨溫度變化阻值變化的傳感器,所以在硬件上只要計算出他現(xiàn)在是什么阻值就能得到他的溫度,阻值隨溫度變化對照表
- 功 能:查表函數(shù)
- 參 數(shù):
- 返回值:NTCTABNum 查表對應 溫度值 (什么阻值對應什么溫度)-50-125
- *************************************************************************/
- #define NTCTABNum 100
- static float NTCTAB_2[NTCTABNum] = {
- 32.6142,30.9966,29.4688,28.0251,26.6606,25.3704,24.1501,22.9955,21.9028,20.8682,//0 - 9
- 19.8884,18.9602,18.0806,17.2467,16.4561,15.7061,14.9945,14.3191,13.6779,13.0690,//10 - 19
- 12.4905,11.9409,11.4184,10.9217,10.4494,10.0000,9.5724,9.1654,8.7779 ,8.4089 ,//20 - 29
- 8.0574 ,7.7225 ,7.4033 ,7.099 ,6.8088 ,6.5321 ,6.268 ,6.016 ,5.7755 ,5.5459 , //30 - 39
-
- 5.3266 ,5.1171 ,4.9169 ,4.7257 ,4.5428 ,4.368 ,4.2008 ,4.0409 ,3.8878 ,3.7414 , //40 - 49
- 3.6012 ,3.467 , 3.3385 ,3.2154 ,3.0975 ,2.9845 ,2.8762 ,2.7723 ,2.6727 ,2.5772 , //50 - 59
- 2.4856 ,2.3977 ,2.3134 ,2.2324 ,2.1547 ,2.0801 ,2.0084 ,1.9396 ,1.8734 ,1.8098 , //60 - 69
- 1.7487 ,1.69 ,1.6335 ,1.5792 ,1.5269 ,1.4767 ,1.4283 ,1.3818 ,1.3369 ,1.2938 , //70 - 79
- 1.2523 ,1.2123 ,1.1737 ,1.1366 ,1.1008 ,1.0663 ,1.0331 ,1.0011 ,0.9702 ,0.9404 , //80 - 89
- 0.9116,0.8839,0.8572,0.8314 ,0.8064,0.7824,0.7592,0.7367,0.7151,0.6942, //90 - 99
- };
- /***********************************************************************
- 功 能:Tem_init初始化函數(shù)
- 參 數(shù):
- 返回值:
- *************************************************************************/
- void Temp_init(void)
- {
-
- GetResValue();
-
- GetADCTemperature(&NTCTAB_2[NTCTABNum],tableNum);
-
- GetMedian_Temperature();
-
- }
- /***********************************************************************
- 功 能:將ADC采到的值轉換成電阻
- 參 數(shù):channel:指定的ADC通道
- 返回值:res 電阻值
- *************************************************************************/
- float GetResValue(void)
- {
- float adc_v,res;
- // //ADC_Value=ADC_gather();
- // HAL_ADC_Start(&hadc1); //此開始函數(shù)必須放入for,若不是則采集第一次的ADC通道,即PA2
- // HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Value, 1);
- // HAL_ADCEx_Calibration_Start(&hadc1);
- // HAL_ADC_PollForConversion(&hadc1,50);
-
-
- HAL_ADC_Start(&hadc1);
- HAL_ADC_PollForConversion(&hadc1, 50);
-
- ADC_Value = HAL_ADC_GetValue(&hadc1);
-
- adc_v = (float)(ADC_Value&0xFFF)/4096*3.3; //將采集到值轉換成電壓 2^12=4096
-
- res = 10 /( 4.096/adc_v-1); //電壓轉換成電阻
-
- return res ;
- }
- /******************************a*****************************************
- 功 能:查表函數(shù)
- 參 數(shù):1.tableNum :表格的元素的個數(shù)
- 2.*p:表格
- 返回值:tem 當前阻值下的溫度值
- *************************************************************************/
-
- float GetADCTemperature(float *p,uint8_t tableNum)
- {
- uint8_t i,index = 0;
- float v1,v2,v3;
- float tem;
- float resdata;
- resdata = GetResValue(); //電阻值,電阻測量函數(shù)返回值加載到 resdata
- /*查表*/
- for(i=0;i<(tableNum-1);i++)
- {
- if((resdata<p[i]) && (resdata>p[i+1]))
- index = i;
- }
- v1 = p[index] - resdata;
- v2 = p[index] - p[index+1];
- v3 = v1/v2;
- tem = v3+index;
-
- return tem;
- }
-
- /***********************************************************************
- 功 能:掐頭去尾取平均值
- 參 數(shù):無
- 返回值:ave_temp 平均值
-
- *************************************************************************/
-
- float GetMedian_Temperature(void)
- {
- int i,j;
- float tmp;
- float ave_temp;
- float sum1=0;
- for(i=0;i<NUM;i++)
- {
- ave_temp1[i] = GetADCTemperature(NTCTAB_2,NTCTABNum); //將測得的溫度值放大10倍存在int型數(shù)組中,方便后面上傳有人云
- //HAL_Delay(1);
- }
-
- for(i=0;i<NUM-1;i++) //排序
- {
- for(j=0;j<(NUM)-i;j++)
- {
- if(ave_temp1[j]<ave_temp1[j+1])
- {
- tmp = ave_temp1[j];
- ave_temp1[j] = ave_temp1[j+1];
- ave_temp1[j+1] = tmp;
- }
- }
- }
-
- for(i=5;i<NUM-5;i++) //掐頭去尾取平均值
- {
- sum1 += ave_temp1[i];
- }
- ave_temp = sum1/(NUM-10); //減掉掐頭去尾各5個數(shù),求平均值
-
-
- return ave_temp-9.2; // 因電阻值取值不一樣,-9.2是為了臨時校正溫度值,后期全面校準才更改表格。
復制代碼 以下為功能函數(shù)adc.c文件
電路溫度采集圖片中為3個10K電阻,一個10K_NTC
原代碼150M 太大了也上傳不了,其它DMA及SPI為常規(guī)配置,main各位博友可以自行開發(fā)功能。謝謝大家,有問題可以共同交流,歡迎留言!
|
-
8888.jpg
(575.91 KB, 下載次數(shù): 89)
下載附件
2023-6-6 12:12 上傳
正常顯示室溫
-
999.jpg
(628.97 KB, 下載次數(shù): 80)
下載附件
2023-6-6 12:13 上傳
NTC電阻
評分
-
查看全部評分
|