Сообщение от ALEGYR
|
Ты хочешь сказать, что тебе надо 1000 раз в секунду делать прерывание и обсчитывать пид регулятор, чтобы сделать ШИМ-сигнал с периодом 1-10с ?
|
Опять приписываешь
мне свои
фантазии, видимо, так и не разобравшись в первой строке. ПИД-регулятор
не обсчитывается 1000 раз в секунду. Код ПИД-регулятора помечен в моем коде комментариями "начало" и "конец". этот участок исполняется 1 раз в EE_PID_TIME (от 1 до 10, напомню на всякий случай) секунд.
И разумеется, мне не надо обсчитывать ПИД-регулятор 1000 раз в секунду.
Его мне достаточно обсчитывать согласно заданному пользователем периоду регулирования. И чаще его обсчитывать нельзя.
А еще мне надо иметь прерывание минимум 100 раз в секунду для формирования ШИМ-сигнала с периодом в 1 секунду с дискретностью регулировки средней мощности, выдаваемой нагревателем, 1%
(более высокая частота, например, 1000 раз в секунду, вроде бы позволяет сделать дискретность и выше, но если присмотреться к коду и учесть то, что я говорил об исполнительных цепях, станет понятно, что дискретность таки получится от 1% при периоде регулирования 1 с, до 0,1% при периоде регулирования 10с соответственно, так как ток через нагреватель будет течь исключительно целое количество полупериодов напряжения сети, которых в одной секунде у нас 100, поэтому можно при желании вообще heat_counter-ом тикать не до "EE_PID_TIME*1000", а всего лишь до 100, всегда имея эту дискретность, только значение control соответственно смасштабировать при расчете, но выгоды это не даст абсолютно никакой)
И, наконец, мне надо прерывание 1000 раз в секунду для установки флага, по которому в основном цикле программы раз в миллисекунду отрабатывают конечные автоматы, реализующие всю логику работы устройства.
И вместо трех разных прерываний у меня одно. Экономия. И строго детерминированное исполнение кода.