Проект Eldigi.ru пережил своё новое становление. В связи с этим на сайте могут быть ошибки. Нашли ошибку? Помогите проекту, выделите её и нажмите Ctrl+Enter. Подробнее...

АЦП с интерфейсом RS232 (PIC12F675, asm)

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

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

Исходя из необходимости передавать результаты работы АЦП в приложения Windows и сравнительной простоты гальванической развязки, выбор сделан в пользу АЦП, подключаемого к персональному компьютеру через последовательный порт СОМ и передающего информацию согласно стандарту RS-232. Недостаток — ограничение скорости передачи значением 115,2 кБод (в некоторых компьютерах до 256 кБод) — компенсирует простота реализации аппаратной и программной составляющих виртуального прибора.

Подключаемая к компьютеру приставка построена по схеме, показанной на рис. 1, на микроконтроллере PIC12F675 [3J со встроенным четырехканальным 10-разрядным АЦП. Использованы только два канала, их входы ANO (выв. 7)и AN1 (выв. 6) служат соответственно аналоговыми входами 1 и 2. Линия GP3 (выв. 4) — цифровой вход, состояние которого прибор проверяет и передает в компьютер вместе с очередными отсчетами сигналов на аналоговых входах. Так как общий провод устройства соединен с общим проводом компьютера по линии SG последовательного порта (конт. 5 розетки XS1), измерительные цепи имеют гальваническую связь с цепями компьютера.

На линии GP2 (выв. 5) микроконтроллер формирует сигнал, подаваемый на конт. 2 розетки XS1 (DB-9F) и далее на вход RXD последовательного порта компьютера. Сумма выходного сопротивления микросхемы и резистора R4 близка к волновому сопротивлению соединительного кабеля. В этом случае переходные процессы в кабеле затухают наиболее быстро. Кроме того, резистор защищает выход микросхемы от случайных замыканий.

Нужно признать, что уровни сигнала на выходе микросхемы DD1 не соответствуют требованиям стандарта RS-232. Полагается передавать лог. 1 отрицательным, а лог. О — положительным напряжением, а выходное напряжение микроконтроллера принимает значения О и +5 В. Однако в последовательных портах современных компьютеров порог переключения приемников сигналов приблизительно +1,7 В, и нулевое напряжение они воспринимают как отрицательное. При испытаниях розетка XS1 была соединена с вилкой СОМ-порта компьютера двумя соединенными последовательно стандартными "модемными" (без перекрестных связей) кабелями суммарной длиной более 3 м. Информация поступала в компьютер без сбоев.
При необходимости выходной сигнал микроконтроллера можно привести в полное соответствие с требованиями RS-232, дополнив устройство одной из специализированных микросхем МАХ232, МАХ202, HIN202, К170АП2 и некоторых др. Преобразовать однополярный сигнал в двуполярный можно и с помощью быстродействующего ОУ.

Для питания микросхемы DD1 использовано положительное напряжение в цепи DTR интерфейса (конт. 4 вилки XS1), устанавливаемое работающей в компьютере программой обслуживания АЦП. Оно понижено до необходимых 5 В с помощью параллельного стабилизатора на микросхеме DA1. Это же напряжение служит образцовым для АЦП.

При налаживании устройства проверьте напряжение на конденсаторе С2. Его значение (приблизительно 5 В) не должно зависеть от сигналов, подаваемых на цифровой и аналоговые входы. Заниженное, нестабильное или пульсирующее напряжение свидетельствует о том, что нагрузка на порт компьютера превышает его возможности. В таком случае можно уменьшить номинал резистора R3 или питать устройство от внешнего .источника напряжения 9 В, подключенного между катодом диода VD1 и общим проводом.

Замена параллельного стабилизатора последовательным, например, на микросхеме 78L05, нежелательна. Дело в том, что при случайной подаче на вход микроконтроллера напряжения более +5 В будут открыты защитные диоды внутри микроконтроллера и ток из измерительной цепи поступит в цепь питания. Если он превысит ток, потребляемый микроконтроллером, последовательный стабилизатор выйдет из режима стабилизации и напряжение на его выходе увеличится, что нежелательно и даже опасно для микроконтроллера. В подобной ситуации напряжение на выходе параллельного стабилизатора останется прежним, лишь возрастет ток, текущий от выв. 3 к выв. 2 микросхемы DA1.

Диод VD1 предохраняет устройство от отрицательного напряжения в цепи DTR. Конденсвтор С4 устанавливвют вблизи выводов питания микросхемы DD1, он подавляет высокочастотные помехи. Конденсаторы С1 и СЗ — элементы тактового генератора микроконтроллера, частота которого задана кварцевым резонатором ZQ1.

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

Микроконтроллер PIC12F675, в отличие от многих других, не имеет встроенного адаптера последовательного интерфейса (UART), поэтому его пришлось организовать программно. Подпрограмма обработки прерываний от таймера TMRO разряд за разрядом отрабатывает временную диаграмму передачи байта: стартовый разряд (лог. 0), восемь информационных и стоповый (лог. 1). Разряд контроля четности отсутствует. Константы, загружаемые обработчиком прерываний в таймер, подобраны таким образом, что скорость передачи равна 115,2 кБод.

В подпрограмму обработки прерываний встроены операции переключения каналов, пуска и чтения результатов работы АЦП, анализ состояния цифрового входа и другие необходимые действия. Основная программа, завершив инициализацию устройств микроконтроллера и разрешив прерывания, работает вхолостую.
Встроенный 10-разрядный АЦП микроконтроллера PIC12F675 поочередно с интервалом 165 мкс преобразует в двоичные коды отсчеты напряжения на входах ANO, AN1. Нулевому значению соответствует нулевой код, напряжению питания — 1111111111 (1023 в десятичной системе). Логический уровень сигнала на входе GP3 программа проверяет спустя 68 мкс после пуска АЦП по входу AN0. Таким образом, опрос одного дискретного и двух аналоговых входов занимает 330 мкс. За это же время микроконтроллер успевает передать через интерфейс RS-232 три байта результата предыдущего цикла измерения. Процесс идет безостановочно. В принципе, АЦП способен проводить измерения чаще, но в нашем случае делать это нет смысла из-за ограниченной пропускной способности канала связи.

Передача информации, согласно стандарту RS-232, идет восьмиразрядными байтами. Два 10-разрядных отсчета АЦП и один двоичный разряд, отображающий состояние цифрового входа, занимают три байта, причем три из 24-х двоичных разрядов остаются свободными. Принятое а разработанной программе распределение информации в трехбайтном кадре представлено в табл. 1.
Старший разряд (D7) первого байта кадра всегда содержит 1, Аналогичные разряды второго и третьего байтов — нулевые. Это дает возможность на приемной стороне распознать в непрерывном потоке байтов начало каждого кадра и правильно обработать поступающую информацию. Для облегчения этого процесса между кадрами предусмотрены небольшие паузы.

Программа ADC675.asm написана на языке ассемблера и отлажена в среде MPLAB версий 6.40 и 6.50. Точное значение скорости передачи 115,2 кБод установлено подборкой констант, загружаемых в таймер. Такая методика позволяет при необходимости установить и другую скорость, например, 38,4 или 9,6 кБод. Соответственно изменится частота квантования входных сигналов.
В табл. 2 приведен результат компиляции программы — коды, которые необходимо загрузить во FLASH-память микроконтроллера. В предпоследней строке таблицы находится слова конфигурации микроконтроллера. Два его старших разряда, устанавливаемые на заводе-изготовителе при калибровке внутреннего источника образцового напряжения, были прочитаны из одного из имевшихся у автора экземпляров микроконтроллера и внесены в программную директиву __config  B'01000111001010'. которая задает конфигурацию (упомянутые разряды выделены шрифтом). Полученный программный код успешно работал в двух разных экземплярах микроконтроллера.
Более корректно задавать для каждого экземпляра индивидуальные значения калибровочных разрядов, считанные именно из него. Для этого следует установить "свежую'* микросхему в программатор, прочитать слово конфигурации, извлечь из него нужные значения. вписать их в директиву конфигурации и оттранслировать программу заново.
Если повторная трансляция нежелательна, можно просто удалить строку со словом конфигурации из НЕХ-файла. В этом случае загрузка файла не изменит предварительно прочитанного из микроконтроллера слова конфигурации и вес нужные изменения придется внести в него вручную, не трогая калибровочные разряды. Сделать это нужно до выполнения операции программирования.
Конфигурация должна быть следующей: генератор HS, WDT включен (можно и отключить, если не нужен автоматический перезапуск микроконтроллера после сбоя), FWRT включен, MCLR служит цифровым входом (не работает как вход сигнала начальной установки), BOR разрешен. Состояние разрядов защиты кода — по желанию.
В исходном тексте программы ADC675.asm имеются директивы условной компиляции, с помощью которых можно модифицировать программу. Например, поставленная в начале строки #def ine _autosync_ точка с запятой уберет паузу между трехбайтными кадрами информации. Период опроса аналоговых входов уменьшится с 330 до 260 мкс, но питание микроконтроллера придется включать только при уже работающей программе приема информации компьютером, иначе правильная синхронизация приема и передачи может не наступить никогда.
Точка с запятой в начале строки #define _invert_ отключит инверсию сигнала на выходе микроконтроллера: лог. 1 будет передаваться высоким, а лог. 0 — низким уровнем. Это необходимо, если между выходом GP2 микроконтроллера и входом RXD порта компьютера установлена буферная микросхема-инвертор. После внесения любого изменения в исходный текст не забудьте оттранслировать программу заново.

Для приема результатов работы АЦП компьютером разработана программа Get3.exe. Ее возможности ограничены, но заинтересованные читатели вполне могут сами написать другую, расширяющую функции описанного устройства. Это может быть, например, программа универсальною амперметра-вольтметра-ваттметра с функциями низкочастотного осциллографа и анализатора спектра.
Окно программы Get3.exe показано на рис. 3. Она принимает данные по RS-232 (нужно указать порт СОМ1 или COM2, к которому подключен АЦП). Отсчеты сигналов, относящиеся к двум аналоговым и цифровому входам, программа преобразует в десятичные числа (0—1023 для аналоговых каналов, 0 и 1 для дискретного) и отображает их в окне Число 675 на рисунке соответствует текущему отсчету сигнала на аналоговом входе 1, число 669 — отсчету сигнала на аналоговом входе 2, число 0 указывает, что на цифровом входе низкий логический уровень Проверить правильность работы АЦП можно, подавая на его входы напряжение с движка переменного резистора, крайние выводы которого подключены к общему проводу и цепи +5 В. Если АЦП работает правильно, числа в окне программы при перемещении движка из одного крайнего положения в другое плавно меняются от 0 до 1023.

В каждом принятом кадре программа сравнивает значения старших разрядов байтов с ожидаемыми. При несовпадении выдается предупреждение об ошибке приема. Зачастую неправильно принятыми оказываются первые после включения несколько байт, так что не исключено "проскакивание" сообщения об ошибке в начале работы. Его регулярные появления в дальнейшем свидетельствуют о неустойчивом приеме информации или неспособности компьютера обрабатывать ее в темпе поступления.
На компьютере с процессором Duron 650 MHz под Windows ХР Professional прием был безошибочным. Однако с процессором Celeron 430 MHz под Windows 98 программа Get3.exe выдавала сообщения об ошибках, если параллельно с ней работали некоторые другие программы. После того как они были закрыты, прием стал устойчивым.

Кроме принимаемой информации программа отображает состояние входов DSR и CTS СОМ-порта и дает возможность изменять состояние его выходов DTR, RTS и 7XD, "щелкая" по их названиям на экране. Высокому логическому уровню (положительному напряжению) соответствует знак "плюс", низкому уровню (отрицательному напряжению) — знак "минус" Обратите внимание, что напряжение на выходе DTR установлено положительным (см. рис. 3). Это необходимо для питания АЦП. Распределение интерфейсных цепей по контактам разъемов DB-9 и DB-25 можно найти в [6].
Принятая информация может быть записана в файл. Продолжительность записи ограничена только количеством свободного места на диске. Для выбора имени файла, в который будет вестись запись, используют соответствующую экранную кнопку. Нажатием на нее открывают стандартное диалоговое окно, позволяющее выбрать один из имеющихся файлов или создать новый.

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

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

Программа Gel3.exe написана на Visual Basic из пакета Visual Studio 6 0 с установленными сервис паками. Взаимодействие с СОМ-портом идет через объект MSCOMM. Сама программа короткая — менее сорока килобайт — однако использует множество библиотек. Полный дистрибутив (архив Get3_Full.zip) занимает более 1,5 Мбайт. На практике в большинстве компьютеров почти все нужные библиотеки уже установлены вместе с Windows или Microsoft Office. И только дее (MSCOMM32.0CX и COMDLG32.0CX), как правило, отсутствуют.
Архив Get3_Small.zip с файлами Get3.exe, MSCOMM32.0CX и COMDLG32.0CX занимает менее 120 килобайт. Достаточно развернуть его в какую-либо папку и запустить программу. Если после запуска программа все же потребует еще какую-нибудь библиотеку, придется скачать полный дистрибутив и выполнить программу setup.exe. Она установит все необходимое.

В качестве примера применения АЦП рассмотрим анализ процессов, происходящих при включении в сеть лампы накаливания 220 В, 315 Вт Для этого подключим аналоговые входы АЦП к исследуемой лампе согласно рис. 4.
В качестве R1 использован пятиваттный проволочный резистор, например, С5-16МВ номиналом 0,3 Ом ± 1 %. Остальные резисторы — обычные МЛТ указанной на схеме мощности. Мгновенные значения напряжения и тока лампы вычислим по формулам

где К1 — отсчет АЦП с первого входа; К2 — отсчет со второго входа АЦП; Uпит — напряжение питания. При указанных на рис 4 номиналах резисторов и Uпит=5 В получим

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

Чтобы обеспечить электробезопасность, напряжение 220 В на измерительную установку (см. рис. 4) необходимо подавать через разделительный трансформатор или собрать узел гальванической изоляции АЦП от компьютера по схеме, изображенной на рис. 5. Выходную розетку узла АЦП подключают к вилке ХР1, питание на этот узел подают от отдельного изолированного от земли и компьютера источника напряжением 9 В. Сигнал с выхода АЦП через эмиттерный повторитель на транзисторе VT1 поступает на излучающий диод быстродействующего оптрона U1. Вместо импортного 6N137 с учетом различий в назначении выводов здесь можно использовать отечественный К293ЛП1. С выхода оптрона сигнал подан на выход (конт. 2 розетки XS1) через преобразователь уровня DD1. Розетку XS1 соединяют с розеткой СОМ-порта компьютера. Так как на пути от АЦП до компьютера сигнал проинвертирован дважды (оптроном U1 и усилителем DD1.1), заменять программу микроконтроллера в модуле АЦП, отключив в ней инверсию, не нужно.

Для питания микросхемы К170АП2 (DD1) необходимы два источника напряжения 12 В (положительного и отрицательного). Напряжение 5 В для питания логической части оптрона U1 получено с помощью стабилизатора DA1.

В архиве Lampa.zip приведен получений с помощью описанной установки и программы Get3.exe текстовый файл результатов эксперимента, в процессе которого лампа была несколько раз включена и выключена. Там же имеются записи, обработанные программами MathCad разных версий. Один из результатов показан на рис. 6, причем кривая мощности получена расчетным путем — перемножением мгновенных значений напряжения и тока.

На графиках хорошо видны повышенные значения тока через не успевшую нагреться нить накаливания лампы и рассеиваемой на ней мощности в те-чение нескольких первых после включения полупериодов сетевого напряжения. Заметны искажения синусоидальной формы напряжения (срезанные вершины). Их причина — импульсный характер тока, потребляемого многочисленными подключенными к той же сети нагрузками, импульсные блоки питания которых начинаются с выпрямителей, снабженных сглаживающими конденсаторами большой емкости.

Скачать прошивку, исходник на асме и управляющую программу (2 Мб). Загрузок: 310

Автор статьи: Марков М.
Источник: Журнал Радио №2 2005г.
Просмотров: 3312

советуем. . .

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Очень удобная программа для чтения pdf Foxit Reader
26.04.2014
Foxit Reader - Компактная и шустрая программа для чтения PDF файлов. Может служить альтернативой для популярного просмотрщика PDF - Adobe Reader.... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Новое становление сайта Eldigi.ru
01.04.2014
Проект Eldigi.ru который долгое время находился в застывшем состоянии снова принимается за работу с новымы силами, с новыми статьями и с... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Цифровая паяльная станция своими руками (ATmega8, C)
27.05.2012
Состав: ATmega8, LM358, IRFZ44, 7805, мост, 13 резисторов, один потенциометр, 2 электролита, 4 конденсатора, трехразрядный светодиодный семисегментный... подробнее...

Тахометр на AVR микроконтроллере (ATtiny2313, C)
13.01.2010
Данное устройство представляет собой неплохой тахометр, предел его измерений составляет 100 - 9990 об/мин. Точность измерения - ± 3 об/мин.... подробнее...

Электронная записаня книжкa (PIC12F84, С)
02.12.2010
Новая элементная база позволяет создавать компактные и экономичные устройства, способные с помощью персонального компьютера... подробнее...

Mega-Генератор (ATmega16, C)
09.08.2008
Попросили меня как-то на работе (автосервис) организовать генератор для проверки различных электроклапанов, инжекторов, катушек... подробнее...

Музыкальный Звонок на MMC/SD карте (ATmega32, C)
17.03.2008
Простые однотональные мелодии на сегодняшний день уже не могут вызвать восторга у благодарных слушателей. За примерами далеко ходить... подробнее...

Микроконтроллерный сверлильный станок для печатных плат (ATtiny13, C)
11.10.2010
Травить платы мы уже научились, теперь надо сверлить отверстия. Можно ручной дрелью, можно электродрелью, можно станком... Электродрелью... подробнее...

строительство домов