Advertisement
Guest User

Untitled

a guest
Aug 14th, 2021
680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.59 KB | None | 0 0
  1. static uint32_t Channel = 0;
  2. static uint16_t SDADC_Single[12];
  3. static uint16_t SDADC_Differential[5];
  4. static float SDADC_Single_Calibration_Gain[12] = {0};
  5. static float SDADC_Single_Calibration_Bias[12] = {0};
  6. static float SDADC_Differential_Calibration_Gain[5] = {0};
  7. static float SDADC_Differential_Calibration_Bias[5] = {0};
  8.  
  9. void STM32_PLC_Start_Analog_Input(TIM_HandleTypeDef* htim12, TIM_HandleTypeDef* htim13, TIM_HandleTypeDef* htim16, SDADC_HandleTypeDef* hsdadc1, SDADC_HandleTypeDef* hsdadc2, SDADC_HandleTypeDef* hsdadc3) {
  10.     HAL_TIM_OC_Start(htim13, TIM_CHANNEL_1); /* TIM13 is trigger source for SDADC1 */
  11.     HAL_TIM_OC_Start(htim12, TIM_CHANNEL_1); /* TIM12 is trigger source for SDADC2 */
  12.     HAL_TIM_OC_Start(htim16, TIM_CHANNEL_1); /* TIM16 is trigger source for SDADC3 */
  13.     if (HAL_SDADC_CalibrationStart(hsdadc1, SDADC_CALIBRATION_SEQ_1) != HAL_OK)
  14.         Error_Handler();
  15.     if (HAL_SDADC_CalibrationStart(hsdadc2, SDADC_CALIBRATION_SEQ_1) != HAL_OK)
  16.         Error_Handler();
  17.     if (HAL_SDADC_CalibrationStart(hsdadc3, SDADC_CALIBRATION_SEQ_1) != HAL_OK)
  18.         Error_Handler();
  19.     if (HAL_SDADC_PollForCalibEvent(hsdadc1, HAL_MAX_DELAY) != HAL_OK)
  20.         Error_Handler();
  21.     if (HAL_SDADC_PollForCalibEvent(hsdadc2, HAL_MAX_DELAY) != HAL_OK)
  22.             Error_Handler();
  23.     if (HAL_SDADC_PollForCalibEvent(hsdadc3, HAL_MAX_DELAY) != HAL_OK)
  24.             Error_Handler();
  25.     if (HAL_SDADC_InjectedStart_IT(hsdadc1) != HAL_OK)
  26.         Error_Handler();
  27.     if (HAL_SDADC_InjectedStart_IT(hsdadc2) != HAL_OK)
  28.         Error_Handler();
  29.     if (HAL_SDADC_InjectedStart_IT(hsdadc3) != HAL_OK) /* Differential only */
  30.         Error_Handler();
  31. }
  32.  
  33. void STM32_PLC_Analog_Input_SDADC1(SDADC_HandleTypeDef* hsdadc1) {
  34.     uint16_t value = HAL_SDADC_InjectedGetValue(hsdadc1, &Channel); /* Channel will have the numbers 0,1,2,3,4,5,6,7,8 but randomly */
  35.     switch(Channel) {
  36.     case 0:
  37.         SDADC_Single[8] = value;
  38.         break;
  39.     case 1:
  40.         SDADC_Single[7] = value;
  41.         break;
  42.     case 2:
  43.         SDADC_Single[6] = value;
  44.         break;
  45.     case 3:
  46.         SDADC_Single[3] = value;
  47.         break;
  48.     case 4:
  49.         SDADC_Single[2] = value;
  50.         break;
  51.     case 5:
  52.         SDADC_Single[1] = value;
  53.         break;
  54.     case 6:
  55.         SDADC_Single[0] = value;
  56.         break;
  57.     case 7:
  58.         SDADC_Single[5] = value;
  59.         break;
  60.     case 8:
  61.         SDADC_Single[4] = value;
  62.         break;
  63.     }
  64. }
  65.  
  66. void STM32_PLC_Analog_Input_SDADC2(SDADC_HandleTypeDef* hsdadc2) {
  67.     uint16_t value = HAL_SDADC_InjectedGetValue(hsdadc2, &Channel); /* Channel will have the numbers 0,1,2 but randomly */
  68.     switch(Channel) {
  69.     case 0:
  70.         SDADC_Single[11] = value;
  71.         break;
  72.     case 1:
  73.         SDADC_Single[10] = value;
  74.         break;
  75.     case 2:
  76.         SDADC_Single[9] = value;
  77.         break;
  78.     }
  79. }
  80.  
  81. void STM32_PLC_Analog_Input_SDADC3(SDADC_HandleTypeDef* hsdadc3) {
  82.     uint16_t value = HAL_SDADC_InjectedGetValue(hsdadc3, &Channel); /* Channel will have the numbers 0,2,4,6,8 but randomly */
  83.     switch(Channel) {
  84.         case 0:
  85.             SDADC_Differential[4] = value;
  86.             break;
  87.         case 2:
  88.             SDADC_Differential[3] = value;
  89.             break;
  90.         case 4:
  91.             SDADC_Differential[2] = value;
  92.             break;
  93.         case 6:
  94.             SDADC_Differential[1] = value;
  95.             break;
  96.         case 8:
  97.             SDADC_Differential[0] = value;
  98.             break;
  99.     }
  100. }
  101.  
  102. /* Get ADC0 to ADC11 */
  103. float STM32_PLC_Analog_Input_ADC_Get(uint8_t i) {
  104.     return SDADC_Single_Calibration_Gain[i]*((float)SDADC_Single[i]) + SDADC_Single_Calibration_Bias[i];
  105. }
  106.  
  107. /* Get raw ADC0 to ADC11 */
  108. uint16_t STM32_PLC_Analog_Input_ADC_Get_Raw(uint8_t i) {
  109.     return SDADC_Single[i];
  110. }
  111.  
  112. /* Set calibration ADC0 to ADC11 */
  113. void STM32_PLC_Analog_Input_ADC_Set_Calibration(uint8_t i, float min_value, float max_value, float bias_value) {
  114.     SDADC_Single_Calibration_Gain[i] = (max_value - min_value) / (0xFFFF);
  115.     SDADC_Single_Calibration_Bias[i] = bias_value;
  116. }
  117.  
  118. /* Get DADC0 to DADC4 */
  119. float STM32_PLC_Analog_Input_DADC_Get(uint8_t i) {
  120.     return SDADC_Differential_Calibration_Gain[i]*((float)SDADC_Differential[i]) + SDADC_Differential_Calibration_Bias[i];
  121. }
  122.  
  123. /* Get raw DADC0 to DADC4 */
  124. uint16_t STM32_PLC_Analog_Input_DADC_Get_Raw(uint8_t i) {
  125.     return SDADC_Differential[i];
  126. }
  127.  
  128. /* Set calibration DADC0 to DADC4 */
  129. void STM32_PLC_Analog_Input_DADC_Set_Calibration(uint8_t i, float min_value, float max_value, float bias_value) {
  130.     SDADC_Differential_Calibration_Gain[i] = (max_value - min_value) / (0xFFFF);
  131.     SDADC_Differential_Calibration_Bias[i] = bias_value;
  132. }
  133.  
  134. /* Callbacks for SDADC */
  135. void HAL_SDADC_InjectedConvCpltCallback(SDADC_HandleTypeDef *hsdadc) {
  136.     if(hsdadc->Instance == SDADC1) {
  137.         STM32_PLC_Analog_Input_SDADC1(hsdadc);
  138.     }else if (hsdadc->Instance == SDADC2) {
  139.         STM32_PLC_Analog_Input_SDADC2(hsdadc);
  140.     }else if (hsdadc->Instance == SDADC3) {
  141.         STM32_PLC_Analog_Input_SDADC3(hsdadc);
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement