Форум Zentec

Программное обеспечение => Вопросы по zWorkbench => Макросы и библиотеки => Тема начата: mike от 27 октября 2015, 13:15:44

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

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

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

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

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

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

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

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