Определение отклонения сигнала от заданного

Наша цель определить отклонение формы спада сигналов от заданного значения, более чем на 20%.Аналоговый входной сигнал с некоторым периодом оцифровывается. По разности между соседними выборками сигнала определяется часть импульса  (фронт, вершину, спад). Если разность между прошлой выборкой и текущей отрицательная  (фронт импульса), или равна “0” (вершина импульса), значения выборок игнорируются. Если разность между прошлой выборкой и текущей положительная, то мы имеем спад импульса (что и требуется отслеживать по заданию). Как только мы определили спад импульса, берется значение выборки, определяется значение следующей и величина его отклонения (вычисляется максимум и минимум). Эти значения сохраняются, и значение следующей выборки сравнивается с найденными максимумом и минимумом. Если были получены значения “больше максимума” (ошибка1) или “меньше минимума ”(ошибка2), эти события заносятся в специальный регистр-индикатор.

По окончании времени контроля  информация об отклонении формы спада сигналов от заданного значения (содержимое регистра-индикатора), “выдается в порт  D”.

Для работы микроконтроллера необходимо осуществить аналого-цифровое преобразование. Здесь есть два варианта:  использовать внутренний АЦП микроконтроллера либо установить внешний АЦП. Критерием выбора данного узла являются: разрешающая способность, быстродействие, точность. Исходя из параметров сигнала, (длительность фронта по ТЗ 0,3мс), выберем быстродействие, минимум на порядок большее. Это составит примерно 100 тыс. выборок в секунду. Внутренний АЦП микроконтроллера имеет быстродействие в 15 тыс. выборок в секунду, следовательно, необходим внешний АЦП. Исходя из предъявленных требований, выберем широко распространенный АЦП ADC0801 .

 

Критерием выбора МК является наличие необходимых периферийных узлов, количество линий ввода-вывода. Всему заявленному соответствует микроконтроллер ATmega8. 

 

Выберем параметры элементов масштабирующего усилителя

  

 

Для достижения К=5В, необходимо, чтобы номиналы R1 и R2

 соотносились как 1/50 соответственно. Выберем значения 10К и 500К.

При приведении к стандартному ряду получим R1=10К и R2=470К 

Аналоговый входной сигнал поступает на усилитель, в котором усиливается по напряжению до уровня, необходимого для работы АЦП. Аналого-цифровой преобразователь периодически запускается микроконтроллером, т.о. аналоговый сигнал периодически оцифровывается (производятся выборки сигнала). Цифровой код, соответствующий аналоговому сигналу, поступает на микроконтроллер. В МК производится цифровая обработка и принятие решения об отклонении формы сигнала от заданной. По истечении времени

По окончании времени контроля  информация об отклонении формы спада сигналов от заданного значения (содержимое регистра-индикатора), выдается в порт МК.

Для того, чтобы иметь возможность отслеживать временные параметры импульса, создадим 2 программных “канала” – канал 1 и  канал 2. Будем заносить значения соседних выборок поочередно то в первый, то во второй канал. Сравнением соседних выборок, определяется часть импульса (фронт, вершина, спад). По заданию мы должны отслеживать отклонение формы спада импульса от линейной. Таким образом если у нас разность между соседними выборками равна 0 (напряжение не меняется), обе выборки игнорируются. То же происходит если разность между прошлой выборкой и текущей положительная (напряжение возрастает).

         Если напряжение убывает, разность значений между прошлой выборкой и текущей отрицательная. Заносим значение в первый канал. Далее т.к.  напряжение должно убывать линейно, вычисляем предполагаемое значение следующей выборки (next_samp) путем вычитания из значения выборки величины шага (в программе константа STEP). Получив предполагаемое значение следующей выборки, вычисляем пределы в которых оно должно находиться. Для этого вычисляется значение 20% от next_samp (в подпрограмме delenie5), полученное значение заносится в переменную del_cnt. Затем, путем прибавления к значению next_samp числа del_cnt, вычисляется верхний (максимальный) порог следующей выборки (next_h). Аналогично, но вычитанием, определяется нижний (минимальный) порог (next_l).

         При следующей выборке ее значение заносится во второй канал. Там происходит сравнение с нижним и верхним порогами.  При превышении максимального значения в специальный регистр-индикатор (ind_reg) заносится число 1, если же было получено значения меньше минимального, вind_reg заносится число 2.

         На рисунке 4 показана блок-схема программы инициализации контроллера. В ней производится конфигурирование и настройка необходимых узлов микроконтроллера, а именно:

         -настройка портов (B,C,D)

         -настройка таймеров (Т2,Т1)

         -инициализация стека.

На этом инициализация микроконтроллера завершена. Далее разрешаются прерывания и счетчик команд уходит в основной цикл.

         За включение и выключение АЦП отвечает Т2. Он генерирует 2 прерывания -прерывание по совпадению с регистром сравнения и прерывание по переполнению. В первом случае АЦП запускается, во втором – останавливается.

      Необходимое время контроля составляет 2.5с. Это значение хранится в регистре сравнения  Т1. Когда Т1 досчитывает до этого значения, вызывается прерывание. В этом прерывании информация об отклонении (содержимое регистра-индикатора) заносится в порт D. 

 

 Схема модели на компьютере: