Тимош ©:Если можно в двух словах
Конечно.
Kusnezov Oleg уже дал ссылку на эту часть моего очередного хреносозидательства в предыдущем посте
Это узел отбора на основе перистальтического насоса.
Отбор на дисплее - условная скорость отбора.
На тот момент тем показаниям соответствует скорость 68 мл/час.
А объем, это объем отобранной жидкости(спирт) с момента сброса счетчика.
Это значение уже откалиброванное и соответствующее реальному.
Kusnezov Oleg ©:алгоритм подробно расскажешь, - перепрем эту полечку
Назовем так.
Алгоритм регулятора с обратной связью.
Фрагмент.
----
Используется 16-разрядный таймер T1, АЦП по входу ADC7 и вход INT0 как детектор нуля сетевого напряжения.
В основе алгоритма лежит обработка прерываний по событию перехода сетевого напряжения через 0 на входе INT0,
прерываний по событиям 16-разрядного таймера Т1, прерываний от АЦП.
----
Входное значение «заданное выходное напряжение».
----
Начнём с прерываний АЦП.
Использует переменные «сумма квадратов» 32 бита и «число отсчетов» 16 бит.
В подпрограмме обработки прерывания
- считываем измеренное значение,
- умножаем его само на себя,
- прибавляем к нему «сумму квадратов»,
- сохраняем новую «сумму квадратов»,
- увеличиваем «число отсчетов» на 1.
Всё, больше там ничего не делается.
Во время между измерениями укладываемся с запасом.
Измерение занимает 26 мкс = 416 циклов, подпрограмма 133 цикла.
----
Прерывания таймера.
Их используется три, они просты до безобразия:
- по совпадению с регистром А включает оптрон управления симистором;
- по совпадению с регистром В выключает оптрон управления симистором (в этот регистр загружено значение, обеспечивающее закрытие симистора
за 250 мкс до конца полупериода);
- по переполнению тоже выключает оптрон управления симистором (на всякий случай, а то вдруг детектор нуля накрылся).
Далее более интересное прерывание.
----
В момент перехода через 0 генерируется прерывание INT0.
По этому событию всегда выполняются следующие действия:
- выключается оптрон управления симистором;
- останавливается и обнуляется таймер Т1;
- загружается в регистр совпадения А таймера Т1 « задержка включения симистора»;
- запускается таймер.
Есть различия в том, какой переход через ноль был отловлен вниз или вверх.
---
Если отловлен переход через 0 вверх (подъем), то:
- запускаем заранее настроенный АЦП на непрерывные преобразования;
- включаем режим прерывания INT0 на ожидание перехода вниз (спада) через 0.
Всё.
---
Если отловлен переход через 0 вниз (спад), то:
- останавливаем АЦП;
- включаем режим прерывания INT0 на ожидание перехода вверх (подъема) через 0.
Так как измерения в отрицательном полупериоде не ведём, делаем следующее:
- вычисляем измеренное выходное Urms = корень квадратный из «сумма квадратов» деленной на «количество отсчетов»»;
- запоминаем вычисленное значение;
- обнуляем «сумму квадратов» и «количество отсчетов» для следующего цикла преобразований.
---
В этой точке уже имеем необходимые данные для регулирования.
Примерно в этих местах делаем вычисление усредненного Urms за какое-то количество периодов.
Вычисляем вхождение в заданный коридор точности и т.п. функции.
---
Используются переменные
«заданное выходное напряжение»,
«измеренное выходное напряжение»,
« задержка включения симистора».
Сравниваем «заданное выходное напряжение» и «измеренное выходное напряжение».
- если первое больше второго, то уменьшаем « задержку включения симистора»;
- иначе увеличиваем « задержку включения симистора».
Это значение будет использовано при ближайшем переходе через 0.
Сравнения и вычисления идут непрерывно каждый отрицательный полупериод каждого периода сетевого напряжения,
вводятся коррекции в « задержку включения симистора»
и в конце концов выходное напряжения становится равным заказанному.
С некоторой точностью.
---
Разумеется, всё это подвергается проверке на допустимые значения, используются корректирующие коэффициенты для лучшего использования разрядной сетки и упрощения вычислений.
---
Все вычисления идут исключительно целочисленные разрядностью 16 или 32 бита.
Всякие свистелки, перделки и управлялки реализованы другими кусками кода.
---
Под занавес картинка для наглядности, что ли.
Желтая линия – входное напряжение, зеленая – выходное, синяя – управляющий симистором сигнал, красная – переходы входного напряжения через 0.

По поводу коэффициентов, входных делителей и подобной лабуды, если кому интересно, могу написать позже.
Перечитал сей опус.
Вроде не напорол откровенной лажи.
Если что - от ответственности отказываюсь. 
-
regpic00.JPG
size: 80.58Кб
type: JPG
РК 35х1600