From 8c00c02a3a23afc2711fe487f61e6a5c99f05e93 Mon Sep 17 00:00:00 2001 From: AlexeiBazlaev Date: Tue, 5 Jan 2021 19:29:53 +0700 Subject: [PATCH] Added NTC_TEMP mesurement --- .vs/TE_Controller/v14/.atsuo | Bin 47104 -> 57856 bytes TE_Controller/TE_Controller.cproj | 651 ++++++++++++++-------------- TE_Controller/src/include/ntc.h | 2 +- TE_Controller/src/main.c | 16 +- TE_Controller/src/source/adc_user.c | 24 +- TE_Controller/src/source/adn8831.c | 2 +- TE_Controller/src/source/ntc.c | 33 +- 7 files changed, 383 insertions(+), 345 deletions(-) diff --git a/.vs/TE_Controller/v14/.atsuo b/.vs/TE_Controller/v14/.atsuo index 9cb040ce3ef1f9d694385988aaa9f2f023d3a6cf..f67343c211592152cc39f0e0d1cd62c29cd228e0 100644 GIT binary patch delta 4759 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 _2rP(%_U1~DJ80FjI^ zB2o~kh%|%=u@Ldd9!6(#lsTxFi;&t&QJ#dzC!71HPw1f$FJgNY!a%({i>>1hvHrBj z-v78mN}kmrt|1o58MFx*Q*w$s%H$L>?9-gG2=$UvXs+ZGH`G&`oI*7fa*7i16sK6o zEC10cAtjN3nqf^vhST5r#6cb+|C?;riDJDpkVuECf z39=)}6rkjEk~6WU{34m+Gs`LGV7=Ta(}`C)1rCM15bGiYBx%Fp zfLo+;gR=uJxgBC^XwqaUDRU@LA=sp+^yO6y?rD}n+P-AiXQ< zHuWyH2HsF-{U3k3QLD45<=@ulyG{6fu%8@IiLpaeB^gKQd~% z#@jHuFB1lMgJ9m@!ECuEr2@5-d(tp4=MKq=T#_3|;pAR0 z2WBgYl8C;fQ3@+I-hk1Z3o4O+iBqLMVPv_6*-}kPB3|M~sRPWZgDNfuH7g#|rsc{h z{G?%SUtnVxfkm*t#rQ709C9qd5PYK4yA)ZqjB7Cb;#|7&w=vg>mt5Jp{e1|H3DFdA z8@Lj#mNQ_e3cV+c42)}yf-$m}*%p|T#2Ky#X%jFn$W~^ff}(CrIf6F=#Z5^g(3WWlE5ddiSHXQBr#50u3GvlV zS%%^p&#g;+zntQ-{ts{id|e%LwgAht_&GMH;;OHPAKi2=u==z5>Q2RvZs}hZ(O zxJWry4Q;J45PfVp+_ZVY?{|8_*KHmU^0GSe_&WbxDT%_$1Ji$}N~(|v(GcNVL`<*kQZ8A{d(EZD*};csmOeQpWbYy;MH;x8?5E9L6N z)S#cYR;FFg^6i;xpatZ^ug^>%!KSYbYQjm4qKT`xqAN+W)hlCmUFS-ETr)Ls29EKa zSB|R`h{rDz-FN(5&qH4(q`j$1cr76CXSWYB%uF63L&y;dgbTuz!6SDcl{<=B#G}(W zC)v(oKbUMufWLH93VZX)W$ZGv6DSk@8U*>0-i0k24)Y!zn7=UO?4x1eR|lh0;~xQ+Z+zxrsUC z*h8=vF`l@FgGbksWch`R93IqW-E;hu81-iN(^Ol z4V9IZW$_zRqgLe3GvFWE5({kGGtbu0`)@hl8}2mt*rF2DRousI!*^5uUg!(fx?ZrB z#%UL!KgaI_Fizj)F?96uyT{vaq~>-+d!OxW`Xfb$vJS(d5fiGbk_Tf<_oO0xxKMgI zw7Z}!vMv0{gsb9ohi^{0eKD{kH7HDGxcUBlTFkXf3?ngMyVmj^{~GWRYFP$_C*!nL zT;{sujiH+-<=**6x{t8Gvy^q!@itGBl3t>T^y$u*lVUA4jzEh~7JS6dRMcW?AB=it z%IWPp#?#$@$?q>xm>y4%XMA0nyK0~^iF zxBzI|9w5^@YGGl|d#vjRJg~4dA+5FD)BPRCI2y~nipf|3^{oNWyTgNt6Tx;d4~F7H zCtON`9T;!xGCpaC?32c)*g$6UGqQ3a#m~anVd(QuhVIS5P`5=BOx!n~!IH20Twj^} zTKnogGCd4$4e)UIyBxpYVR>YbIkNTK1xSh7v4qwr6@$WzYZ3JpA%BviD=+{mMO}qR z0yK^|omitrWT>tWwQ*5-w^#jo?uGoI(jED<<7B)2@mRS8DKQo>9y2~ceC4=BGj3Lf zHIeeO5Z@trS2ugoayMQ!fU&Fhps|OCwua{*uOSZ-Q$7&V1z*|ZCz1{t-X8Rbilyfr zH!D6Klda4!3oey;LB2Ue%-Eba=VKm1WS}1yTkD_2$ui6g!8+K>ORj2$-|VOf7=PRJ z>4$C|@xPM!%ex!0N6xRRL}PhRBYLexdy>V8ve%p{sQGgt>p%0kE_(Af=l)73L_h6F zhTh$EaNrds-Wb~aCiG6VNcRO3d?j60Pt%QGV0BKD({rnG0ZVGlyLdZ%%Qe@$y)E@( z#GC@Tdm}E}EC#>^X6;eP^&rq-?i diff --git a/TE_Controller/TE_Controller.cproj b/TE_Controller/TE_Controller.cproj index 209b33d..786d9f4 100644 --- a/TE_Controller/TE_Controller.cproj +++ b/TE_Controller/TE_Controller.cproj @@ -30,330 +30,330 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.atmel.avrdbg.tool.atmelice J41800067100 @@ -371,6 +371,7 @@ Atmel-ICE 2000000 + true @@ -671,7 +672,7 @@ True - -Wl,--entry=Reset_Handler -Wl,--cref -mthumb -T../src/ASF/sam0/utils/linker_scripts/samd21/gcc/samd21e16b_flash.ld + -Wl,--entry=Reset_Handler -Wl,--cref -mthumb -Wl,-u,vfprintf -T../src/ASF/sam0/utils/linker_scripts/samd21/gcc/samd21e16b_flash.ld ../src diff --git a/TE_Controller/src/include/ntc.h b/TE_Controller/src/include/ntc.h index 38890db..b952a5c 100644 --- a/TE_Controller/src/include/ntc.h +++ b/TE_Controller/src/include/ntc.h @@ -19,7 +19,7 @@ float NTC_R2T(float R); // Read ADC and calculate temperature in Cenlsius. - float NTC_MCU_get_temp(void); + float NTC_MCU_get_temp(uint16_t *p_adc_val); float NTC_TEC_get_temp(uint16_t *p_value, float *p_R); diff --git a/TE_Controller/src/main.c b/TE_Controller/src/main.c index 8e1ebcf..3ea5eff 100644 --- a/TE_Controller/src/main.c +++ b/TE_Controller/src/main.c @@ -42,10 +42,12 @@ //#include #include "realsence.h" #include "ntc.h" +#include #define PORT_STDIO 0 #define PORT_DATA 1 +uint16_t adc_value = 100; //char rcvBuff[128] = {0}; char str[128] = {0}; UBaseType_t uxHighWaterMark_cdc_rx_check; @@ -173,18 +175,22 @@ void Task_led_blink(void *parameters) } void Task_mesure(void *parameters) -{ +{ uxHighWaterMark_mesure = uxTaskGetStackHighWaterMark( NULL ); for (;;) { - Controller.temps.MCU_Temp = NTC_MCU_get_temp(); + Controller.temps.MCU_Temp = NTC_MCU_get_temp(NULL); if (main_b_cdc_enable && udi_cdc_multi_is_tx_ready(PORT0)) - printf(">%f\n\r", Controller.temps.MCU_Temp); + { + if(fpclassify(Controller.temps.MCU_Temp) == FP_NAN) + printf(">NTC_TEMP = NAN\n\r"); + else + printf(">NTC_TEMP = %d\n\r", (int)Controller.temps.MCU_Temp ); + } LED_Toggle(LED_PIN); uxHighWaterMark_mesure = uxTaskGetStackHighWaterMark( NULL ); vTaskDelay(1000); - } - + } } void InitTask_led_blink(void) diff --git a/TE_Controller/src/source/adc_user.c b/TE_Controller/src/source/adc_user.c index 0b8844e..20a1bb2 100644 --- a/TE_Controller/src/source/adc_user.c +++ b/TE_Controller/src/source/adc_user.c @@ -11,6 +11,12 @@ struct adc_module adc_instance; void configure_adc(void) { struct adc_config config_adc; + /*ADC_GAINCORR_Type gainCorr = { + .bit.GAINCORR = 1 + }; + ADC_OFFSETCORR_Type offsetCorr = { + .reg = -52 + };*/ adc_get_config_defaults(&config_adc); config_adc.positive_input = ADC_POSITIVE_INPUT_PIN1; @@ -19,22 +25,34 @@ void configure_adc(void) config_adc.resolution = ADC_RESOLUTION_12BIT; config_adc.gain_factor = ADC_GAIN_FACTOR_1X; + config_adc.freerunning = true; + config_adc.correction.correction_enable = true; + config_adc.correction.offset_correction = -16;//ADC_OFFSETCORR_OFFSETCORR(offsetCorr.reg);// + config_adc.correction.gain_correction = (1<<11);//1.0ADC_GAINCORR_GAINCORR(gainCorr.reg);// + config_adc.gain_factor = ADC_GAIN_FACTOR_DIV2; config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV512; // prescaler influence to accuracy of measures. Don't set less then 32 adc_init(&adc_instance, ADC, &config_adc); adc_enable(&adc_instance); + adc_start_conversion(&adc_instance); } -uint16_t adc_read_value(void){ +uint16_t adc_read_value(void) +{ + uint16_t result = 0xFFFF; + adc_read(&adc_instance, &result); + return result; +} +/*uint16_t adc_read_value(void){ adc_start_conversion(&adc_instance); uint16_t result; do { - /* Wait for conversion to be done and read out result */ + } while (adc_read(&adc_instance, &result) == STATUS_BUSY); return result; -} +}*/ uint16_t adc_read_value_spec(ADC_chan_t chan) { diff --git a/TE_Controller/src/source/adn8831.c b/TE_Controller/src/source/adn8831.c index 282a4db..6af6c49 100644 --- a/TE_Controller/src/source/adn8831.c +++ b/TE_Controller/src/source/adn8831.c @@ -34,7 +34,7 @@ void ADN8831_control(void){ TEC_set_TEMPSET_volt(0.9); // MCU temp - float t = NTC_MCU_get_temp(); + float t = NTC_MCU_get_temp(NULL); make_float2str(t_MCU_str, MAX_STR_FLOAT, (float)t); diff --git a/TE_Controller/src/source/ntc.c b/TE_Controller/src/source/ntc.c index 8a12b83..ada63e0 100644 --- a/TE_Controller/src/source/ntc.c +++ b/TE_Controller/src/source/ntc.c @@ -5,11 +5,20 @@ * Author: Lexus */ #include "ntc.h" -#include +#include #define MCU_CONTROL // ADC value to R +/*float NTC_MCU_value2R(uint16_t value) +{ + float R10 = 17800.0; + float R11 = 7680.0; + + float Vadc = value*3.3/1.48/4096; + float res = (Vadc*(R10+R11) -3.3*R11)/(3.3-Vadc); + return res; +}*/ float NTC_MCU_value2R(uint16_t value) { float R10 = 17800.0; @@ -17,7 +26,8 @@ float NTC_MCU_value2R(uint16_t value) float Q = adc_get_Q(value); - return ((R10*Q)/(1 - Q) - R11); + float res = (R10*Q)/(1 - Q)-R11; + return res; } float NTC_TEC_value2R(uint16_t value) @@ -41,21 +51,24 @@ float NTC_TEC_value2R(uint16_t value) // Resistance to Temp float NTC_R2T(float R) { - float K0 = 273.15; - float T0 = 25.0 + K0; + float K0 = 273.15; + float invT0 = 0.003354;//float T0 = 25.0 + K0; float R0 = 10000.0; float B = 3863.737706; - return (1.0/((log(R/R0)/B) + (1/T0)) - K0); + return (1.0/((logf(R/R0)/B) + invT0) - K0); } // Read ADC and calculate temperature in Cenlsius. -float NTC_MCU_get_temp(void) +float NTC_MCU_get_temp(uint16_t *p_adc_val) { - uint16_t adc_val = adc_read_value_spec(chan_NTC_MCU); - - float R = NTC_MCU_value2R(adc_val); - float t = NTC_R2T(R); + uint16_t adc_val=0; + if (p_adc_val) + adc_val = *p_adc_val; + else + adc_val = adc_read_value_spec(chan_NTC_MCU); + float R = NTC_MCU_value2R(adc_val); + float t = NTC_R2T(R); return t; }