stab_param.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #ifndef __STAB_PARAM_H__
  2. #define __STAB_PARAM_H__
  3. //================================================================
  4. //===========Настраиваемые параметры==============================
  5. //#define USE_EEPROM
  6. //================================================================
  7. //#define Debug // Раскомментить для дебажения
  8. //#define LED_debug // Раскомментить для вывода на светодиод сигнала управления твердотельным реле
  9. #define INTERFACE_ALT // Раскомментить для включения альтернативного интерфейса с большими символами
  10. #define High_level_triac // Раскомментить, если твердотельное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
  11. #define High_level_relay // Раскомментить, если контактное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
  12. //#define NOT_LM358 // Раскомментить, если в датчике напряжения стоит НЕ LM358, а rail-to-rail операционник
  13. //#define DisplayReset // Раскомментить, если используется вывод сброса дисплея
  14. #define DEBOUNCE 26 // Значение для обеспечения защиты от дребезга кнопок DEBOUNCE=1 + <задержка в ms>/10
  15. //
  16. //#define U_LINE_FREQ_60 // Раскомментить, если частота сети 60Гц, иначе - 50Гц
  17. //
  18. #define U_LINE 230 // Номинальное значение действующего напряжения в сети, для которого указана номинальная мощность ТЭНа
  19. #define U_MIN 180 // Значение напряжения в сети, ниже которого сеть считается аварийной
  20. #define U_LINE_Q 52900 // Квадрат номинала сети, для которого указана номинальная мощность ТЭНа
  21. //
  22. #define MENU_TIMEOUT 120 // Таймаут выхода из меню в секундах (не более 255)
  23. //
  24. //==================================================================
  25. //
  26. #ifdef U_LINE_FREQ_60
  27. #define LINE_FREQ 129 // Определяет начальную частоту для фазовой автоподстройки частоты сети (60,1Гц)
  28. #define PSUM_MAX 60 // Количество периодов для набора отсчетов АЦП (60 - это за 1 сек, это порядка 5000 отсчетов)
  29. #define P_TIME_MAX 120 // Количество полупериодов сети в секунду для отсчета времени
  30. #else
  31. #define LINE_FREQ 155 // Определяет начальную частоту для фазовой автоподстройки частоты сети (50,08Гц)
  32. #define PSUM_MAX 50 // Количество периодов для набора отсчетов АЦП (50 - это за 1 сек, это порядка 5000 отсчетов)
  33. #define P_TIME_MAX 100 // Количество полупериодов сети в секунду для отсчета времени
  34. #endif
  35. //
  36. //=============вход АЦП================
  37. #define pin_VACin 0 // Пин входа измеряемого напряжения (A0)
  38. //
  39. //===========входные выводы============
  40. #define pin_PC_STATE(pin) (~(PINC >> (pin - 14)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
  41. // Пин входа отключения разгона (A3)
  42. // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
  43. #define pin_RAZGON_OFF_STATE palReadLine(LINE_RAZGON_OFF)
  44. // Пин входа отключения стабилизатора (A2)
  45. #define pin_STAB_OFF_STATE palReadLine(LINE_STAB_OFF)
  46. //===========вЫходные выводы===========
  47. #define pin_PD_Out(pin) DDRD |=(1 << pin) // Инициализация выхода
  48. #define pin_PD_HIGH(pin) PORTD |=(1 << pin) // Установка выхода
  49. #define pin_PD_LOW(pin) PORTD &=~(1 << pin) // Сброс выхода
  50. #define pin_PD_INV(pin) PORTD ^=(1 << pin) // Инверсия выхода
  51. //===========выводы подключения кнопок===========
  52. #define pin_PB_STATE(pin) (~(PINB >> (pin - 8)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
  53. // Пин кнопки "Р-". Уменьшение уставки мощности.
  54. // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
  55. #define pin_butt_1_STATE palReadLine(LINE_BTN_1)
  56. // Пин кнопки "Р+". Увеличение уставки мощности.
  57. #define pin_butt_2_STATE palReadLine(LINE_BTN_2)
  58. // Пин кнопки "Стоп". Экстренное отключение ТЭНа.
  59. #define pin_butt_3_STATE palReadLine(LINE_BTN_3)
  60. // Пин кнопки "Разгон". Включение/отключение разгона.
  61. #define pin_butt_4_STATE palReadLine(LINE_BTN_4)
  62. //===============бортовой светодиод==============
  63. #define TURN_LED_ON LCD_LED_ON // Включаем светодиод
  64. #define TURN_LED_OFF LCD_LED_OFF // Выключаем светодиод
  65. //==============управление релюшками=============
  66. #ifdef High_level_triac // управление твердотельным реле высоким уровнем
  67. #define TURN_SSR_ON palSetLine(LINE_SSR) // Включаем ТЭН
  68. #define TURN_SSR_OFF palClearLine(LINE_SSR) // Выключаем ТЭН
  69. #else // управление твердотельным реле низким уровнем
  70. #define TURN_SSR_ON palClearLine(LINE_SSR) // Включаем ТЭН
  71. #define TURN_SSR_OFF palSetLine(LINE_SSR) // Выключаем ТЭН
  72. #endif
  73. #ifdef High_level_relay // управление контактным реле высоким уровнем
  74. #define TURN_RELAY_ON palSetLine(LINE_RELAY) // Включаем ТЭН
  75. #define TURN_RELAY_OFF palClearLine(LINE_RELAY) // Выключаем ТЭН
  76. #else // управление контактным реле низким уровнем
  77. #define TURN_RELAY_ON palClearLine(LINE_RELAY) // Выключаем ТЭН
  78. #define TURN_RELAY_OFF palSetLine(LINE_RELAY) // Включаем ТЭН
  79. #endif
  80. //========коэффициенты для ПИД-регулировки=======
  81. #define Kp 2 // Коэффициент пропорциональности для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
  82. #define Ki 5 // Интегральный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
  83. #define Kd 1 // Дифференциальный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
  84. #define Km 6 // Коэффициент для целочисленной математики (степень двойки для регистрового сдвига)
  85. #define PHASE 8 // сдвиг фаз между детекцией ноля и прерыванием таймера (в тиках таймера)
  86. #define T_MAX 180 // ограничение максимальной длительности полупериода в тиках таймера
  87. #define T_MIN 100 // ограничение минимальной длительности полупериода в тиках таймера
  88. //================прочие константы===============
  89. #define ZSUM_MAX 5000 // Количество отсчетов АЦП без детекции ноля (5000 отсчетов это порядка 1 сек)
  90. #define U_ZERO 512 // Значение нуля АЦП для двуполярного сигнала с постоянной составляющей на выходе ОУ
  91. #define T_ADC 49 // Определяет интервал между запусками АЦП (200 мкс) f_OCn = f_clk / 2*N*(1 + X), где N - коэффициент деления предделителя, X- содержимое регистра OCRnA
  92. #define CICLE 500 // Количество полупериодов в полном цикле регулирования (200 полупериодов - 2сек, 500 полупериодов - 5сек, больше ставить не надо)
  93. #define SRVDATA_ARR_SIZE 14 // Размер блока памяти для вспомогательных данных
  94. #define Pnom_ARR_SIZE 8 // Макс. размер массива записанных номинальных мощностей ТЭНа sizeof(Pnom_arr)/sizeof(Pnom_arr[0])
  95. #define PDMset_ARR_SIZE 6 // Размер массива уставок мощности ТЭНа sizeof(PDMset)/sizeof(PDMset[0]) (ставить не меньше 4)
  96. #if Pnom_ARR_SIZE > PDMset_ARR_SIZE
  97. #define ARRAY_SIZE Pnom_ARR_SIZE // Размер массива для работы с номиналами в начальном меню и уставками
  98. #else
  99. #define ARRAY_SIZE PDMset_ARR_SIZE // Размер массива для работы с номиналами в начальном меню и уставками
  100. #endif
  101. #endif // __STAB_PARAM_H__