Микроконтроллеры в домашних условиях
 

Осциллограф из ПК.

Общее описание

Схема устройства

Прошивка

Программа на ПК

Фото

Общее описание

Необходимость в осциллографе рано или поздно возникает, наверное, у каждого радиолюбителя.

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

Компьютер в этом случае используется для отображения информации в привычном графическом виде. Для измерения используется встроенный АЦП контроллера. Измеряемые данные поступают в ПК через USART.

Конечно же, наш осциллограф должен иметь два канала. Кроме этого, он должен иметь возможность измерения сигналов с напряжением порядка сетевого.

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

Существует некоторое ограничение на частотные характеристики разрабатываемого устройства. Связано это с небольшим быстродействием встроенного в контроллер АЦП. Однако, с учетом того, что наша модель бюджетная, и отсутствия в обозримом списке сфер применения осциллографа высокочастотных задач, указанное обстоятельство не столь критично.

Итак, основные характеристики осциллографической приставки к ПК:

Наверх

Схема устройства

Осциллограф схема

Рис. 1. Принципиальная схема

Устройство построено на двух контроллерах PIC16F876A. Каждый контроллер выполняет функцию канала измерения входного сигнала.

Контроллер DD1 является ведущим (или левым каналом - по компоновке органов управления). DD2 - ведомый (или правый канал).

Гальваническая развязка между ведущим и ведомым, а также, компьютером выполнена на оптопарах PC817.

Ведущий осуществляет прием команд от ПК, передачу в ПК состояния ведущего и ведомого, а также, передает в ПК данные измерений собственного и ведомого каналов.

Ведомый по команде от ведущего передает ему свой статус, либо измеренные данные.

Конструктивно схема состоит из трех развязанных гальванически частей. Каждая часть имеет свое питание, контролируемое светодиодами.

Питание каждого канала организовано от зарядного устройства для сотовых телефонов. Часть схемы, осуществляющая интерфейс с com портом, питается по кабелю от USB разъема (просто в наличии не было третьего зарядного).

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

Для приведения входного сигнала к допустимому для измерения АЦП диапазону установлен резистивный делитель. После делителя сигнал подается через контакт реле и через схему защиты на вход АЦП.

Тумблером SB1 (SB2) включается смещение нулевого потенциала (регулируемого резисторами R1 и R2) для отображения сигналов с отрицательной полярностью.

Входной делитель смонтирован на галетном переключателе, имеющем две платы. На первой смонтирован собственно сам делитель. Вторая плата использована для монтажа другого делителя, контролирующего положение переключателя. В контролирующий делитель включена, также, группа контактов тумблера SB1 (SB2).

Сигнал со входа, кроме делителя, подается на проверочный делитель и далее через схему защиты на вход AN3 контроллера.

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

Измерение входных сигналов производятся по команде с ПК (при нажатии кнопки "Старт") синхронно в обоих каналах. После этого сначала ведущий передает в компьютер данные АЦП своего канала, затем получает данные от ведомого, после чего, также, передает их в ПК.

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

Монтажную плату устройства в формате Sprint-Layout 5.0 скачиваем здесь.

Наверх

Прошивка

Скачиваем файлы прошивок ведущего и ведомого.

Описание исходного кода прошивки ведущего приведено ниже.

Микроконтроллер PIC16F876A использует внешний кварцевый резонатор 20 МГц. Сторожевой таймер выключен.

Аппаратный USART используется для связи с ПК, настроен на скорость 9600 бод.

Таймер 0 используется в двух режимах: в режиме измерения по входу и в режиме обмена данными с ведомым.

В режиме измерения по входу, в зависимости от выбранной частоты дискретизации, устанавливаются три значения предделителя: для периода 40 мксек - значение 1:1, для периода 100 мксек - значение 1:2, для периода 200 мксек - 1:4. Здесь используются прерывания по таймеру 0.

В режиме обмена данными с ведомым таймер 0 используется для ожидания начала или окончания импульса синхронизации. Работает без прерываний. Предделитель 1:4.

Таймер 1, также, используется в двух режимах.

Первый - в режиме измерения по входу служит для выдержки времени после включения реле до начала измерения. Предделитель установлен 1:8, используется прерывание.

Второе использование таймера 1 - устанавливается выдержка 20 мксек для работы АЦП в режиме измерения по входу. Предделитель 1:1, используется прерывание.

Таймер 2 используется только при отправке данных по USART. Служит для выдержки времени, необходимой для передачи одного байта. Отсчитывает период 1,6 мсек. Предделитель 1:4, выходной делитель 1:8. Работает по прерыванию.

Приемник USART также работает по прерыванию.

