Advertisement
glavmonter

TEC

Mar 3rd, 2025
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. #define CURRENT_SENSE_REFERENCE     (3.3f)
  2. #define CURRENT_GAIN                (20.0f)
  3. #define ADC_REFERENCE               (3.3f)
  4. #define ADC_RESOLUTION              (4096.0f)  // 12 bit
  5. #define SHUNT_RESISTANCE            (0.005f)
  6.  
  7. #define VOLTAGE_SENSE_REFERENCE     (3.3f)
  8. #define VOLTAGE_GAIN                (48.7f / 3.01f)
  9.  
  10.  
  11. /**
  12.  * @brief Перевод сырых данных АЦП в ток через Пельтье
  13.  * Шунт 0.005 Ом, усиление 20, смещение нуля 2.5 В.
  14.  * @param[in] raw_adc - Сырые данные АЦП
  15.  * @param[in] offset - смещение нуля [В]
  16.  * @param[out] overflow - Флаг переполнения АЦП
  17.  * @return float ток через Пельтье
  18.  */
  19. float ConvertToCurrent(int32_t raw_adc, float offset, bool *overflow) {
  20.     if (overflow != nullptr) {
  21.         *overflow = (raw_adc >= 0xfff);
  22.     }
  23.  
  24.     float v = (float)raw_adc / ADC_RESOLUTION * ADC_REFERENCE;
  25.     return (v - CURRENT_SENSE_REFERENCE / 2.0f) / (CURRENT_GAIN * SHUNT_RESISTANCE) - offset;
  26. }
  27.  
  28. /**
  29.  * @brief Перевод сырых данных АЦП в напряжение на клеммах Пельтье
  30.  * Дифференциальный усилитель с G = 3.02/48.7 смещение 3,3В/2
  31.  * @param[in] raw_adc - Сырые данные АЦП
  32.  * @param[in] offset - Смещение нуля, вычитается из итогового результата [В]
  33.  * @param[out] overflow - Флаг переполнения АЦП
  34.  * @return float напряжение на выводах Пельтье, В
  35.  */
  36. float ConvertToVoltage(int32_t raw_adc, float offset, bool *overflow) {
  37.     if (overflow != nullptr) {
  38.         *overflow = (raw_adc >= 0xfff);
  39.     }
  40.  
  41.     float v = (float)raw_adc / ADC_RESOLUTION * ADC_REFERENCE;
  42.     return (v - VOLTAGE_SENSE_REFERENCE/2.0f) * VOLTAGE_GAIN - offset;
  43. }
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement