Прошивание микроконтроллеров avr pic Всё о прошивке avr Прошивка avr pic. Ампервольтметр На Pic16F676 И 74Ls164 - dehumanize21. Pic16f676 имеет встроенный 10-разрядный АЦП. Для терморегулятора датчиков К-типа, пришлось.
В статье представлена конструкция цифрового амперметра-вольтметра, предназначенного для совместной работы с универсальной платой управления лабораторными блоками питания. Его особенностью является отсутствие собственного датчика тока.
При измерении тока используется датчик тока платы управления. Рассмотренная конструкция идеально подходит для переделки компьютерных блоков питания (БП) в лабораторные источники питания постоянного тока.
Переделка компьютерных блоков питания в лабораторные оказалась весьма востребована. В поисках вариантов схемы управления и защиты автор обнаружил универсальную плату управления, описанную в 1. Схема платы управления оказалась очень простой и эффективной, удовлетворяющей всем требованиям управления и защиты мощного лабораторного источника питания постоянного тока. Для индикации выходного напряжения и тока описанная в 1 конструкция показалась весьма громоздкой и дорогой, к тому же автор считает избыточным одновременную индикацию напряжения и тока в источнике питания такого класса.
В настоящее время очень популярны вольтметры, собранные на недорогом микроконтроллере PIC16F676 с трехразрядным светодиодным индикатором. Использование готового такого вольтметра как ампервольтметра оказалось не очень удобно из-за сложности с переводом его в режим амперметра. Поэтому автор решил разработать свою схему переключаемого ампервольтметра с наглядной индикацией режима измерения, используя к тому же датчик тока платы управления из 1. Основные технические характеристики ампервольтметра.
Она собрана на одной микросхеме счетверенного операционного усилителя (ОУ) DA1 LM324, которая управляет ШИМ-контроллером микросхемы TL494 компьютерного блока питания. Схемы переделки компьютерных БП, использующих ШИМ-контроллер такого типа, уже неоднократно описаны, так что автор не будет на этом останавливаться. Схема содержит измерительные усилители тока на ОУ DA1.1, DA1.4 и напряжения на ОУ DA1.2, DA1.3, с выхода которых сигнал управления подается на ШИМ-контроллер БП. Переменными резисторами R13, R14 изменяется опорное напряжение выходных усилителей каналов измерения напряжения и тока соответственно. Если ток в нагрузке не превышает значения, установленного регулятором R14, то блок управления будет работать в режиме стабилизации напряжения, заданного регулятором R13. При этом будет светиться индикатор HL3.
Если же ток в нагрузке достигнет значения, установленного регулятором R14, тогда, при разомкнутом SA1, блок управления перейдет в режим ограничения выходного тока. При этом будет светиться индикатор HL2. Если же выключатель SA1 будет замкнут, то при достижении установленного тока в нагрузке напряжение на выходе снизится до нуля и загорится индикатор HL1.
Для выхода из режима отсечки тока достаточно разомкнуть выключатель SA1. Подробнее о работе и наладке схемы управления можно прочесть в 1. Принципиальная электрическая схема ампервольтметра показана на рис.2. Основой ампервольтметра является микроконтроллер DD1 типа PIC16F676.
Входной сигнал (IN) поступает на вход АЦП вывод 10 DD1 (RA0). Результат измерения выводится на трехразрядный семисегментный светодиодный индикатор с общими катодами HG1. Переключение канала измерения осуществляется кнопкой SA1. Вторая контактная группа кнопки SA1 задействована для подачи сигнала на микроконтроллер (цепь SW), который используется при обработке результата измерения. Индикация динамическая с частотой обновления 100 Гц.
В связи с тем, что катоды индикатора подключены непосредственно к выводам микроконтроллера, в целях снижения нагрузки каждый разряд зажигается в 2 приема по 4 сегмента. Для исключения частого мигания младшего разряда индикации частота обновления показаний индикатора искусственно снижена до 3 Гц. При превышении возможности отображения измеренных значений на индикаторе высветятся три черточки. Для индикации выбранного режима измерения применен одноразрядный семисегментный индикатор с общим катодом HG2 с символом меньшего, чем в HG1, размера. Сегменты «b», «c», «e» и «f» индикатора HG2 включены постоянно.
В режиме измерения напряжения переключателем SA1 в цепь SW подается «плюс» питания, который через резистор R11 включает сегмент «d», формируя на индикаторе символ «U» (фото 1). При этом высокий уровень на базе транзистора VT1 держит его закрытым. При переключении в режим измерения тока в цепь SW подключается общий провод.
Транзистор VT1 открывается, подавая напряжение питания на сегменты «a» и «g», и на индикаторе формируется символ «А» (фото 2). Питание схемы ампервольтметра осуществляется от цепей питания ШИМ-контроллера компьютерного БП и стабилизируется с помощью интегрального регулируемого стабилизатора DA1. Делителем R3R4 на выходе DA1 задается напряжение около 3 В. Такое напряжение питания схемы выбрано для обеспечения возможности использовать полный диапазон АЦП микроконтроллера в режиме измерения тока из-за низкого уровня входного сигнала.
Конструкция и детали Элементы схемы управления и ампервольтметра собраны на печатных платах из односторонне фольгированного стеклотекстолита размерами 40х50 мм и 58х37 мм соответственно. Чертежи печатных плат со стороны установки элементов и расположение элементов на них показаны на рис.3 и рис.4. Плата схемы управления разведена таким образом, чтобы быть закрепленной на выводах переменных резисторов R13R14. Для удобства наладки в конструкции использованы выводные радиокомпоненты.
Для обеспечения компактности ампервольтметра в его конструкции использованы в основном элементы для поверхностного монтажа: резисторы форм-фактора 1206 и конденсаторы 0805. Следует отметить нестандартную установку микросхемы микроконтроллера в DIP-корпусе.
Он закреплен методом поверхностного монтажа со стороны проводников, при этом концы его выводов выгнуты наружу. В качестве переключателя SA1 использована кнопка типа PS-850L, используемая в старых компьютерах в качестве переключателя «turbo». Индикаторы HG1 (с размером символа 0,56”) и HG2 (0,39”) можно использовать любые с общим катодом, лучше с красным цветом свечения, так как «зеленые» светятся довольно тускло. Сборка и наладка Об использовании схемы управления и способе ее наладки можно прочесть в 1. Ампервольтметр в наладке не нуждается.
Необходимо лишь подобрать номиналы резисторов R1 и R2 во входных делителях каналов измерения тока и напряжения соответственно. Это лучше всего сделать экспериментальным путем, используя в качестве образцового амперметра-вольтметра цифровой мультиметр. Файлы чертежа печатной платы в формате LAY, прошивки микроконтроллера (НЕХ-файл) и исходного текста программы на языке ассемблера размещены для скачивания на сайте издательства «Радиоаматор» 2. Встраиваемая универсальная плата управления лабораторными блоками питания // Радиоежегодник. Режим доступа: 2. – сайт издательства «Радиоаматор». Автор: Дмитрий Карелов, г.
Кривой Рог Материал взят из: Журнала РадиоАматор 2013 №9 В архиве: исходный код программы микроконтроллера на ассемблере, прошивка и разводка печатной платы в формате LAY 35,66 Kb (cкачиваний: 1307).
Когда появилась необходимость в измерительной части для лабораторного БП, рассматривая различные схемы из Интернета, сразу остановил выбор на семи сегментных LED индикаторах (возможная альтернатива - индикаторы типа 0802, 1602 - дороги и плохо читаемы). Так же, не хотелось каких либо переключений - и ток, и напряжение должны считываться в любой момент времени. По разным причинам, найденные готовые решения не устроили и я решил сконструировать свою схему. Предлагаемое устройство предназначено для применения совместно с различными блоками питания и позволяет измерять напряжение в пределах от 0 до 99.9 Вольт с точностью 0.1 Вольт и ток потребления в пределах от 0 до 9.99 Ампер с точностью 0.01 ампер. Устройство собрано на дешевом микроконтроллере PIC12F675, как самом недорогом и распространенном из имеющих 10-разрядный АЦП, двух регистрах 74HC595 и двух 4-х или 3-х разрядных LED индикаторах. Общая стоимость примененных деталей, на мой взгляд, минимальна для подобных конструкций с одновременной индикацией напряжения и тока. Описание работы схемы.
Напряжение высвечивается индикатором HL1, а ток - индикатором HL2. Одноименные сегментные выводы индикаторов объединены попарно и подключены к параллельным выходам регистра DD2, общие выводы разрядов подключены к регистру DD3. Регистры соединены последовательно и образуют 16-разрядный сдвиговый регистр, управляемый по трем проводам: выводы 11 - тактовые, 14 - информационный, а по перепаду на выводе 12 информация записывается в выходные защелки. Индикация обычная динамическая - через выходы регистра DD3 последовательно перебираются общие выводы индикаторов, а с выходов DD2 через токоограничительные резисторы R12-R19 включаются соответствующие выбранному разряду сегменты.
Индикаторы могут быть как с общим анодом, так и с общим катодом (но оба одинаковые). Микроконтроллер управляет индикацией по выводам GP2, GP4, GP5 в прерываниях от таймера TMR0 c интервалом 2 мс.
Входы GP0 и GP1 используются соответственно для измерения напряжения и тока. В первых трех разрядах индикаторов высвечиваются собственно измеряемые значения, а в последнем разряде: в верхнем индикаторе - знак 'V', а в нижнем - знак 'A'. В случае применения 3-х разрядных индикаторов эти знаки наносятся на корпус прибора. Никаких изменений программы в этом случае не требуется. Измеряемое напряжение поступает на МК через делитель R1-R3, а ток - с выхода ОУ LM358 через резистор R10, который совместно с внутренним защитным диодом защищает вход МК от возможной перегрузки (ОУ питается напряжением +7.+15 Вольт).
Коэффициент усиления ОУ задается делителем R5-R7, примерно равн 50 и регулируется подстроечным резистором R5. ФНЧ R4C2 сглаживает напряжение с шунта. Каждое измерение производится в течении всего 100 мкс. И без этой цепочки показания прибора будут 'прыгать' при любой неравномерности измеряемого тока (а он редко когда бывает строго постоянным).
Для тех же целей служит и конденсатор C1 в цепи измерения напряжения. Стабилитрон D1 защищает вход ОУ от перенапряжения в случае обрыва шунта.
Особо следует остановиться на цепочке R8,R9. Она задает дополнительное смещение примерно 0.25 милливольт на вход ОУ. Дело в том, что без нее имеется существенная нелинейность коэффициента усиления ОУ при низких значениях измеряемого тока (менее 0.3 А). На разных экземплярах микросхем этот эффект проявляется в разной степени, но погрешность при выше обозначенных значениях измеряемого тока слишком высока в любом случае. При установке R8 и R9 указанных на схеме значений (номиналы могут быть пропорционально изменены при сохранении того же соотношения, например 15 Ом и 300 кОм) погрешность измерения тока, обусловленная этим эффектом, не превышает единицы младшего разряда.
Со всеми имеющимися у меня экземплярами микросхем, никакого подбора указанных резисторов не потребовалось. В общем случае, подбирается минимальное сопротивление R9, при котором на индикаторе еще светятся нули при отсутствии измеряемого тока, и увеличивается в 1.5-2 раза. Интересно, что среди многих подобных конструкций, где применяется та же микросхема, ни в одной статье нет и намека на данную проблему. Видимо, у меня одного оказались 'неправильные' ОУ (приобретенные, кстати, в разное время в течении 10 лет). В любом случае, я категорически не рекомендую в целях 'упрощения конструкции' исключать из схемы обычно отсутствующие в подобных схемах элементы C1,C2,R3,R8,R9 - это все-таки измерительный прибор, а не мигающая цифрами игрушка!
Хорошая точность и стабильность показаний, кроме того, обеспечивается полным 'отделением' от микроконтроллера относительно сильноточных импульсных цепей управления индикаторами путем питания каждой цепи от отдельного стабилизатора 78L05. И даже слабые помехи от работы самого микроконтроллера мало влияют на результат, так как каждое измерение производится в режиме 'SLEEP' с 'заглушенным' тактовым генератором.
Микроконтроллер тактируется от внутреннего генератора для экономии выводов. Вход сброса через цепь R11,C3 подключен к 'чистой' +5В.
При включении-выключении БП, в котором используется конструкция, возможны значительные помехи, поэтому, для исключения 'зависания' программы, включен таймер WDT. Питается устройство от любого стабилизированного напряжения 7-15 Вольт (не больше 15В!), через стабилизаторы DA2, DA3. Конденсаторы C4-C8 - стандартные блокировочные. Для обеспечения низкой погрешности при токах, близких к верхнему пределу, напряжение питания ОУ должно быть как минимум на 2 Вольта больше напряжения микроконтроллера, поэтому питание на него берется до стабилизаторов. Устройство собрано на печатной плате размерами 57 на 62 миллиметра. Печатная плата устройства.
Для уменьшения габаритов платы, большая часть резисторов и конденсаторов применена в SMD корпусе типоразмера 0802. Исключениями являются: R1 - из-за рассеиваемой мощности, R12 - для упрощения топологии платы, электролитические конденсаторы и подстроечные резисторы. Конденсаторы C1 и C2 применены керамические, но в случае отсутствия таковых, их можно заменить электролитическими танталовыми. Стабилитрон - любой, с напряжением стабилизации 3-4.7 Вольт.
Индикаторы можно заменить на FIT3641 или трехразрядные серий 3631 или 4031 без изменения рисунка платы. В случае необходимости, возможно даже применение без изменения рисунка более крупных индикаторов типа 5641 и 5631 (в этом случае микроконтроллер впаивается без колодки напрямую, подстроечные резисторы применяются малогабаритные, индикатор впаивается поверх микросхем, сточив четыре выступа снизу по углам индикатора). Для подключения устройства к внешним цепям применены винтовые зажимы.
Часто возникающая проблема с изготовлением измерительного шунта решена путем применения готового шунта предела 10А от неисправного мультиметра серии D83x, абсолютно без всякой переделки. На мой взгляд, это оптимальный вариант - неисправный китайский мультиметр, думаю, найдется у многих радиолюбителей.
В крайнем случае, его можно изготовить из нихромовой (а лучше из константановой) проволоки. Выход блока питания подключается к точке 'Ux' и далее, с той же точки в нагрузку. Общий провод подается в точку 'COM', а в нагрузку уже подается с точки 'COM-Out'.
При таком подключении, напряжение на индикаторе завышается на 0.1 Вольт при максимальном токе нагрузки. Программным способом эта погрешность уменьшена в два раза до половины погрешности дискретизации (0.05В максимум). Во избежание увеличения этой погрешности, следует выбирать такое сопротивление шунта, при котором не требуется при настройке изменять номиналы схемы (примерно 7-14 мОм). Подходящее напряжение питания на устройство подается на вывод 'Upp'. Фотографии готового устройства Программа микроконтроллера написана на Ассемблере в среде MPASM.
Для обоих видов индикаторов программа одна за исключением одной директивы. В начале исходного текста программы (файл AV-meter.asm) в директиве “ANODE EQU 0” параметр имеет значение 0, что соответствует работе с индикаторами с общим катодом. Для применения индикаторов с общим анодом следует изменить значение этого параметра на 1, после чего заново оттранслировать программу. Так же, прилагаются готовые прошивки для микроконтроллера как для индикаторов с общим анодом, так и с общим катодом. При загрузке HEX-файла в программы типа, или, слово конфигурации загружается автоматически. Настройка схемы предельно проста.
Подав на вход напряжение, близкое к максимальному, подстроечником R2 следует выставить на верхнем индикаторе требуемое значение. Потом, подключают на выход устройства резистор 0.5-2 Ома в качества нагрузки и регулировкой напряжения устанавливают ток, близкий к максимальному. Подстроечником R5 выставляют соответствующие образцовому амперметру показания на нижнем индикаторе. Во вложенном файле представлены прошивки, исходный код, модель и плата. Список радиоэлементов Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот DD1 МК PIC 8-бит. Уважаемый diogenb!
Разработанное Вами устройство представляется очень интересным и полезным, но некоторые сомнения вызывают его точностные характеристики. АЦП микроконтроллера является 10-ти разрядным, при чем фирма Microchip не обещает 10-ти разрядной точности (1024 точки или примерно 0.1%). Обещают только соответствующую разрешающую способность. Вам удалось получить точность 0.1% на всей шкале, при том, что кроме АЦП свой вклад в погрешность вносят и другие элементы схемы. Это очень интересный результат!
Сообщите пожалуйста - сколько контроллеров Вы испытали в этой схеме и со всеми ли удалось уложиться в погрешность 0.1%. Спасибо за быстрый и исчерпывающий ответ. Абсолютную погрешность ампер-вольт метра можно легко уменьшить в 2-3 раза, если предусмотреть возможность масштабировать результат.
Обычно лабораторный источник имеет Uвых. Не более 50В, а чаще 25-35 В. Ток в 10А тоже встречается не часто - обычно 2,3 или 5А.
Увеличить чувствительность прибора легко - достаточно изменить номиналы R1 и Rsh, но тогда результат измерения, считанный с табло, нужно будет делить на соответствующий коэффициент. Это очень неудобно. Вот если бы Вы заложили в программу возможность масштабирования результата! Вы и так уже проявили заботу о ближних - сделали программу под индикаторы как с общим катодом, так и с общим анодом. Может быть сделаете ещё один шаг к созданию абсолютно универсального устройства? После этого Ваша слава превысила бы все мыслимые пределы! Понятно, что более практичным были бы пределы 50В и 5А, но дело в том, что уменьшение пределов в 2 раза, в сущности, нам ничего не даст.
Так как индикация происходит в привычной для нас десятичной системе, в таком случае, для уменьшения абсолютной погрешности нам придется использовать четыре разряда, причем, в младшем будут меняться всего два значения – 0 и 5 (АЦП 10-разрядный и от этого никуда не деться). Не очень хорошо, не правда ли? Масштабирование имеет смысл только в виде 10В, 100В, 1000В или 1А, 10А, 100А (тогда все масштабирование сводится к переключению запятой в зависимости от примененных R1 или Rsh). Из-за отсутствия свободных выводов, автоматически это делать не получится.
Остается ввести две переменные, которые перед компиляцией меняются в зависимости от требуемого предела (кратного 10), аналогично выбору типа индикатора. В случае, если это для Вас имеет смысл (все-таки, 10В и 1А маловаты будут), я могу выложить соответственно доработанную программу. Не нужно увеличивать разрядность индикации - разрешения в 0.1 В и 0.01А для обычного блока питания достаточно. Нужно уменьшить погрешность, которая при шкале 100В и погрешности 0.5% может составить 0.5 В, что многовато. Пусть требуется вольтметр с пределом 50В. Увеличим чувствительность АЦП вдвое, а результат измерения АЦП - 10-ти разрядный двоичный код, разделим на два. При этом вдвое уменьшится и абсолютная погрешность (т.е.
Погрешность в вольтах). Это максимально упрощенное изложение предлагаемого метода.
При делении нужно корректно учесть остаток. Также полезно организовать суммирование результатов нескольких измерений (например 16-ти) в памяти контроллера, а потом сумму разделить на 16. Быстродействия АЦП для этого более, чем достаточно, а результат будет более стабильным. Категорически не согласен, что предлагаемая Вами процедура уменьшит погрешность, неважно относительную или абсолютную. Фактически, Вы предлагаете не учитывать младший разряд, то есть уменьшить разрядность АЦП до 9 (и правильное округление тут сути дела не меняет) - погрешность это никак не изменит.
Вообще, это не сверхточный прибор, у него другое назначение. Здесь много факторов нестабильности: в качестве образцовой используется далеко не прецизионное напряжение питания МК, в делителе (входном и в обвязке ОУ) используются не прецизионные резисторы, дрейф Uвых ОУ, тоже не прецизионного, и т.д. Эти факторы обуславливают некую минимальную погрешность, ниже которой опуститься не помогут никакие чудесные методики. Считаю, для данного класса приборов устройство имеет вполне приемлемую погрешность. А предлагаемое Вами усреднение результата в данном случае реализовано аппаратно при помощи ФНЧ. Раз обещал, выкладываю доработанный исходный код.
Теперь, чтобы изменить пределы измерения напряжения или тока надо просто изменить в программе значения соответствующих переменных (LIMITU и LIMITI) в разделе 'U, I LIMITS' в начале предлагаемого исходного кода. Корректные высвечивание запятой и гашение незначащих нулей для каждого случая происходят автоматически. В случае максимального тока 1 А индикация происходит в миллиамперах. Поэтому, чтобы не было разночтений, в этом случае, вместо знаков 'V' и 'А' в 4-м разряде высвечиваются соответственно 'u' и 'i'. Обращаю Ваше внимание: значения надо вставлять, строго, указанные в соответствующих комментариях. Требуемые в каждом случае значения элементов схемы R1 и Rsh так же указаны в комментариях к соответствующим директивам программы. После внесения нужных Вам изменений и моделирования (модель прилагаю), Proteus создаст требуемый HEX-файл.
Я немного схему переделал, вместо 358 заложил, просто была в наличии. Также запитал от двуполярного напряжения +/- 7.5В, вроде получилось. Но есть одно но - дребезг младших разрядов, как не пробовал - добился лишь его уменьшения, но совсем убрать не удалось. В программировании не смыслю, поэтому прошу помощи - возможно в эту программу внести какой то 'усреднитель', чтобы выводил среднее значение за какой то небольшой промежуток? И поможет ли это?
Моя благодарность Автору за разработку данного устройства! Использованный в статье ОУ - копеечной стоимости, поэтому лучше было бы поставить все-же его. Тогда не понадобилось бы отрицательного напряжения. Хотя, если нестабильность младшего разряда есть и при индикации напряжения, то дело не в нем (я надеюсь, напряжение у Вас не через ОУ подается на вход). Программное усреднение в течении нескольких секунд (исходно - одно измерение в 0.5 с) в сущности ничего не даст - точность от этого точно не повысится.
Авторитетно заявляю, что в исходной конструкции показания младшего разряда не меняются минутами, если только измеряемое значение не находится на грани двух отсчетов. Я бы рекомендовал проверить качество сглаживания и стабилизации напряжений питания (особенно питания МК). Еще, надеюсь, Вы в процессе 'усовершенствования' не исключили элементы C1, R4, C2? Желаю Вам всяческих успехов. Спасибо что не оставили без внимания. Я разобрался - заменил подстроечник и картина изменилась радикально, видно фуфлыжный попался. Правда еще перед этим немного уменьшил резистор по оос, По напряжению как раз вопросов нет, прыгал ток.
ОУ поставил такой потому что был под рукой, хотя с Вами согласен - смысла нет менять. А двуполярное питание обеспечил с соображений повышения точности, и похоже не прогадал - с мультиметром тютелька в тютельку. Вот мысль была и напряжение измерять через второй ОУ, но как вижу и Вы этого не советуете.
Не понимаю у некоторых такую любовь к инструментальным ОУ с 2 полярным питанием, если можно поступить проще, - применить с минимум обвязки и максимальной точностью 0,1%. Ах да, и шунт вынести в плюсовую шину, и контролировать напряжение после шунта, чтобы компенсировать падение напряжения на шунте при максимальной нагрузке. Автор вводит в заблуждение сказав, что измерения производятся с заглушенным генератором. Вместо одного 'заглушенного' генератора автор включил другой генератор, чтобы АЦП в режиме SLEEP все же, но работало.