В основном цикле программы поочередно вызываются четыре подпрограммы.

Подпрограмма CHECK_POSITION служит для измерения значения напряжения на входе AN1 АЦП. Измерение происходит в случае, если установлен флаг AD_FLAGS, 1. Этот флаг устанавливается каждый раз при отправке статуса от ведущего в ПК - примерно 1 раз в 100 мсек. Измеренное значение хранится в регистре POSITION и отправляется в ПК при следующем запросе статуса. В ПК происходит обработка этого байта и определение положения органов управления осциллографом.

В подпрограмме CHECK_MAX_VALUE при каждом ее вызове происходит измерение значения напряжения на входе AN1 АЦП. Это напряжение поступает на вход с проверочного делителя. Здесь же происходит сохранение максимального измеренного значения за несколько вызовов подпрограммы - регистры MAX_VALUE_H и MAX_VALUE_L, которые передаются в ПК при каждом запросе статуса.

Подпрограмма A_D_CONVERT выполняется при установленном флаге AD_FLAGS, 0 по команде, получаемой из ПК. Здесь происходит передача команды ведомому на начало измерения. После этого включается реле и запускается таймер 1. Во время паузы перед измерением, необходимой для нормального замыкания контактов реле, происходит измерение сигнала без сохранения данных. В случае неоднократного получения из АЦП значения FFh происходит сброс реле и выход из подпрограммы измерения. Этим достигается дополнительная защита от перегрузки.

По истечении времени, задаваемого таймером 1, устанавливаем сигнал на выход порта C4 для синхронизации начала измерения ведомым контроллером. Также устанавливаем флаг MEMORY_FLAGS, 0 и включаем таймер 0.

Далее при помощи прерываний по таймеру 0 и таймеру 1 происходит измерение сигнала на входе AN0 АЦП с установленным интервалом и запись измеренных значений в память данных с использованием косвенной адресации.

По окончании установленного диапазона памяти флаг MEMORY_FLAGS, 0 сбрасывается и в подпрограмме A_D_CONVERT отключается реле входа АЦП.

После этого устанавливается флаг MEMORY_FLAGS, 5 и запускается таймер 2, в прерываниях которого происходит последовательная передача сохраненных байтов из памяти данных с последующим сбросом флага.

Далее устанавливается флаг SLAVE_TR_FLAGS, 2 на время передачи данных, измеренных ведомым и сохранения их в память данных.

После этого опять устанавливается флаг MEMORY_FLAGS, 5 и запускается таймер 2 для передачи данных, полученных от ведомого в ПК.

В подпрограмме TRANSACT_WITH_SLAVE при установленном флаге SLAVE_TR_FLAGS, 0 происходит обмен данными с ведомым. При этом временные рамки обмена задаются программно.

При обмене данными с ПК используется аппаратный USART. В прерываниях по приему обрабатываются следующие команды от ПК: 40h - запрос статуса, 45h - начало измерения. Вместе с командой на начало измерения ПК передает дополнительный параметр: 30h - частота дискретизации 25 кГц, 31h - частота дискретизации 10 кГц, 32h - частота дискретизации 5 кГц.

В ответ на запрос статуса ведущий передает в ПК восемь байт статуса: 1 - POSITION ведущего, 2 - MAX_VALUE_L ведущего, 3 - MAX_VALUE_H ведущего, 4 - байт ошибок ведущего, 5 - POSITION ведомого, 6 - MAX_VALUE_L ведомого, 7 - MAX_VALUE_H ведомого, 8 - байт ошибок ведущего.

После отправки статуса в ПК устанавливается флаг SLAVE_TR_FLAGS, 0 и в подпрограмме TRANSACT_WITH_SLAVE происходит получение данных статуса от ведомого.

 

прошивка 1 прошивка 2 прошивка 3 прошивка 4 прошивка 5 прошивка 6 прошивка 7 прошивка 8 прошивка 9 прошивка 10 прошивка 11 прошивка 12 прошивка 13 прошивка 14 прошивка 15 прошивка 16 прошивка 17 прошивка 18 прошивка 19 прошивка 20 прошивка 21 прошивка 22 прошивка 23 прошивка 24 прошивка 25 прошивка 26

 

Описание исходного кода прошивки ведомого приведено ниже.

Микроконтроллер PIC16F876A использует внешний кварцевый резонатор 20 МГц. Сторожевой таймер выключен.

Таймер 0 используется для отсчета интервалов при измерении. Работает по прерываниям.

Таймер 1 служит для выдержки времени включенного состояния реле. Здесь таймер включается дважды до тех пор, пока не будет получен импульс синхронизации, запускающий измерение с сохранением данных. Кроме этого, таймер используется для отсчета интервалов, необходимых для работы АЦП при измерении. В обоих случаях работа ведется по прерываниям.

Таймер 2 необходим при ожидании окончания импульса инициализации ведущего в режиме обмена данными. Работает без прерываний.

Подпрограммы CHECK_POSITION и CHECK_MAX_VALUE работают аналогично описанным для ведущего.

Подпрограмма A_D_CONVERT имеет некоторые отличия. После включения реле происходит ожидание импульса синхронизации от ведущего для обеспечения синхронизации измерений в обоих каналах. Если импульса не поступает, то происходит выход из подпрограммы по истечении выдержки времени, задаваемой таймером 1. Во время ожидания, также как и у ведущего, происходит измерение сигнала на входе без записи в память на предмет выявления перегрузок. После появления импульса синхронизации измерение и запись происходит как у ведущего. После измерения происходит выход из подпрограммы.

В подпрограмме TRANSACT_WITH_MASTER при наличии инициализации происходит обмен данными с ведущим. Временные рамки потокола обмена устанавливаются программно.

 

прошивка 1 прошивка 2 прошивка 3 прошивка 4 прошивка 5 прошивка 6 прошивка 7 прошивка 8 прошивка 9 прошивка 10 прошивка 11 прошивка 12 прошивка 13 прошивка 14 прошивка 15 прошивка 16 прошивка 17 прошивка 18 прошивка 19 прошивка 20 прошивка 21 прошивка 22

 

Наверх

Обмен данными ведущего с ведомым происходит с использованием двухпроводного интерфейса с оптической развязкой. Временные параметры обмена представлены на рис. 2.

Формат обмена данными

Рис. 2

Временные интервалы приведены в микросекундах. Импульсы, показанные сплошной линией, передаются ведущим, штриховой - ведомым.

Первый импульс инициализации необходим для запуска ведомым подпрограммы связи. Длительность выбрана с учетом того, что за время его трансляции подпрограмма связи у ведомого будет гарантированно вызвана.

После инициализации ведомый ждет окончания импульса и отправляет ответ для синхронизации с ведущим.

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

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

Ведомый определяет следующие байты команд (команды передаются только по четыре младших бита): 01h - отправить регистр POSITION, 02h - отправить регистр MAX_VALUE_L, 03h - отправить регистр MAX_VALUE_H, 04h - отправить байт ошибок, 05h - начало измерения с частотой 25 кГц, 06h - начало измерения с частотой 10 кГц, 07h - начало измерения с частотой 5 кГц, 08h - отправить очередной измеренный байт.

Обмен происходит по одному байту за один цикл при использовании команд 05h, 06h, 07h и 08h.

За один цикл обмена при передаче четырех байт статуса проходит только один импульс инициализации от ведущего (команды 01h, 02h, 03h и 04h).

Наверх

Программа на ПК

Программу осциллографа вместе с исходниками в формате Delphi скачиваем здесь.

Варианты окна программы приведены на скриншотах ниже.

Скриншот1

Скриншот2

Наверх

Измерение сигнала происходит путем нажатия на кнопку "Старт".

Различие между двумя скриншотами состоит в том, что значения напряжений на первом отображены черным цветом. Это информирует о том, что включено смещение нуля в обоих каналах и определить амплитуду напряжения в канале не получится (этот режим используется только для определения общего вида кривой напряжения).

На нижнем скриншоте напряжения показаны в цвете, что информирует о возможности произвести отсчет.

Теперь несколько слов о калибровке.

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

Необходимо произвести калибровку устройства для обоих каналов на всех пределах измерения.

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

На скриншоте показан вид окна программы с некалиброванными каналами.

Скриншот3

Наверх

Здесь по оси ординат отложены абсолютные значения, измеренные АЦП.

Для калибровки необходим источник постоянного напряжения, например, ЛАТР.

С помощью ЛАТРа устанавливаем необходимые напряжения, которые измеряем поверенным вольтметром, и соответствующие этим напряжениям значения, полученные на экране развертки.

Для достоверности результата выполняем около десяти измерений на всем диапазоне данного предела для данного канала. Затем определяем коэффициент калибровки, как частное от деления напряжения на абсолютную величину, измеренную АЦП. Для каждого предела находим среднее значение этого коэффициента.

После этого полученные коэффициенты подставляем в числитель дроби в процедуре ShowOnGraph проекта Delphi.

Полученные у меня значения показаны на скриншоте в числителях дроби (для левого канала).

Скриншот4

Наверх

Фото

Фотографии готового устройства приведены ниже.

Фото1

 

Фото2

Наверх

Наверх