пятница, 15 февраля 2013 г.

Урок 1. Блок Линеаризация

Первый урок посвящен вопросам обработки массивов (таблиц) данных.
Мы ознакомимся с возможностями блока Линеаризация, построим несколько кривых, научимся измерять физические величины.

Итак, создаём новый проект. В качестве целевой платформы указываем любую, например, виртуальное устройство.
Перетаскиваем на сцену блок Линеаризация и вызываем его свойства (F2 по выделенному).

В редакторе свойств блока можно выбрать количество выходов, типы данных входа и выходов, а так же перейти к непосредственному редактированию таблицы.

Пример 1. Преобразование уровня 0-10В в уровень 0-5В и 2-10В.

Предположим, в вашей прикладной программе существует устройство, выдающее управляющий сигнал 0-10В (с разрешением 10 бит) на исполнительный механизм.

Требуется преобразовать управляющее напряжение 0-10В в два напряжения: 0-5В и 2-10В.

Решение с использованием блока Линеаризация.
  1. По заданию, управляющее устройство формирует сигнал 0-10В, следовательно, выбираем тип данных входа Без знака, целый 2 байта.
  2. Разрешение ЦАП контроллеров Zentec - так же 10 бит. Минимальное напряжение на аналоговых выходах контроллера - 0В, а максимальное  - 10В. Соответственно, минимальному напряжению будет соответствовать код ЦАП - "0", а максимальному - "1023". Так как отрицательные значения на аналоговом выходе контроллеров не предусмотрены конструкцией, будем использовать тип данных выхода Без знака, целый 2 байта.
  3. По заданию требуется получить два выходных напряжения: 0-5В и 2-10В, поэтому поставим 2 выхода блоку Линеаризация.
  4. Нажимаем OK. Блок будет иметь один вход и два выхода.
  5. После этого снова вызываем свойства блока и переходим к редактированию таблицы. 
    Так как преобразование линейное, создадим всего две строки в таблице:
    - первая строка определяет нижний уровень напряжения;
    - вторая строка определяет верхний уровень напряжения.
  6. Определяем нижний уровень напряжения:
    - минимальное напряжение на входе блока "0", следовательно устанавливаем для выхода out значение "0" для напряжения 0-5В
    - для выхода out1 устанавливаем значение "205" (2x1023/10=204,6; где 2 - требуемое напряжение на выходе ЦАП в Вольтах, 1023 - разрядность ЦАП (10бит), 10 - максимальное напряжение (10В)).
  7. Определяем верхний уровень напряжения:
    - максимальное напряжение на входе блока "1023", следовательно устанавливаем на выходе out значение "512" (5x1023/10=511,5) для напряжения 0-5В
    -  на выходе out1 значение "1023" для напряжения 2-10В.



Таким образом мы получили линейное преобразование сигнала.


Пример 2. Преобразование кода АЦП в давление.

Допустим, ко входу Ain1 виртуального устройства подключен датчик давления жидкости с выходным сигналом 0-10В и диапазоном измерений от 0 до 4,2 Бар.

Требуется преобразовать код АЦП в давление.

Решение с использованием блока Линеаризация.


Блок Линеаризация требует много ресурсов контроллера. 
Поэтому, что бы сэкономить на ресурсах, преобразуем значение верхнего диапазона датчика давления (4,2 Бар) в целое число. Так как измеряемая величина не отрицательна, можно использовать для выхода блока Линеаризация тип данных Без знака, целый 2 байта.
В этот тип данных можно записать число от 0 до 
65 535. 
Воспользуемся этим и умножим 4,2 на 10 000. Получаем 42 000 при значении кода АЦП 1023.

  1. Тип данных входа блока Линеаризация используем Без знака, целый 2 байта.
  2. Тип данных выхода блока Линеаризация используем Без знака, целый 2 байта.
  3. Так как преобразование линейное, создадим две строки в таблице:
    - первая строка определяет нижнее значение давления;
    - вторая строка определяет верхнее значение давления. 
  4. Определяем нижнее значение давления:
    - давлению 0 Бар соответствует "0" на входе Ain1, следовательно устанавливаем для выхода out значение "0"
    - давлению 4,2 Бар соответствует "1023" на входе Ain1,
    следовательно устанавливаем для выхода out значение "42 000" (4,2x10 000=42 000).


Таким образом мы получили линейное преобразование давления. 

Для дальнейшей обработки полученного результата можно использовать целочисленные или дробные значения. 
Для получения дробных значений производим деление на 10 000 с типом данных Дробный 4 байта и получим результат с точностью 0,00410557 ед. изм. на один отсчёт.
Если необходимо, то округляем результат до заданного разряда блоком Округление.



Пример 3. Измерение температуры с помощью нелинейного датчика.

В предыдущих двух примерах мы производили линейные преобразования.
В примере №3  произведем измерение температуры с помощью нелинейного датчика NTC10k.



Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.