Archived

Этот пост заблокирован, редактирование отключено

Программное обеспечениеМакросы и библиотекиМакрос фильтрации аналогового сигнала

Исходное сообщение:
mike, 27.10.2015, 13:15
mike
Макрос фильтрации аналогового сигнала
Вход ini - подать лог. 1 после инициализации АЦП контроллера
Вход Ain - фильтруемый параметр, например, температура
Вход Kf - постоянная фильтра. При 0 фильтр отключен. Максимальное значение 100. При максимальном значении происходит максимальное сглаживание входного сигнала. Для температуры постоянную фильтра целесообразно выбирать из диапазона 35-65.
Ответы:
mike, 27.10.2015, 14:57
mike
Макрос фильтрации аналогового сигнала
Написал простой пример использования макроса фильтра.

Код АЦП со всех аналоговых каналов (в данном случае 3 канала) поступает на аналоговый мультиплексор-преобразователь.
После мультиплексора-преобразователя целое значение температуры поступает на вход блоков фильтрации.
С выходов блоков фильтрации получают отфильтрованное и округленное до десятой значение температуры.
mike, 27.10.2015, 15:46
mike
Макрос фильтрации аналогового сигнала
Устройство блока мультиплексора-преобразователя.

Мультиплексирование каналов нужно для более рационального использования памяти программ контроллера.
В этом блоке происходит преобразование кода АЦП в температуру и линеаризация показаний каналов. Если не использовать мультиплексор, то потребуется в три раза бо'льший объем памяти программ, т.к. преобразование кода АЦП в температуру производится по таблице, которая "отъедает" значительный объем памяти.

На счетчике и мультиплексоре построен последовательный сканер. Счетчик тактируется от внутреннего цикла контроллера (напомню, что цикл контроллера переменный и в любой момент времени цикл не может быть определен). Тактирование от внутреннего цикла имеет преимущество над тактированием от внешнего генератора: сканирование будет происходить с максимально возможной скоростью в каждый момент исполнения программы.
Далее сигнал со сканера подается на блок линеаризации в котором происходит преобразование кода АЦП в температуру.
Для оптимизации нагрузки на ЦПУ контроллера выбран "щадящий" тип данных выхода - знаковый два байта целый.
Для минимизации потерь значащих данных значения в таблицу заносились с множителем 100 (об этом есть статья на сайте).
С выхода блока линеаризации значение температуры одновременно подается на входы трех триггеров, выполненных на переменных temp1 - temp3.
Сигнал разрешения записи в триггеры формируется магистральным дешифратором, выполненным на основе демультиплексора с логическим типом данных. Дешифратор синхронизирован с мультиплексором каналов.

Аналогичным образом построены каналы определения обрыва / замыкания температурных датчиков.

mike, 27.10.2015, 15:53
mike
Макрос фильтрации аналогового сигнала
После преобразований не отфильтрованное значение температуры подается на блок "чистовой" обработки.

Блок фильтрации аналогового сигнала осуществляет фиксирование аварийного состояния и, собственно, фильтрацию значения температуры.

Фиксация аварии и работа апериодического фильтра разрешается только после инициализации АЦП контроллера (на входе ini присутствует уровень лог. 1)