123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /*
- * adc.c
- *
- * Created on: 2020. 8. 3.
- * Author: parkyj
- */
- #include "main.h"
- #include "adc.h"
- #include "NessLab.h"
-
- uint8_t ADC_Convert_Temperature(double val);
- extern ADC_HandleTypeDef hadc1;
- extern DMA_HandleTypeDef hdma_adc1;
- extern Nesslab_Prot Currstatus;
-
-
- //volatile uint16_t ADC1valuearray[ADC1_CNT][ADC_AVERAGECNT];
- volatile uint16_t ADC1value[ADC1_CNT];
- volatile uint16_t ADC1_Arrage[ADC_AVERAGECNT] = {0,};
- volatile uint32_t ADC1_Arrage_Ret[ADC_AVERAGECNT] = {0,};
-
- uint16_t adc1cnt = 0 ;
- uint32_t TotalCnt = 0;
-
-
- extern volatile uint32_t TDD_125ms_Cnt;
-
-
- /*
- *
- * ADC 0 :DL TX
- * ADC 1 :DL RX
- * ADC 2 :TEMP
- * */
-
- void ADC_Value_Get(){
- uint16_t CalcRet = 0 ;
- uint16_t Tx_Det_Volt = ((ADC1value[0] * (3.3 / 4095))* 1000);
- uint16_t Rx_Det_Volt = ((ADC1value[1] * (3.3 / 4095))* 1000);
- int8_t Real_Temperature = ADC_Convert_Temperature((ADC1value[2] * (3.3 / 4095)));
- /*DL TX Calc*/
- Currstatus.DownLink_Forward_Det_H = ((Tx_Det_Volt & 0xFF00) >> 8);
- Currstatus.DownLink_Forward_Det_L = (Tx_Det_Volt & 0x00FF);
- printf("Tx_Det_Volt : %d \r\n",Tx_Det_Volt);
-
- /*DL RX Calc*/
- Currstatus.DownLink_Reverse_Det_H = ((Rx_Det_Volt & 0xFF00) >> 8);
- Currstatus.DownLink_Reverse_Det_L = (Rx_Det_Volt & 0x00FF);
-
- /*Temp Calc*/
- Currstatus.Temp_Monitor = Real_Temperature;
-
-
- }
- void ADC_Initialize(){
- while(!(HAL_ADCEx_Calibration_Start(&hadc1)==HAL_OK));
- HAL_ADC_Start_DMA(&hadc1, (uint16_t*)ADC1value,(uint32_t) 3);
- }
-
- uint8_t ADC_Convert_Temperature(double val){
- int16_t ref_0temp = 500;
- int16_t ret = val * 1000;
- int8_t cnt = 0;
-
- printf("ret : %d \r\n", ret);
- if( ret - ref_0temp > 0){
- for(int i = 0; i < ret - ref_0temp; i += 10){
- cnt++;
- }
- }else{
- for(int i = 0; i > ret - ref_0temp; i -= 10){
- cnt--;
- }
- }
- printf("Temp : %d\r\n",cnt);
- return cnt;
- }
- uint32_t SumFunc(uint32_t* data,uint16_t size){
- uint32_t ret = 0;
- for (uint16_t i = 0; i < size; i++) // 배열의 요소 개수만큼 반복
- {
- ret += data[i]; // sum과 배열의 요소를 더해서 다시 sum에 저장
- // printf("ret : %d data[%d] \r\n",ret,i,data[i]);
- }
- return ret;
- }
-
-
- void DascendigFunc(int32_t* src,uint32_t size ){
- int32_t temp;
-
-
- for(int i = 0 ; i < size - 1 ; i ++) {
- for(int j = i+1 ; j < size ; j ++) {
- if(src[i] < src[j]) {
- temp = src[j];
- src[j] = src[i];
- src[i] = temp;
- // printf("temp");
- }
- }
- }
- }
- #define Percent100 5
-
- void ADC_Check(){
- float tempval = 0;
- for(int i = 0; i < 3 ; i++)
- printf("ADC1value[%d] : %d \r\n",i,ADC1value[i]);
-
-
-
-
- #if 0 // PYJ.2020.09.09_BEGIN --
- Currstatus.DownLink_Forward_Det_H
- = (((uint16_t)tempval & 0xFF00) >> 8);
- Currstatus.DownLink_Forward_Det_L
- = (((uint16_t)tempval & 0x00FF) );
- #endif // PYJ.2020.09.09_END --
- ADC_Value_Get();
- // Currstatus.Temp_Monitor = ADC_Convert_Temperature((ADC1value[2]/1000));
- // printf("Currstatus.DownLink_Forward_Det : %d \r\n",Currstatus.DownLink_Forward_Det_H << 8 | Currstatus.DownLink_Forward_Det_L);
- }
- void ADC_TDD_Arrange(){
- uint32_t ADC1_Average_value = 0;
-
-
- if(TDD_125ms_Cnt > 125)
- {
-
- // printf("================TotalCnt %d =================\r\n",TotalCnt);
- #if 1 // PYJ.2020.09.09_BEGIN --
- DascendigFunc(&ADC1_Arrage_Ret[0],ADC_AVERAGECNT);
-
- // for(int i = 0; i < 100; i++){/*ADC Data Dascending Complete*/
- // printf("ADC1_Arrage_Ret[%d] : %d \r\n",i,ADC1_Arrage_Ret[i]);
- // }
-
- ADC1_Average_value = SumFunc(&ADC1_Arrage_Ret[0],Percent100);
-
- // printf("ADC1_Average_value Sum : %d \r\n",ADC1_Average_value);
- ADC1_Average_value /=Percent100;
- // printf("ADC1_Average_value : %d \r\n",ADC1_Average_value);
- for(int i = 0; i < ADC_AVERAGECNT; i++){
- ADC1_Arrage_Ret[i] = 0;
- }
-
- Currstatus.DownLink_Forward_Det_H
- = (((uint16_t)ADC1_Average_value & 0xFF00) >> 8);
- Currstatus.DownLink_Forward_Det_L
- = (((uint16_t)ADC1_Average_value & 0x00FF) );
- #else
- for(int i = 0; i < ADC_AVERAGECNT; i++){
- ADC1_Arrage_Ret[i] = ADC1_Arrage[i];
- }
- #endif // PYJ.2020.09.09_END --
-
-
- TotalCnt = 0;
- TDD_125ms_Cnt = 0;
- }
-
- }
-
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
- {
- if(hadc->Instance == hadc1.Instance && TDD_125ms_Cnt < 125)
- {
-
- ADC1_Arrage[adc1cnt] = ADC1value[0];
- // for(int i = 0; i < 2; i++){
- // printf("ADC1value[%d] : %d , %f\r\n",i,ADC1value[i],(float)((ADC1value[i]) *3.3 /4095));
- // }
- adc1cnt++;
-
- if(adc1cnt == ADC_AVERAGECNT){
- // DascendigFunc(&ADC1_Arrage[0],ADC_AVERAGECNT);
-
- adc1cnt = 0;
- TotalCnt++;
- if(TotalCnt > 2)
- TotalCnt = 2;
-
- for(int i = 0; i < 100; i++){/*ADC Data Dascending Complete*/
- if(ADC1_Arrage_Ret[i] <= ADC1_Arrage[i])
- ADC1_Arrage_Ret[i] = ADC1_Arrage[i];
- }
- DascendigFunc(&ADC1_Arrage_Ret[0],ADC_AVERAGECNT);
- // for(int i = 0; i < 100; i++){/*ADC Data Dascending Complete*/
- // printf("ADC1_Arrage_Ret[%d] : %d \r\n",i,ADC1_Arrage_Ret[i]);
- // }
- // else
- // ADC1_Arrage_Ret[i] /= TotalCnt;
-
- }
- // if(adc1cnt < ADC_AVERAGECNT){
- // for(int i = 0; i < ADC1_CNT; i++){
- // ADC1valuearray[i][adc1cnt] = ADC1value[i];
- // }
- // adc1cnt++;
- // }
- }
- }
|