Лабораторный блок питания с управлением на микроконтроллере. Блок питания с индикацией на PIC-микроконтроллере Источник питания с управлением от микроконтроллера

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

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

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

Введение

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

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

Возможно удалить некоторые компоненты или добавить дополнительные функции? Хитрость заключается в том, чтобы переместить функциональность аналоговых компонентов, таких как операционные усилители в микроконтроллер. Иными словами, повышается сложность программного обеспечения, алгоритмов и уменьшается аппаратная сложность. Это уменьшает общую сложность для вас, так как программное обеспечение может быть просто загружено.

Основные электрические идеи проекта

Давайте начнем с простейшего стабилизированного блока питания. Он состоит из 2-х основных частей: транзистора и стабилитрона, который создает опорное напряжение.

Выходное напряжение этой схемы будет составлять Uref минус 0,7 Вольт, которые падают между В и Е на транзисторе. Стабилитрон и резистор создают опорное напряжение, которое является стабильным, даже если на входе есть скачки напряжения. Транзистор необходим для коммутации больших токов, которые стабилитрон и резистор не могут обеспечить. В такой роли транзистор только усиливает ток. Чтобы расчитать ток на резисторе и стабилитроне нужно выходной ток поделить на HFE транзистора (HFE число, которое можно найти в таблице с характеристиками транзистора).

Какие проблемы в этой схеме?

Транзистор сгорит, когда будет короткое замыкание на выходе.
- Она обеспечивает только фиксированное выходное напряжение.

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

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

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

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

АЦП(аналого-цифровой преобразователь) для измерения напряжения и тока.
- ЦАП(цифро-аналоговый преобразователь) для управления транзистором (регулировка опорного напряжения).

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

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

Есть много способов для создания цифро-аналоговых преобразователей, но он должен быть быстрым и простым, который будет легко взаимодействовать с нашим микроконтроллером. Существует схемы преобразователя, известного как "R-2R матрица". Он состоит только из резисторов и переключателей. Используются два типа номинала резисторов. Один со значением R и один с удвоенным значением R.

Выше показана схема 3 битного R2R - ЦАП. С помощью логического управления происходит переключение между GND и Vcc. Логическая единица соединяет переключатель с Vcc, а логический ноль с GND. Что делает эта схема? Она регулирует напряжение с шагом Vcc / 8. Общее выходное напряжение равно:

Uout = Z * (Vcc / (Zmax +1) , где Z разрадность ЦАП (0-7), в данном случае 3-битный.

Внутреннее сопротивление цепи, как видно, будет равно R.

Вместо использования отдельного переключателя можно подключить R-2R матрицу к линиям порта микроконтроллера.

Создание сигнала постоянного тока разного уровня с помощью ШИМ(широтно-импульсная модуляция)

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

В Atmega8 присутствует аппаратный 16-битных ШИМ. То есть теоретически можно иметь 16-битный ЦАП с помощью небольшого количества компонентов. Чтобы получить реальный сигнал постоянного тока из ШИМ-сигнала надо его отфильтровать, это может быть проблемой при высоких разрешениях. Чем больше надо точности, тем ниже должна быть частота ШИМ-сигнала. Это означает, что нужны конденсаторы большой емкости, а время отклика получается очень медленным. Первая и вторая версии цифрового источника питания постоянного тока были построены на 10 битной R2R матрице. То есть максимальное выходное напряжение может быть установлено за 1024 шага. Если использовать ATmega8 с тактовым генератором частотой 8 МГц и 10 битный ШИМ, то импульсы ШИМ сигнала будут иметь частоту 8MHz/1024 = 7.8KHz. Чтобы получить наиболее хороший сигнал постоянного тока нужно отфильтровать его фильтром второго порядка от 700 Гц или меньше.

Можно представить, что произойдет, если использовать 16-битный ШИМ. 8MHz/65536 = 122Hz. Ниже 12Hz, то что нужно.

Объединение R2R-матрицы и ШИМ

Можно совместно использовать ШИМ и R2R-матрицу. В этом проекте мы будем использовать 7-битную R2R-матрицу в сочетании с 5-битным ШИМ-сигналом. С тактовой частотой контроллера 8 МГц и 5-битным разрешением мы получим сигнал 250 кГц. Частота 250 кГц может быть преобразована в сигнал постоянного тока с помощью небольшого числа конденсаторов.

В оригинальной версии цифрового источника питания постоянного тока был использован 10-битный ЦАП на основе R2R-матрице. В новом дизайне мы используем R2R-матрицу и ШИМ с общим разрешением 12 бит.

Передискретизация

За счет некоторого времени обработки можно увеличить разрешение аналого-цифровой преобразователь (АЦП). Это называется передискретизацией. Четверная передискретизация дает результат в двойном разрешении. То есть: 4 последовательных образцов могут быть использованы для получения в два раза больше шагов на АЦП. Теория, лежащая передискретизации объясняется в PDF документ, который вы можете найти в конце этой статьи. Мы используем передискретизации для напряжения контура управления. На текущий контур управления мы используем исходное разрешение АЦП как быстрое время отклика здесь более важным, чем разрешение.

Подробное описание проекта

Несколько технических деталей, по-прежнему отсутствуют:

ЦАП (цифро-аналоговый преобразователь) не может управлять силовым транзистором
- Микроконтроллер работает от 5V, это означает что максимальный выход ЦАП равен 5V, а максимальное выходное напряжение на силовом транзисторе будет 5 - 0.7 = 4.3V.

Чтобы исправить это, мы должны добавить усилители тока и напряжения.

Добавление усилительного каскада на ЦАП

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

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

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

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

Начнем с силового транзистора. Мы используем BD245 (Q1). В соответствии с характеристиками транзистор имеет HFE = 20 на 3А. Поэтому он будет потреблять около 150 мА на базе. Чтобы усилить управляющий ток мы используем связку известную как "Дарлингтон-транзистор". Для этого используем транзистор средней мощности. Как правило, значение HFE должно быть 50-100. Это позволит уменьшить необходимый ток до 3 мА (150 мА / 50). Ток 3mA является сигналом поступающим с маломощных транзисторов, таких как BC547/BC557. Транзисторы с таким выходным током очень хорошо подходят для построения усилителя напряжения.

Чтобы получить на выходе 30В мы должны усиливать 5В идущие с ЦАП с коэффициентом 6. Для этого мы объединяем PNP и NPN транзисторы, как показано выше. Напряжение коэффициента усиления этой схемы вычисляется:

Vampl = (R6 + R7) / R7

Блок питания может быть доступен в 2-х версиях: с максимальным выходым напряжением 30 и 22В. Сочетание 1K и 6.8K дает коэффициент 7,8, который хорош для версии 30В, но возможно будут некоторые потери на более высоких токах (наша формула является линейной, но в реальности нет). Для 22В версии мы используем 1K и 4.7K.

Внутреннее сопротивление цепи, как показано на базе BC547 будет:

Rin = hfe1 * S1 * R7 * R5 = 100 * 50 * 1К * 47K = 235 МОм

HFE примерно от 100 до 200 для BC547 транзистор
- S является наклон кривой усиления транзистора и около 50 [единица = 1/Ohm]

Это более чем достаточно высокой для подключения к нашему ЦАП, который имеет внутреннее сопротивление 5кОм.

Внутреннее эквивалентное сопротивление выхода:

Rout = (R6 + R7) / (S1 + S2 * R5 * R7) = около 2Ом

Достаточно низкое, чтобы использовать транзистор Q2.

R5 связывает базу BC557 с эмиттером, что означает "выключено" для транзистора до ЦАП и BC547 придумать. R7 и R6 связать основе Q2 сначала к земле, которая отключает выходной каскад Дарлингтона вниз.

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

Пределы

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

BD245B: 10A 80Вт. 80Вт при температуре 25"C. Другими словами есть запас мощности из расчета 60-70Вт: (Max input voltage * Max current) < 65Вт.

Вы можете добавить второй BD245B и увеличить мощность до 120Вт. Чтобы убедиться, что текущая распределяется поровну добавить 0,22Ом резистор в эмиттер линии каждого BD245B. Та же схема и плата может быть использована. Установите транзисторов на должном кулер алюминия и соединить их с короткими проводами к плате. Усилитель может управлять второй транзистор питания (это максимум), но вы, возможно, необходимо отрегулировать коэффициент усиления.

Шунт для измерения тока: Мы используем резистор 0,75Ом мощностью 6Вт. Мощности достаточно хватает при токе 2,5А (Iout ^ 2 * 0,75 <= 6Вт). Для больших токов используйте резисторы соответствующей мощности.

Источники питания

Вы можете использовать трансформатор, выпрямитель и конденсаторы большой емкости или можете использовать адаптер для ноутбука 32/24В. Я пошел по второму варианту, т.к. адаптеры иногда продаются очень дешево (по акции), а некоторые из них обеспечивают 70Вт при 24В или даже 32В постоянного напряжения.

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

Для версии 22В 2.5A нужно: 3A 18В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (18 * 1,4 = 25В)
Для версии 30В 2A нужно: 2.5A 24В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (24 * 1,4 = 33.6В)

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

Проверьте ваше устройство на случай плохой изоляции. Убедитесь, что будет не возможно прикоснуться к любой части устройства, где может быть напряжение 110/230 В. Соединить все металлические части корпуса на землю (не GND схемы).

Трансформаторы и адаптеры питания для ноутбуков

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


Другие напряжение и ток

Есть два варианта 22В 2.5A и 30В 2A. Если вы хотите изменить пределы выходного напряжения или тока(только уменьшить) , то просто измените файл hardware_settings.h.

Пример: Чтобы построить 18В 2.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение 18В. Вы можете использовать 20В 2.5A источник питания.

Пример: Чтобы построить 18В 1.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение до 18В и макс. ток 1.5A. Вы можете использовать 20В 1.5A источник питания.

Тестирование

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

Test1: Подключить небольшое напряжение (достаточно 10В) к входным клеммам платы и убедитесь, что регулятор напряжения выдает ровно 5В постоянного напряжения.

Test2: Измерьте выходное напряжение. Оно должно быть 0В (или близкое к нулю, например, 0,15, и оно будет стремиться к нулю, если вы подключите вместо нагрузки резисторы на 2кОм или 5кОм.)

Test3: Установить микроконтроллер на плату и загрузить программное обеспечение LCD-тест, выполнив команды в директории распакованного пакета tar.gz digitaldcpower.

сделать test_lcd.hex
сделать load_test_lcd

Вы должны увидеть на дисплее надпись: "LCD works".

Теперь вы можете загрузить рабочее программное обеспечение.

Некоторые слова предупреждения для дальнейшего тестирования с рабочим программным обеспечением: Будьте осторожны с короткими замыканиями, пока вы не испытали функцию ограничения. Безопасным способом проверить ограничение тока является использование резисторов с малым сопротивлением(единицы Ом), например, автомобильные лампочки.

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

Программное обеспечение

Этот раздел даст вам понимание того, как работает программа, и как вы можете использовать знания, чтобы сделать некоторые изменения в ней. Однако следует помнить, что защита от короткого замыкания сделана программным способом. Если вы сделали где-то ошибку, то защита может не сработать. Если у вас произойдет короткое замыкание на выходе, то ваше устройство окажется в облаке дыма. Чтобы избежать этого, вы должны использовать 12В автомобильную лампу (см. выше) для проверки защиты от короткого замыкания.

Теперь немного о структуре программы. При первом взгляде на основную программу (файл main.c, скачать в конце этой статьи), вы увидите, что есть только несколько строк кода инициализации, которые выполняются при включении питания, а затем программа входит в бесконечный цикл.

Действительно, в этой программе есть два бесконечных цикла. Одним из них является основной цикл ("while(1){ ...}" в файле main.c), а другой представляет собой периодическое прерывание от аналогового цифрового преобразователя (функция "ISR(ADC_vect){...}" в файле analog.c). После инициализации прерывание выполняется каждые 104мкс. Все остальные функции и код выполняются в контексте одного из этих циклов.

Прерывание может остановить выполнение задачи основного цикла в любое время. Затем оно будет обрабатываться, не отвлекаясь на другие задачи, а дальше выполнение задачи снова продолжится в главном цикле на месте, где она была прервана. Из этого следует два вывода:

1. Код прерывания не должен быть слишком длинным, так как он должен завершиться до следующего прерывания. Потому что здесь важно количество инструкций в машинный коде. Математическая формула, которая может быть записана в виде одной строки CИ-кода может использовать до сотни строк машинного кода.

2. Переменные, которые используются в функции прерывания и в коде главного цикла могут внезапно измениться в середине исполнения.

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

Это основная идея программы. Я также коротко объясню про файлы которые вы найдете в архиве(при условии, что вы знакомы с CИ).

main.c - этот файл содержит основную программу. Все инициализации производятся здесь. Основной цикл также реализуется здесь.
analog.c - аналого-цифровой преобразователь, все что работает в контексте прерывания задачи может быть найдено здесь.
dac.c - цифро-аналоговый преобразователь. Инициализируется из ddcp.c, но использованы только с analog.c
kbd.c - программа обработки данных с клавиатуры
lcd.c - драйвер ЖК-дисплея. Это специальная версия, в которой не понадобится RW контакт дисплея.

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

Отредактируйте файл hardware_settings.h и настройте его в соответствии с вашим оборудованием. Здесь вы также можете сделать калибровку вольтметра и амперметра. Файл хорошо прокомментирован.

Подключите кабель к программатору и к вашему устройству. Затем установите биты конфигурации на работу микроконтроллера от внутреннего генератора частотой 8МГц. Программа предназначена для этой частоты.

Кнопки

Блок питания имеет 4 кнопки для местного управления напряжением и макс. током, 5-я кнопка служит для сохранения настроек в памяти EEPROM, чтобы в следующий раз при включении блока были эти же настройки напряжения и тока.

U+ увеличивает напряжение и U - уменьшает. Когда вы держите кнопку, то через некоторое время показания будут "бежать" быстрее, чтобы легко изменить напряжение в больших пределах. Кнопки I + и I - работают так же.

Дисплей

Индикация дисплея выглядит следующим образом:

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

Некоторые фотографии устройства

Вот некоторые фотографии источника питания который я собирал.

Он очень маленький, но с более широкими возможностями и более мощными, чем многие другие источники питания:

Старые алюминиевые радиаторы от процессоров Pentium хорошо подойдут для охлаждения силовых элементов:

Размещение платы и адаптера внутри корпуса:

Внешний вид устройства:

Вариант двухканального блока питания. Прислал Boogyman:

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

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

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

Введение

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

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

Возможно удалить некоторые компоненты или добавить дополнительные функции? Хитрость заключается в том, чтобы переместить функциональность аналоговых компонентов, таких как операционные усилители в микроконтроллер. Иными словами, повышается сложность программного обеспечения, алгоритмов и уменьшается аппаратная сложность. Это уменьшает общую сложность для вас, так как программное обеспечение может быть просто загружено.

Основные электрические идеи проекта

Давайте начнем с простейшего стабилизированного блока питания. Он состоит из 2-х основных частей: транзистора и стабилитрона, который создает опорное напряжение.

Выходное напряжение этой схемы будет составлять Uref минус 0,7 Вольт, которые падают между В и Е на транзисторе. Стабилитрон и резистор создают опорное напряжение, которое является стабильным, даже если на входе есть скачки напряжения. Транзистор необходим для коммутации больших токов, которые стабилитрон и резистор не могут обеспечить. В такой роли транзистор только усиливает ток. Чтобы расчитать ток на резисторе и стабилитроне нужно выходной ток поделить на HFE транзистора (HFE число, которое можно найти в таблице с характеристиками транзистора).

Какие проблемы в этой схеме?

Транзистор сгорит, когда будет короткое замыкание на выходе.
- Она обеспечивает только фиксированное выходное напряжение.

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

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

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

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

АЦП(аналого-цифровой преобразователь) для измерения напряжения и тока.
- ЦАП(цифро-аналоговый преобразователь) для управления транзистором (регулировка опорного напряжения).

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

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

Есть много способов для создания цифро-аналоговых преобразователей, но он должен быть быстрым и простым, который будет легко взаимодействовать с нашим микроконтроллером. Существует схемы преобразователя, известного как "R-2R матрица". Он состоит только из резисторов и переключателей. Используются два типа номинала резисторов. Один со значением R и один с удвоенным значением R.

Выше показана схема 3 битного R2R - ЦАП. С помощью логического управления происходит переключение между GND и Vcc. Логическая единица соединяет переключатель с Vcc, а логический ноль с GND. Что делает эта схема? Она регулирует напряжение с шагом Vcc / 8. Общее выходное напряжение равно:

Uout = Z * (Vcc / (Zmax +1) , где Z разрадность ЦАП (0-7), в данном случае 3-битный.

Внутреннее сопротивление цепи, как видно, будет равно R.

Вместо использования отдельного переключателя можно подключить R-2R матрицу к линиям порта микроконтроллера.

Создание сигнала постоянного тока разного уровня с помощью ШИМ(широтно-импульсная модуляция)

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

В Atmega8 присутствует аппаратный 16-битных ШИМ. То есть теоретически можно иметь 16-битный ЦАП с помощью небольшого количества компонентов. Чтобы получить реальный сигнал постоянного тока из ШИМ-сигнала надо его отфильтровать, это может быть проблемой при высоких разрешениях. Чем больше надо точности, тем ниже должна быть частота ШИМ-сигнала. Это означает, что нужны конденсаторы большой емкости, а время отклика получается очень медленным. Первая и вторая версии цифрового источника питания постоянного тока были построены на 10 битной R2R матрице. То есть максимальное выходное напряжение может быть установлено за 1024 шага. Если использовать ATmega8 с тактовым генератором частотой 8 МГц и 10 битный ШИМ, то импульсы ШИМ сигнала будут иметь частоту 8MHz/1024 = 7.8KHz. Чтобы получить наиболее хороший сигнал постоянного тока нужно отфильтровать его фильтром второго порядка от 700 Гц или меньше.

Можно представить, что произойдет, если использовать 16-битный ШИМ. 8MHz/65536 = 122Hz. Ниже 12Hz, то что нужно.

Объединение R2R-матрицы и ШИМ

Можно совместно использовать ШИМ и R2R-матрицу. В этом проекте мы будем использовать 7-битную R2R-матрицу в сочетании с 5-битным ШИМ-сигналом. С тактовой частотой контроллера 8 МГц и 5-битным разрешением мы получим сигнал 250 кГц. Частота 250 кГц может быть преобразована в сигнал постоянного тока с помощью небольшого числа конденсаторов.

В оригинальной версии цифрового источника питания постоянного тока был использован 10-битный ЦАП на основе R2R-матрице. В новом дизайне мы используем R2R-матрицу и ШИМ с общим разрешением 12 бит.

Передискретизация

За счет некоторого времени обработки можно увеличить разрешение аналого-цифровой преобразователь (АЦП). Это называется передискретизацией. Четверная передискретизация дает результат в двойном разрешении. То есть: 4 последовательных образцов могут быть использованы для получения в два раза больше шагов на АЦП. Теория, лежащая передискретизации объясняется в PDF документ, который вы можете найти в конце этой статьи. Мы используем передискретизации для напряжения контура управления. На текущий контур управления мы используем исходное разрешение АЦП как быстрое время отклика здесь более важным, чем разрешение.

Подробное описание проекта

Несколько технических деталей, по-прежнему отсутствуют:

ЦАП (цифро-аналоговый преобразователь) не может управлять силовым транзистором
- Микроконтроллер работает от 5V, это означает что максимальный выход ЦАП равен 5V, а максимальное выходное напряжение на силовом транзисторе будет 5 - 0.7 = 4.3V.

Чтобы исправить это, мы должны добавить усилители тока и напряжения.

Добавление усилительного каскада на ЦАП

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

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

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

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

Начнем с силового транзистора. Мы используем BD245 (Q1). В соответствии с характеристиками транзистор имеет HFE = 20 на 3А. Поэтому он будет потреблять около 150 мА на базе. Чтобы усилить управляющий ток мы используем связку известную как "Дарлингтон-транзистор". Для этого используем транзистор средней мощности. Как правило, значение HFE должно быть 50-100. Это позволит уменьшить необходимый ток до 3 мА (150 мА / 50). Ток 3mA является сигналом поступающим с маломощных транзисторов, таких как BC547/BC557. Транзисторы с таким выходным током очень хорошо подходят для построения усилителя напряжения.

Чтобы получить на выходе 30В мы должны усиливать 5В идущие с ЦАП с коэффициентом 6. Для этого мы объединяем PNP и NPN транзисторы, как показано выше. Напряжение коэффициента усиления этой схемы вычисляется:

Vampl = (R6 + R7) / R7

Блок питания может быть доступен в 2-х версиях: с максимальным выходым напряжением 30 и 22В. Сочетание 1K и 6.8K дает коэффициент 7,8, который хорош для версии 30В, но возможно будут некоторые потери на более высоких токах (наша формула является линейной, но в реальности нет). Для 22В версии мы используем 1K и 4.7K.

Внутреннее сопротивление цепи, как показано на базе BC547 будет:

Rin = hfe1 * S1 * R7 * R5 = 100 * 50 * 1К * 47K = 235 МОм

HFE примерно от 100 до 200 для BC547 транзистор
- S является наклон кривой усиления транзистора и около 50 [единица = 1/Ohm]

Это более чем достаточно высокой для подключения к нашему ЦАП, который имеет внутреннее сопротивление 5кОм.

Внутреннее эквивалентное сопротивление выхода:

Rout = (R6 + R7) / (S1 + S2 * R5 * R7) = около 2Ом

Достаточно низкое, чтобы использовать транзистор Q2.

R5 связывает базу BC557 с эмиттером, что означает "выключено" для транзистора до ЦАП и BC547 придумать. R7 и R6 связать основе Q2 сначала к земле, которая отключает выходной каскад Дарлингтона вниз.

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

Пределы

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

BD245B: 10A 80Вт. 80Вт при температуре 25"C. Другими словами есть запас мощности из расчета 60-70Вт: (Max input voltage * Max current) < 65Вт.

Вы можете добавить второй BD245B и увеличить мощность до 120Вт. Чтобы убедиться, что текущая распределяется поровну добавить 0,22Ом резистор в эмиттер линии каждого BD245B. Та же схема и плата может быть использована. Установите транзисторов на должном кулер алюминия и соединить их с короткими проводами к плате. Усилитель может управлять второй транзистор питания (это максимум), но вы, возможно, необходимо отрегулировать коэффициент усиления.

Шунт для измерения тока: Мы используем резистор 0,75Ом мощностью 6Вт. Мощности достаточно хватает при токе 2,5А (Iout ^ 2 * 0,75 <= 6Вт). Для больших токов используйте резисторы соответствующей мощности.

Источники питания

Вы можете использовать трансформатор, выпрямитель и конденсаторы большой емкости или можете использовать адаптер для ноутбука 32/24В. Я пошел по второму варианту, т.к. адаптеры иногда продаются очень дешево (по акции), а некоторые из них обеспечивают 70Вт при 24В или даже 32В постоянного напряжения.

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

Для версии 22В 2.5A нужно: 3A 18В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (18 * 1,4 = 25В)
Для версии 30В 2A нужно: 2.5A 24В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (24 * 1,4 = 33.6В)

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

Проверьте ваше устройство на случай плохой изоляции. Убедитесь, что будет не возможно прикоснуться к любой части устройства, где может быть напряжение 110/230 В. Соединить все металлические части корпуса на землю (не GND схемы).

Трансформаторы и адаптеры питания для ноутбуков

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


Другие напряжение и ток

Есть два варианта 22В 2.5A и 30В 2A. Если вы хотите изменить пределы выходного напряжения или тока(только уменьшить) , то просто измените файл hardware_settings.h.

Пример: Чтобы построить 18В 2.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение 18В. Вы можете использовать 20В 2.5A источник питания.

Пример: Чтобы построить 18В 1.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение до 18В и макс. ток 1.5A. Вы можете использовать 20В 1.5A источник питания.

Тестирование

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

Test1: Подключить небольшое напряжение (достаточно 10В) к входным клеммам платы и убедитесь, что регулятор напряжения выдает ровно 5В постоянного напряжения.

Test2: Измерьте выходное напряжение. Оно должно быть 0В (или близкое к нулю, например, 0,15, и оно будет стремиться к нулю, если вы подключите вместо нагрузки резисторы на 2кОм или 5кОм.)

Test3: Установить микроконтроллер на плату и загрузить программное обеспечение LCD-тест, выполнив команды в директории распакованного пакета tar.gz digitaldcpower.

сделать test_lcd.hex
сделать load_test_lcd

Вы должны увидеть на дисплее надпись: "LCD works".

Теперь вы можете загрузить рабочее программное обеспечение.

Некоторые слова предупреждения для дальнейшего тестирования с рабочим программным обеспечением: Будьте осторожны с короткими замыканиями, пока вы не испытали функцию ограничения. Безопасным способом проверить ограничение тока является использование резисторов с малым сопротивлением(единицы Ом), например, автомобильные лампочки.

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

Программное обеспечение

Этот раздел даст вам понимание того, как работает программа, и как вы можете использовать знания, чтобы сделать некоторые изменения в ней. Однако следует помнить, что защита от короткого замыкания сделана программным способом. Если вы сделали где-то ошибку, то защита может не сработать. Если у вас произойдет короткое замыкание на выходе, то ваше устройство окажется в облаке дыма. Чтобы избежать этого, вы должны использовать 12В автомобильную лампу (см. выше) для проверки защиты от короткого замыкания.

Теперь немного о структуре программы. При первом взгляде на основную программу (файл main.c, скачать в конце этой статьи), вы увидите, что есть только несколько строк кода инициализации, которые выполняются при включении питания, а затем программа входит в бесконечный цикл.

Действительно, в этой программе есть два бесконечных цикла. Одним из них является основной цикл ("while(1){ ...}" в файле main.c), а другой представляет собой периодическое прерывание от аналогового цифрового преобразователя (функция "ISR(ADC_vect){...}" в файле analog.c). После инициализации прерывание выполняется каждые 104мкс. Все остальные функции и код выполняются в контексте одного из этих циклов.

Прерывание может остановить выполнение задачи основного цикла в любое время. Затем оно будет обрабатываться, не отвлекаясь на другие задачи, а дальше выполнение задачи снова продолжится в главном цикле на месте, где она была прервана. Из этого следует два вывода:

1. Код прерывания не должен быть слишком длинным, так как он должен завершиться до следующего прерывания. Потому что здесь важно количество инструкций в машинный коде. Математическая формула, которая может быть записана в виде одной строки CИ-кода может использовать до сотни строк машинного кода.

2. Переменные, которые используются в функции прерывания и в коде главного цикла могут внезапно измениться в середине исполнения.

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

Это основная идея программы. Я также коротко объясню про файлы которые вы найдете в архиве(при условии, что вы знакомы с CИ).

main.c - этот файл содержит основную программу. Все инициализации производятся здесь. Основной цикл также реализуется здесь.
analog.c - аналого-цифровой преобразователь, все что работает в контексте прерывания задачи может быть найдено здесь.
dac.c - цифро-аналоговый преобразователь. Инициализируется из ddcp.c, но использованы только с analog.c
kbd.c - программа обработки данных с клавиатуры
lcd.c - драйвер ЖК-дисплея. Это специальная версия, в которой не понадобится RW контакт дисплея.

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

Отредактируйте файл hardware_settings.h и настройте его в соответствии с вашим оборудованием. Здесь вы также можете сделать калибровку вольтметра и амперметра. Файл хорошо прокомментирован.

Подключите кабель к программатору и к вашему устройству. Затем установите биты конфигурации на работу микроконтроллера от внутреннего генератора частотой 8МГц. Программа предназначена для этой частоты.

Кнопки

Блок питания имеет 4 кнопки для местного управления напряжением и макс. током, 5-я кнопка служит для сохранения настроек в памяти EEPROM, чтобы в следующий раз при включении блока были эти же настройки напряжения и тока.

U+ увеличивает напряжение и U - уменьшает. Когда вы держите кнопку, то через некоторое время показания будут "бежать" быстрее, чтобы легко изменить напряжение в больших пределах. Кнопки I + и I - работают так же.

Дисплей

Индикация дисплея выглядит следующим образом:

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

Некоторые фотографии устройства

Вот некоторые фотографии источника питания который я собирал.

Он очень маленький, но с более широкими возможностями и более мощными, чем многие другие источники питания:

Старые алюминиевые радиаторы от процессоров Pentium хорошо подойдут для охлаждения силовых элементов:

Размещение платы и адаптера внутри корпуса:

Внешний вид устройства:

Вариант двухканального блока питания. Прислал Boogyman:

Без чего не может обойтись не один радиолюбитель? Правильно - без ХОРОШЕГО блока питания. В этой статье я опишу, как можно сделать неплохой, на мой взгляд, блок питания из обычного компьютерного (AT или ATX). Хотелось что бы параметры блока устанавливались с помощью энкодера. Идея хороша тем, что не нужно покупать дорогие трансформаторы, транзисторы, мотать импульсные трансформаторы и катушки... Достать компьютерный БП на сегодняшний день не составляет большого труда. Например на местном радиорынке средний БП ATX 300W стоит ~8$. Естественно это за б/у. Но следует учитывать, что чем качественнее копьютерный БП - тем качественнее девайс мы получим=) Бывает что китайские БП так плохо укомплектованы/собраны что и смотреть страшно - отсутствуют абсолютно все фильтры на входе, и почти все фильтры на выходе! Так что выбирать нужно внимательно.За основу был взят БП АТХ CODEGEN 300W который был переделан под напряжение 20В и добавлена плата управления.

Характеристики:

Напряжение - 3 - 20,5 Вольт
Ток - 0,1 - 10А
Пульсации - зависит от модели "исходника".

В изготовлении такого БП есть одно "НО": если Вы ни разу не ремонтировали или хотя бы не разбирали компьютерный БП, то изготовить лабораторный будет проблематично. Это связано с тем, что схематических решений компьютерных БП очень много и описать все необходимые переделки я не смогу. В данной статье я опишу как изготовить плату для контроля за напряжением и током, куда её подключить, и что переделать в самом БП, но точной схемы переделки я Вам не дам. Поисковики вам в помощь. Ещё одно "но": схема рассчитана на использование в БП на основе довольно распространенной микросхемы ШИМ - TL494 (аналоги КА7500, МВ3759, mPC494C, IR3M02, М1114ЕУ).

Схема управления

Схема АТХ CODEGEN 300W

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

В качестве источника напряжения используем канал 12 Вольт, который немного переделаем. Переделка состоит в замене ВСЕХ конденсаторов в цепи 12 Вольт на конденсаторы такой же (или больше) ёмкости, но большего напряжения 25-35 Вольт. Канал 5 Вольт я вообще выкинул - выпаял диодную сборку и все элементы, кроме общего дросселя. Канал -12В также нужно переделать на большее напряжение - мы его тоже будем использовать. Канал 3,3 Вольта тоже нужно убрать, чтобы он нам не мешал.

Вообще, в идеале нужно оставить только диодную сборку канала 12 Вольт и конденсаторы/дроссели фильтра этого канала. Так же нужно убрать цепи обратной связи по напряжению и току. Если цепь ОС по напряжению найти не трудно - обычно на 1 вывод TL494, то по току (защита от КЗ) обычно приходится искать довольно долго, особенно если нету схемы. Иногда это ОС на 15-16 вывод той же ШИМ, а иногда хитрая связь со средней точки управляющего трансформатора. Но эти цепи необходимо убрать и убедиться, что ничего не блокирует работу нашего БП. Иначе лабораторный не получится. Например - в CODEGEN-е я забыл убрать ОС по току... И не мог поднять напряжение выше 14 Вольт - срабатывала защита по току и выключала БП полностью.

Ещё одно важное замечание: Необходимо изолировать корпус БП от всех внутренних цепей.

Это связано стем, что на корпусе БП - общий провод. Если, совершенно случайно, коснуться выходом "+" на корпус, то получается неплохой феерверк. Т.к. теперь нет защиты от КЗ, а есть только ограничение по току, но оно реализовано по отрицательному выводу. Именно так я сжёг первую модель своего БП.

Хотелось что бы параметры блока устанавливались с помощью энкодера.

Управление напряжением и током стабилизации осуществляется встроенным в контроллер ШИМ-ом. Его скважность регулируется энкодером, каждый шаг которого приводит к увеличению или уменьшению опорных напряжений по напряжению и току и как следствие к изменению напряжения на выходе БП или тока стабилизации.

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

Если в течении некоторого времени не проводить никаких действий система управления переходит в ждущий режим и не реагирует на вращение энкодера.

Установленные параметры сохраняются в энергонезависимой памяти и при последующем включении устанавливаются по последнему выставленному значению.

Индикатор в верхней строке отображает измеренное напряжение и ток.

В нижней строке отображается установленный ток ограничения.

При выполнении условия Iizm>Iset БП переходит в режим стабилизации тока.


Вниманию сограждан предлагаю мой вариант лабораторного блока питания с микроконтроллерным управлением. БП имеет одновременное отображение тока и напряжения на двух 3-разрядных 7-сегментных LED-индикаторах, управляется энкодером. БП собран из доступных деталей, имеет защиту от КЗ в нагрузке, при этом легок в повторении и удобен в использовании.

Все моменты сборки, прошивки, наладки будут расмотрены очень подробно во второй части (практической) . Чертежи печатных плат, варианты хексов для ATMEGA16, ATMEGA8535, PIC16F877 в комплекте.

А первая часть статьи (лирическая) немного необычна: почти ни слова о железяках, я делюсь личным тяжким опытом освоения микроконтроллеров с нуля.
Надеюсь, статья поможет кому-то из начинающих пойти моим путем, поможет преодолеть неверие в себя и начать. А началось все с того, что мне надоело все время решать проблему с поиском нужного в данный момент источника питания. Не скажу, что все было у меня на корню запущено. Универсальных блоков питания я уже за свою практику делал много, но почему-то все время с ними что-то было не так… То габариты большие, то напряжение проседало под нагрузкой, то выходной транзистор в очередной раз «прощал мне все обиды» и в мучениях «умирал», несмотря на хваленые защиты.

Дошло даже до того, что я заполучив на халяву два мощных транзистора советского производства в приятном корпусе из розовой керамики на 35А рабочего тока, поставил их на выход в двухполярном блоке питания. Такой вариант оказался очень даже ничего, ибо оные транзисторы стойко держались при питании системы от трансформатора с рабочим током в 20 Ампер в режиме накоротко. Правда, время от времени не выдерживали КТ815 (из предварительного каскада), ибо кто-то же должен был ответить за моё невежество.

Можете себе представить, какие габариты радиаторов и прочих деталей пришлось использовать при таком токе. Короче, получилось все достаточно «круто», но очень грубо и тяжело. Пользоваться таким БП, как показала практика, было не очень удобно, особенно если такие мощности не нужны в повседневной жизни. Таким образом, несмотря на свою универсальность, он мне в прямом смысле слова надоел. Потом я переехал от родителей в другой город и не взял его с собой, ну Вы понимаете почему, такая тяжесть… Хотя я его помню…, иногда сожалею…, но он там так и остается… хотя могу забрать, но… всегда находятся причины этого не делать.

Такая ситуация продолжаться бесконечно не могла и я решил построить что-то новое и более практичное. Беглый анализ, показал, что в большинстве случаев много-то ведь и не надо. Подвел черту - надо иметь под рукой напряжение от 0 до 25 Вольт и током в 2-3А.

Сказано - сделано. Трансформатор как раз такой имелся, а это важный аргумент. Диодный мост - нет проблем, электролиты нашел… и тут стоп! Стабилизаторы типа КР142ЕН/L78xx мне не понравились, ибо нуля от них не дождешься. Решил собирать на дискрете и подумал: раз я буду делать БП с нуля, то надо что-то к нему «прикрутить» новое, современное.

«Что можно к обычному блоку питания добавить современное?» - спросите вы. Долго думать не пришлось: конечно же заменить стрелочные приборы на цифровые индикаторы. Нашел у себя всем известную микросхему 572ПВ5. Правда, в готовом, сделанном ранее термометре на ЖКИ. Надо было немножко переделать и все. Но измерять хочется и напряжение и ток. Опять трудности…

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

Все бы ничего, но в то время микроконтроллер и я были взаимонепересекающимися плоскостями. То есть знания заканчивались на том, что они есть в природе, хотя в студенчестве «зубрил» Ассемблер для КР580-комплекта, а вот как на нем можно «готовить» - лучше не спрашивать. Мог только сделать умный вид среди таких же «специалистов».

Все решил за меня корпус. Делать его с нуля и на кухне в многоэтажке резона не было. Возможности советской промышленности в моем городе как-то тихо и безвозвратно исчезли. Хорошо, знакомый принес мне готовый пустой блок от какого-то военного устройства. Удивительно крепкий (железный ведь) и небольшой и не тяжелый - самое то, что надо. Трансформатор влез. Посмотрев на лицевую панель, я понял, что места немного и «разогнаться» не получится. Надо все делать экономно и миниатюрно. Надо попытаться повторить найденную схему индикаторов на микроконтроллере.

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


Хотя блок питания был собран, я все отчетливее понимал, что мое творение безнадежно устарело.
Сразу решил повторить еще что-нибудь на МК - лишь бы получилось. Тем более, что простенький программатор PonyProg уже был в наличии, программы для его обслуживания тоже и я даже немного их стал понимать (так мне тогда казалось).

Но мысль о современном универсальном блоке питания не оставляла. Я решил осваивать микроконтроллеры. Сдаваться не хотелось, силы есть, а знаний в этой сфере нет. Было очень трудно начинать. Может студентам проще, а тут… Все равно что снова пошел в школу. При этом учителей нет, оценки некому поставить, подсказать тоже и сам понимаешь, что на данном начальном этапе ты полный идиот.

Самостоятельное штудирование книг ни к чему особо положительному не привело. Попытайтесь по книгам с нуля выучить любую ранее не используемую профессию, скажем повара. Все мы умеем жарить яичницу, а попробуйте сварганить из яиц блюдо, которое не стыдно было бы подать на стол гостям, при этом съедобное да современное. Что, слабо?!

Так и у меня. Короче, пошел ва-банк. Решил изучить в этой сфере все, что мне поддается. Заодно и блок питания собрать с управление от микроконтроллера и на его основе программирование освоить. Будет реальный стимул не отчаяться.

Задумал такое: трехразрядные амперметр и вольтметр, регулирование энкодером, индикация аварии и т.п. А это значит использование динамической индикации на 6 индикаторов, параллельный 8-битный ЦАП. Ужас. Подходил только «большой» контроллер на 40 ног, не меньше. По началу, выглядело как-то монструозно. Изучил доступное железо. Оказалось, что продукция Microchip больно кусается на фоне конкурентов от Atmel.


Микроконтроллер ATMega16L предложили за 3$ и это решило все. Ведь экономическая составляющая в нашем случае играет далеко не второстепенную роль.

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

Долго морочился с ЦАПом, сначала хотел «выпендриться» и прицепить готовый чип, а потом подумал: это лишние и не малые затраты, повторяемость проекта начнет стремиться к нулю, да еще надо научиться этим ЦАПом управлять.
Так утвердилась идея резисторного R-2R ЦАПа.


Порты есть, их много и жалеть их не приходиться. Можно было начинать лепить все в кучку. Если все задуманное заработает, то аналоговая часть пойдет проще. Немедленно нарисовал схему, осталось только программное обеспечение. Надо научиться! Ведь для этого я и начал весь этот «сыр-бор».

Тут весь ужас и начался, причем сразу и везде. Начиная от описаний микропроцессоров на английском языке до самого компилятора языка программирования. Короче, не видать мне белого света, если бы не дружественная помощь добрых людей на просторах Интернета. Около 8 месяцев себя изводил, людей мучил, глупые вопросы задавал и все-таки своего добился. Поначалу мозг кипел от переизбытка знаний и попыток их использовать на практике. Борьба с кучей ошибок казалось, не имеет конца…

Для программирования нужно изучить язык и, как оказалось, выбор очень велик. Опытные люди активно посоветовали мне Ассемблер. А я и не противился. Кое-что я знал по студенческим годам, думал, сяду, прочитаю, разберусь с архитектурой и вперед «с песнями и плясками». Так вот, до плясок я дошел, а вот петь уже не хотелось.
Самому, без сторонней помощи разобраться в современном «камне» с нуля, у меня, скажу честно, не получилось. Булева алгебра, тоже порядком подзабытая, с тонкостями работы регистров и банков МК довела меня до ступора в прямом значении слова. Я практически признал свою несостоятельность.
Наступил день, когда я понял, что проект стоит не первый день и света в конце тоннеля не видно.

Тут я решил: не получается Ассемблер, ну и фиг с ним. Я когда-то в молодости Бейсик изучал, а тут как раз предлагают компилятор на таком языке. Опять просматриваю материалы, разбираюсь, но потом прочел мысль на одном из форумов, которая запала мне в голову и, которую можно свести к следующему: все эти диалекты имеют ограниченное число пользователей и помощи в случае чего не допросишься. И действительно, проанализировав временные метки форумов заметил, что на вопросы ответ поступал порой через несколько месяцев. Нет, такое мне не подходило.

Остался единственный вариант, который тоже нахваливали - язык Си. От безысходности накачал книг, давай читать. Читал, читал... Пока читаю, что-то понимаю. Поставил себе компилятор, давай пробовать светодиодом поморгать. Да, простенькие примеры повторить нет проблем, а когда начинаешь углубляться - тут полный затык. Написал вроде как по уму, а компилирую и всё в ошибках. А ошибки то с такими кодами, что без бутылки не понять никак.

Опять ужас! «Совсем я, наверное, тупой» - подумал я.
Даже вспомнил о возрастном кризисе, мировой экономике, опять о своей тупости и такие мне слова на ум пришли, что даже писать неприлично. Понял, что надо искать что-то такое, что может понять даже ребенок из детского сада. Других вариантов у меня уже не было.

Сел я конкретно на «всемирный разум», читал, много искал, искал… Наткнулся на программу Algorithm Builder. Спецы ее знают - это очень мощный компилятор Ассемблера, но в графической форме. Немного пишешь, немного рисуешь, а оно умное, само за тебя все доделывает. Стало интересно, но я уже «пес битый» и знаю, что Ассемблер пока мне не по зубам. Решил поискать что-то аналогичное на Си и нашел!

Это оказался компилятор под непонятным именем «FlowCode For AVR». Его профи не жалуют. Отчасти потому, что это довольно примитивный способ программирования при наличии довольно специфичного программного интерфейса. Но каково было мое удивление, когда в нем у меня стало немного продвигаться, не все конечно, но получаться. Это придало сил. И форум FlowCode оказался в активном состоянии, отвечали быстро и корректно. Да и Си - это не Ассемблер.


Составлять программу в FlowCode просто прикольно. Как будто балуешься. Берешь готовые нарисованные блоки и вставляешь, дописываешь условия их работы и компилишь. С учетом предыдущего изучения огромного количества материала, много я стал наконец-то понимать и все пошло.
Чтобы как-то проверять работу отдельных узлов программы пришлось за одно изучить работу еще одной программы. Это симулятор работы электросхем «Proteus».
Проект написанный в FlowCode для Atmell легко переносится на базу от Microchip и наоборот. При этом все работает, сам проверял.

Но есть у FlowCode одно неприятное свойство - он не учит синтаксису самого языка Си - одни рисунки, алгоритмика.
Из этой ситуации я тоже нашел выход - компилятор «MikroC». Для начального изучения (и не только) он самое то, что надо. После него уже не смотришь круглыми глазами на написанные кем-то куски кода. А это очень важно. Здорово помогает не повторять ошибок и ускоряет процесс написания нужного алгоритма. Но главное его достоинство – это готовые функции для работы с разнообразной периферией. Ничего выдумывать не надо. Поставил функцию, объявил условия и уже два МК между собой «разговаривают», попробуй-ка все это быстро оформить на чем-то еще.

Для неособо владеющих тонкостями (логические операции, механизмы изменения битов в регистрах и т.п.), поделюсь еще одним маленьким секретом. Если сразу открыть оба указанных компилятора, можно запросто воспользоваться возможностями одного для использования в другом. А именно, если создать блок-схему (алгоритм) в FlowCode (что очень удобно), то можно воспользоваться полученными строками на Си и поставить в MikroC.

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

За год я научился основам программирования микроконтроллеров. При самостоятельном освоении, это, я думаю, очень даже не плохо!
А дальше уже дело техники и желания и я над этим продолжаю работать.

На этом с лирической частью всё. Такова житейская история, а дальше - главное - сам блок питания, который трудится у меня без нареканий уже пару лет и был с сокращениями описан в «Радиоаматоре»
Продолжение следует!

Читательское голосование

Статью одобрили 24 читателя.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.

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

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

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

Введение

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

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

Возможно удалить некоторые компоненты или добавить дополнительные функции? Хитрость заключается в том, чтобы переместить функциональность аналоговых компонентов, таких как операционные усилители в микроконтроллер. Иными словами, повышается сложность программного обеспечения, алгоритмов и уменьшается аппаратная сложность. Это уменьшает общую сложность для вас, так как программное обеспечение может быть просто загружено.

Основные электрические идеи проекта

Давайте начнем с простейшего стабилизированного блока питания. Он состоит из 2-х основных частей: транзистора и стабилитрона, который создает опорное напряжение.

Выходное напряжение этой схемы будет составлять Uref минус 0,7 Вольт, которые падают между В и Е на транзисторе. Стабилитрон и резистор создают опорное напряжение, которое является стабильным, даже если на входе есть скачки напряжения. Транзистор необходим для коммутации больших токов, которые стабилитрон и резистор не могут обеспечить. В такой роли транзистор только усиливает ток. Чтобы расчитать ток на резисторе и стабилитроне нужно выходной ток поделить на HFE транзистора (HFE число, которое можно найти в таблице с характеристиками транзистора).

Какие проблемы в этой схеме?

Транзистор сгорит, когда будет короткое замыкание на выходе.
- Она обеспечивает только фиксированное выходное напряжение.

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

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

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

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

АЦП(аналого-цифровой преобразователь) для измерения напряжения и тока.
- ЦАП(цифро-аналоговый преобразователь) для управления транзистором (регулировка опорного напряжения).

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

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

Есть много способов для создания цифро-аналоговых преобразователей, но он должен быть быстрым и простым, который будет легко взаимодействовать с нашим микроконтроллером. Существует схемы преобразователя, известного как "R-2R матрица". Он состоит только из резисторов и переключателей. Используются два типа номинала резисторов. Один со значением R и один с удвоенным значением R.

Выше показана схема 3 битного R2R - ЦАП. С помощью логического управления происходит переключение между GND и Vcc. Логическая единица соединяет переключатель с Vcc, а логический ноль с GND. Что делает эта схема? Она регулирует напряжение с шагом Vcc / 8. Общее выходное напряжение равно:

Uout = Z * (Vcc / (Zmax +1) , где Z разрадность ЦАП (0-7), в данном случае 3-битный.

Внутреннее сопротивление цепи, как видно, будет равно R.

Вместо использования отдельного переключателя можно подключить R-2R матрицу к линиям порта микроконтроллера.

Создание сигнала постоянного тока разного уровня с помощью ШИМ(широтно-импульсная модуляция)

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

В Atmega8 присутствует аппаратный 16-битных ШИМ. То есть теоретически можно иметь 16-битный ЦАП с помощью небольшого количества компонентов. Чтобы получить реальный сигнал постоянного тока из ШИМ-сигнала надо его отфильтровать, это может быть проблемой при высоких разрешениях. Чем больше надо точности, тем ниже должна быть частота ШИМ-сигнала. Это означает, что нужны конденсаторы большой емкости, а время отклика получается очень медленным. Первая и вторая версии цифрового источника питания постоянного тока были построены на 10 битной R2R матрице. То есть максимальное выходное напряжение может быть установлено за 1024 шага. Если использовать ATmega8 с тактовым генератором частотой 8 МГц и 10 битный ШИМ, то импульсы ШИМ сигнала будут иметь частоту 8MHz/1024 = 7.8KHz. Чтобы получить наиболее хороший сигнал постоянного тока нужно отфильтровать его фильтром второго порядка от 700 Гц или меньше.

Можно представить, что произойдет, если использовать 16-битный ШИМ. 8MHz/65536 = 122Hz. Ниже 12Hz, то что нужно.

Объединение R2R-матрицы и ШИМ

Можно совместно использовать ШИМ и R2R-матрицу. В этом проекте мы будем использовать 7-битную R2R-матрицу в сочетании с 5-битным ШИМ-сигналом. С тактовой частотой контроллера 8 МГц и 5-битным разрешением мы получим сигнал 250 кГц. Частота 250 кГц может быть преобразована в сигнал постоянного тока с помощью небольшого числа конденсаторов.

В оригинальной версии цифрового источника питания постоянного тока был использован 10-битный ЦАП на основе R2R-матрице. В новом дизайне мы используем R2R-матрицу и ШИМ с общим разрешением 12 бит.

Передискретизация

За счет некоторого времени обработки можно увеличить разрешение аналого-цифровой преобразователь (АЦП). Это называется передискретизацией. Четверная передискретизация дает результат в двойном разрешении. То есть: 4 последовательных образцов могут быть использованы для получения в два раза больше шагов на АЦП. Теория, лежащая передискретизации объясняется в PDF документ, который вы можете найти в конце этой статьи. Мы используем передискретизации для напряжения контура управления. На текущий контур управления мы используем исходное разрешение АЦП как быстрое время отклика здесь более важным, чем разрешение.

Подробное описание проекта

Несколько технических деталей, по-прежнему отсутствуют:

ЦАП (цифро-аналоговый преобразователь) не может управлять силовым транзистором
- Микроконтроллер работает от 5V, это означает что максимальный выход ЦАП равен 5V, а максимальное выходное напряжение на силовом транзисторе будет 5 - 0.7 = 4.3V.

Чтобы исправить это, мы должны добавить усилители тока и напряжения.

Добавление усилительного каскада на ЦАП

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

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

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

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

Начнем с силового транзистора. Мы используем BD245 (Q1). В соответствии с характеристиками транзистор имеет HFE = 20 на 3А. Поэтому он будет потреблять около 150 мА на базе. Чтобы усилить управляющий ток мы используем связку известную как "Дарлингтон-транзистор". Для этого используем транзистор средней мощности. Как правило, значение HFE должно быть 50-100. Это позволит уменьшить необходимый ток до 3 мА (150 мА / 50). Ток 3mA является сигналом поступающим с маломощных транзисторов, таких как BC547/BC557. Транзисторы с таким выходным током очень хорошо подходят для построения усилителя напряжения.

Чтобы получить на выходе 30В мы должны усиливать 5В идущие с ЦАП с коэффициентом 6. Для этого мы объединяем PNP и NPN транзисторы, как показано выше. Напряжение коэффициента усиления этой схемы вычисляется:

Vampl = (R6 + R7) / R7

Блок питания может быть доступен в 2-х версиях: с максимальным выходым напряжением 30 и 22В. Сочетание 1K и 6.8K дает коэффициент 7,8, который хорош для версии 30В, но возможно будут некоторые потери на более высоких токах (наша формула является линейной, но в реальности нет). Для 22В версии мы используем 1K и 4.7K.

Внутреннее сопротивление цепи, как показано на базе BC547 будет:

Rin = hfe1 * S1 * R7 * R5 = 100 * 50 * 1К * 47K = 235 МОм

HFE примерно от 100 до 200 для BC547 транзистор
- S является наклон кривой усиления транзистора и около 50 [единица = 1/Ohm]

Это более чем достаточно высокой для подключения к нашему ЦАП, который имеет внутреннее сопротивление 5кОм.

Внутреннее эквивалентное сопротивление выхода:

Rout = (R6 + R7) / (S1 + S2 * R5 * R7) = около 2Ом

Достаточно низкое, чтобы использовать транзистор Q2.

R5 связывает базу BC557 с эмиттером, что означает "выключено" для транзистора до ЦАП и BC547 придумать. R7 и R6 связать основе Q2 сначала к земле, которая отключает выходной каскад Дарлингтона вниз.

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

Пределы

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

BD245B: 10A 80Вт. 80Вт при температуре 25"C. Другими словами есть запас мощности из расчета 60-70Вт: (Max input voltage * Max current) < 65Вт.

Вы можете добавить второй BD245B и увеличить мощность до 120Вт. Чтобы убедиться, что текущая распределяется поровну добавить 0,22Ом резистор в эмиттер линии каждого BD245B. Та же схема и плата может быть использована. Установите транзисторов на должном кулер алюминия и соединить их с короткими проводами к плате. Усилитель может управлять второй транзистор питания (это максимум), но вы, возможно, необходимо отрегулировать коэффициент усиления.

Шунт для измерения тока: Мы используем резистор 0,75Ом мощностью 6Вт. Мощности достаточно хватает при токе 2,5А (Iout ^ 2 * 0,75 <= 6Вт). Для больших токов используйте резисторы соответствующей мощности.

Источники питания

Вы можете использовать трансформатор, выпрямитель и конденсаторы большой емкости или можете использовать адаптер для ноутбука 32/24В. Я пошел по второму варианту, т.к. адаптеры иногда продаются очень дешево (по акции), а некоторые из них обеспечивают 70Вт при 24В или даже 32В постоянного напряжения.

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

Для версии 22В 2.5A нужно: 3A 18В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (18 * 1,4 = 25В)
Для версии 30В 2A нужно: 2.5A 24В трансформатор, выпрямитель и 2200мкФ или 3300мкФ конденсатор. (24 * 1,4 = 33.6В)

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

Проверьте ваше устройство на случай плохой изоляции. Убедитесь, что будет не возможно прикоснуться к любой части устройства, где может быть напряжение 110/230 В. Соединить все металлические части корпуса на землю (не GND схемы).

Трансформаторы и адаптеры питания для ноутбуков

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


Другие напряжение и ток

Есть два варианта 22В 2.5A и 30В 2A. Если вы хотите изменить пределы выходного напряжения или тока(только уменьшить) , то просто измените файл hardware_settings.h.

Пример: Чтобы построить 18В 2.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение 18В. Вы можете использовать 20В 2.5A источник питания.

Пример: Чтобы построить 18В 1.5A версию вы просто меняете в файле hardware_settings.h максимальное выходное напряжение до 18В и макс. ток 1.5A. Вы можете использовать 20В 1.5A источник питания.

Тестирование

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

Test1: Подключить небольшое напряжение (достаточно 10В) к входным клеммам платы и убедитесь, что регулятор напряжения выдает ровно 5В постоянного напряжения.

Test2: Измерьте выходное напряжение. Оно должно быть 0В (или близкое к нулю, например, 0,15, и оно будет стремиться к нулю, если вы подключите вместо нагрузки резисторы на 2кОм или 5кОм.)

Test3: Установить микроконтроллер на плату и загрузить программное обеспечение LCD-тест, выполнив команды в директории распакованного пакета tar.gz digitaldcpower.

сделать test_lcd.hex
сделать load_test_lcd

Вы должны увидеть на дисплее надпись: "LCD works".

Теперь вы можете загрузить рабочее программное обеспечение.

Некоторые слова предупреждения для дальнейшего тестирования с рабочим программным обеспечением: Будьте осторожны с короткими замыканиями, пока вы не испытали функцию ограничения. Безопасным способом проверить ограничение тока является использование резисторов с малым сопротивлением(единицы Ом), например, автомобильные лампочки.

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

Программное обеспечение

Этот раздел даст вам понимание того, как работает программа, и как вы можете использовать знания, чтобы сделать некоторые изменения в ней. Однако следует помнить, что защита от короткого замыкания сделана программным способом. Если вы сделали где-то ошибку, то защита может не сработать. Если у вас произойдет короткое замыкание на выходе, то ваше устройство окажется в облаке дыма. Чтобы избежать этого, вы должны использовать 12В автомобильную лампу (см. выше) для проверки защиты от короткого замыкания.

Теперь немного о структуре программы. При первом взгляде на основную программу (файл main.c, скачать в конце этой статьи), вы увидите, что есть только несколько строк кода инициализации, которые выполняются при включении питания, а затем программа входит в бесконечный цикл.

Действительно, в этой программе есть два бесконечных цикла. Одним из них является основной цикл ("while(1){ ...}" в файле main.c), а другой представляет собой периодическое прерывание от аналогового цифрового преобразователя (функция "ISR(ADC_vect){...}" в файле analog.c). После инициализации прерывание выполняется каждые 104мкс. Все остальные функции и код выполняются в контексте одного из этих циклов.

Прерывание может остановить выполнение задачи основного цикла в любое время. Затем оно будет обрабатываться, не отвлекаясь на другие задачи, а дальше выполнение задачи снова продолжится в главном цикле на месте, где она была прервана. Из этого следует два вывода:

1. Код прерывания не должен быть слишком длинным, так как он должен завершиться до следующего прерывания. Потому что здесь важно количество инструкций в машинный коде. Математическая формула, которая может быть записана в виде одной строки CИ-кода может использовать до сотни строк машинного кода.

2. Переменные, которые используются в функции прерывания и в коде главного цикла могут внезапно измениться в середине исполнения.

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

Это основная идея программы. Я также коротко объясню про файлы которые вы найдете в архиве(при условии, что вы знакомы с CИ).

main.c - этот файл содержит основную программу. Все инициализации производятся здесь. Основной цикл также реализуется здесь.
analog.c - аналого-цифровой преобразователь, все что работает в контексте прерывания задачи может быть найдено здесь.
dac.c - цифро-аналоговый преобразователь. Инициализируется из ddcp.c, но использованы только с analog.c
kbd.c - программа обработки данных с клавиатуры
lcd.c - драйвер ЖК-дисплея. Это специальная версия, в которой не понадобится RW контакт дисплея.

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

Отредактируйте файл hardware_settings.h и настройте его в соответствии с вашим оборудованием. Здесь вы также можете сделать калибровку вольтметра и амперметра. Файл хорошо прокомментирован.

Подключите кабель к программатору и к вашему устройству. Затем установите биты конфигурации на работу микроконтроллера от внутреннего генератора частотой 8МГц. Программа предназначена для этой частоты.

Кнопки

Блок питания имеет 4 кнопки для местного управления напряжением и макс. током, 5-я кнопка служит для сохранения настроек в памяти EEPROM, чтобы в следующий раз при включении блока были эти же настройки напряжения и тока.

U+ увеличивает напряжение и U - уменьшает. Когда вы держите кнопку, то через некоторое время показания будут "бежать" быстрее, чтобы легко изменить напряжение в больших пределах. Кнопки I + и I - работают так же.

Дисплей

Индикация дисплея выглядит следующим образом:

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

Некоторые фотографии устройства

Вот некоторые фотографии источника питания который я собирал.

Он очень маленький, но с более широкими возможностями и более мощными, чем многие другие источники питания:

Старые алюминиевые радиаторы от процессоров Pentium хорошо подойдут для охлаждения силовых элементов:

Размещение платы и адаптера внутри корпуса:

Внешний вид устройства:

Вариант двухканального блока питания. Прислал Boogyman:

Понравилась статья? Поделиться с друзьями: