Источник тока управляемый Arduino

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

1. Характеристики программируемого источника тока

Функциональные характеристики:

  • два независимых канала стабильного тока (условно канал А и канал В);
  • общий радиатор охлаждения выходных транзисторов;
  • программно-управляемый (по температуре радиатора) вентилятор охлаждения;
  • закрепленный на радиаторе датчик температуры DS18B20;
  • возможность программного переключения тестируемого аккумулятора из режима разряда в режим заряда (только для канала А)
  • возможность подключения внешнего источника напряжения для реализации алгоритмов зарядки аккумуляторов (только для канала А);
  • два программно-управляемых светодиода для реализации необходимой индикации;
  • программно-управляемый зуммер для реализации звуковых оповещений;
  • возможность подключения встраиваемых ампервольтметров для оперативной индикации напряжения и тока;
  • возможность питания всего устройства от порта USB;
  • возможность подключения внешнего питания от 7 до 12 Вольт (рекомендуется для повышения точности измерений и лучшего охлаждения).

Технические характеристики:

Наименование параметраЗначение параметра
Максимальное напряжение тестируемых устройств, В Не более 18
Максимальная долговременная суммарная (по двум каналам) рассеиваемая мощность с использованием принудительного охлаждения, Вт*Не более 30
Диапазон устанавливаемого тока, А  От 0,1 до 5
Время установки выходного тока, мсНе более 2
Минимальное напряжение тестируемого устройства при входном токе 1.0 А, при котором обеспечивается стабильность тока, ВНе более 0.2
Минимальное напряжение тестируемого устройства при входном токе 4.7 А, при котором обеспечивается стабильность тока, ВНе более 1

* что бы не превысить максимально-допустимую рассеиваемую мощность необходимо контролировать ток, напряжение и температуру радиатора. Например, при напряжении тестируемого устройства 10 вольт ток не может превышать 3 ампер, при условии, что второй канал не используется.  Кроме того, при рассеиваемой мощности более 20 Вт необходимо использовать внешнее питание для увеличения производительности вентилятора охлаждения.

2. Описание принципиальной электрической схемы источника тока

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

Принципиальная электрическая схема программируемого источника тока

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

2.1. Программируемая управляющая часть на базе  Arduino

В качестве устройства управления была выбрана плата Arduino Nano. Выбор платы Arduino Nano обусловлен следующим: на плате установлен микроконтроллер ATmega328 со всей необходимой «обвязкой», имеется стабилизатор напряжения на 5 вольт и током нагрузки до 800 мА, что позволяет питать все устройство в целом от не стабилизированного источника питания напряжением до 12 вольт, имеется разъем USB и установлена микросхема-преобразователь USB-UART, что позволяет программировать и управлять устройством по одному USB кабелю, легкое и понятное программирование устройства с помощью Arduino IDE и наличие большого количества готовых библиотек. Кроме того, плата Arduino Nano имеет минимальные размеры, в некотором смысле ее можно считать даже гибридной микросхемой. Производительности данной платы с учетом используемого языка программирования для разрабатываемого устройства более чем достаточно. Забегая вперед скажу, что конструктивно на плате устройства предусмотрена установка платы Arduino Nano, но это не мешает подключать отдельными проводниками другие платы Arduino, подходящие по функционалу и имеющие достаточное количество необходимых выводов. Учитывая то, что конструктивно силовая и управляющая части устройства разделены и плата Arduino Nano устанавливается на плату источника тока как отдельное устройство, то можно исполнительную силовую часть представлять как некий шилд для платформы Arduino под названием «Управляемый источник тока для Arduino«.

2.2. Силовая часть источника тока

Силовая  исполнительная часть устройства двухканальная (по сути мы имеем на одной плате два независимых источника стабильного тока — канал А и канал В) и выполнена на мощных полевых транзисторах IRL2203N, которые  регулируют необходимый  ток в выходной цепи. Тестируемое устройство, например аккумулятор, подключается к клеммам +Ubat и -Ubat. Стабильность тока при изменении напряжения на стоке достигается за счет использования операционного усилителя (ОУ) DA1. Рассмотрим канал А, регулирующим элементом тока в котором выступает транзистор VT4.  На неинвертирующий вход (3) ОУ подается регулируемое напряжение Uрег, посредством которого устанавливается необходимый ток в выходной цепи источника тока. Установленное напряжение сравнивается операционным усилителем с напряжением на инвертирующем входе (2) ОУ, которое снимается с резистора R27. Резистор R27 является «датчиком» тока, протекающим через транзистор VT4 . При этом если падение напряжения на резисторе R27 превысит напряжение на неинвертирующем входе ОУ, то на выходе ОУ напряжение будет понижаться, что приведет к закрыванию транзистора VT4 и уменьшению тока через резистор R27 до тех пор, пока напряжение на резисторе не станет равным напряжению на неинвертирующем входе ОУ.  Далее ОУ непрерывно будет изменять напряжение на затворе транзистора VT4 таким образом, что бы напряжение на резисторе R27 оставалось неизменным, что в свою очередь приведет к стабилизации тока через транзистор.  Необходимый нам ток в выходной цепи устройства будет определяться следующим выражением: Iвых=Uрег/R27. Напряжение Uрег формируется микроконтроллером на плате Arduino Nano программным способом и корректируется цепями R13C3R15R16. Так как данный микроконтроллер не имеет аналоговых выходов, то изменение напряжения достигается за счет изменения скважности импульсов на выходе D10 платы и последующим выделением постоянной составляющей напряжения с помощью цепи R13C3. Путем изменения скважности импульсов с помощью соответствующей библиотеки для Arduino Nano можно получить изменение напряжения на конденсаторе C3 от нуля и практически до уровня напряжения питания микроконтроллера (будем считать, что оно равно ровно 5 вольт). При этом, если подать на вход (3) ОУ напряжение 5 вольт, то получим ток в выходной цепи  Iвых=Uрег/R27 =5/0,1=50 ампер, что не входит в наши планы. Предельный ток устройства планировалось ограничить 5 амперами, значит максимальное напряжение на неинвертирующем входе ОУ и, соответственно, на резисторе R27 не должно превышать 0,5 вольт. Для этих целей используется резистивный делитель R15R16. Подстроечным резистором R16 производится калибровка выходного тока, т.е. с его помощью выставляется ток в выходной цепи в 5 ампер при максимальном напряжении, получаемом программно на конденсаторе C3. Благодаря использованию низкоомного резистора R27 и транзистора с низким сопротивлением Сток-Исток удалось достигнуть высокой стабильности тока при минимальном входном напряжении (см. характеристики выше). Резисторы R20,R22 и конденсатор C6 предотвращают самовозбуждение ОУ на высоких частотах. Несколько слов о типах элементов.  Силовой транзистор выбран с низким управляемым напряжением из серии IRL так как вся схема питается напряжением 5 вольт.  ОУ LMV358ID типа rail-to-rail, то-есть позволяет получить на выходе напряжение практически от нуля до напряжения питания, что в данном случае важно для управления полевым транзистором. Конденсатор C3 выбирался с достаточно стабильным диэлектриком X7R, так как изменение его емкости в больших пределах при различных дестабилизирующих факторах (нагрев, изменение постоянного напряжения) не желательно. Кстати, неплохая статья по этому поводу.  Это все, что касается управляемой силовой части устройства.

2.3. Цепи измерения, коммутации и сигнализации

Реле К1 предназначено для переключения тестируемого аккумулятора из режима разрядки в режим зарядки (используется только в канале А). Реле управляется с вывода D12 платы Arduino Nano посредством транзистора VT3. Светодиод HL3 сигнализирует о включении реле. При использовании режима зарядки необходимо подключить внешний источник питания к клеммам +U и -U с напряжением, превышающим максимальное зарядное напряжение аккумулятора минимум на 1 вольт.

Вентилятор охлаждения управляется с вывода D6 платы Arduino Nano посредством транзистора VT2.  При этом если устройство питается от внешнего источника питания, то на вентилятор подается именно это напряжение для увеличения скорости вращения, что позволяет рассеивать максимальную мощность, указанную в характеристиках устройства.

Так же на плате расположены два светодиода (HL1, HL2) и зуммер (HA1), которые могут использоваться на усмотрение пользователя для индикации различных режимов работы источника тока.

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

Для измерения напряжения используются аналоговые входы A0, A1, A2 платы Arduino Nano. Так как предусмотрено измерение напряжения до 18 вольт, то для уменьшения напряжения используются соответствующие резистивные делители — R7R8, R9R10, R11R12.

Конденсаторы C1 и C2 обеспечивают устойчивость работы встроенного в плату Arduino Nano интегрального стабилизатора напряжения. Диод VD4 защищает устройство от случайной переполюсовки внешнего источника питания.

В конструкции источника тока предусмотрено подключение встраиваемых ампервольтметров. Подключаются они к клеммным колодкам XS2 и XS4 (для каждого канала свой отдельный прибор).  На Али их продается великое множество. Я использовал такой:

 

  

На схеме на контактных колодках XS2 и XS4 обозначены цвета проводников указанного ампервольтметра. При использовании других приборов необходимо их подключать в соответствии с инструкцией.

3. Конструкция устройства

Для установки электронных компонентов источника тока была разработана печатная плата размерами 100х78 мм. Плата была разведена в программе Sprint Layout 5.0.  Ниже на фото показана плата с установленными компонентами.  Часть компонентов схемы установлено со стороны печатных проводников с обратной стороны платы. Транзисторы установлены на общем радиаторе через теплопроводящие прокладки НОМАКОН. Транзисторы находятся под радиатором в горизонтальном положении. Там же под радиатором закреплен датчик температуры DS18B20. Скачать файл платы в формате Sprint Layout 5.0 можно в конце статьи.

 

4. Создание скетча в среде Arduino IDE для проверки работы источника тока

Скетч реализует основные алгоритмы работы источника тока и, тем самым, демонстрирует возможности устройства. Скетч подробно закомментирован.  Остановлюсь на основных моментах программы. В строках с 7 по 28 задаются значения констант.  Например, в строках 11 и 12 можно установить температуру включения и выключения вентилятора охлаждения. Температура измеряется датчиком DS18B20  непосредственно на радиаторе.

Функция serialEvent() (строка  60) вызывается всякий раз при получении данных через последовательный порт Arduino IDE. На этом и основано управление устройством. Например, в строках 63-98 реализована возможность установки значения тока. При этом ток можно устанавливать грубо, вводя в мониторе порта Arduino IDE символы от 1 до 4, что будет соответствовать току 1, 2, 3 и 4 ампера. Более точно ток можно устанавливать, вводя символы «+» и «-«, что будет соответствовать увеличению или уменьшению тока с шагом 0.1 ампер.

При вводе символа «u» выполнится условие в строке 103 и произойдет измерение напряжения по трем измеряемым цепям (на схеме они обозначены как А1, А2 и В1) с выводом значений в монитор порта Arduino IDE .

В основном цикле программы (функция loop() ) реализовано измерение температуры радиатора (строки 159-173) с периодичностью в 2 секунды, прописано условие включения вентилятора охлаждения в зависимости от измеренной температуры, происходит вывод значений температуры радиатора и расчетной температуры кристаллов силовых транзисторов если выполняется условие в строке 180 (необходимо ввести символ «t»). Кроме того задано условие отключения тока через транзисторы при превышении допустимой температуры радиатора (строки 196-206), которая задана константой ALARM_TEMPERATURE.

Демонстрация работы скетча

В программе используется внутреннее (аппаратное) прерывание, которое реализовано на таймере 2 микроконтроллера. Обработчик прерывания timerInterrupt() вызывается каждые 10 мс. В обработчике прописаны три счетчика (переменные timeCount;  timeCount1;  timeCount2;), которые подсчитывают количество прерываний. Далее эти переменные используются для своих определенных целей.  Например,  значение счетчика-переменной timeCount используется для периодического обращения к датчику температуры. В данном случае температура измеряется один раз в две секунды. Период измерения температуры задан константой TEMP_MEASURE_PERIOD.  Значение счетчика-переменной timeCount1 используется для реализации прерывистого звукового сигнала (строки 240-249). Счетчик  timeCount2 используется для ограничения  времени подачи аварийного сигнала о перегреве кристаллов (переходов) транзисторов. Расчет температуры кристаллов транзисторов так же реализован в обработчике прерывания и выполняется каждые 10 мс (строки 214-237). Остановлюсь на этом поподробнее. Попытка контролировать температуру кристалла транзисторов обусловлена желанием реализовать более надежную и гибкую защиту от перегрева. Это тоже своего рода эксперимент (собственно, для этого это устройство и проектировалось). К сожалению, температуру кристалла транзистора измерить не возможно. Ее можно только рассчитать, используя следующую формулу:

crystalTemp = crystalPower х JUNCTION_TO_SINK + temperature,

где crystalTemp — температура кристалла; crystalPower — мощность на транзисторе; JUNCTION_TO_SINK — тепловое сопротивление кристалл-радиатор;  temperature — температура радиатора.

Тепловое сопротивление кристалл-радиатор состоит из суммы тепловых сопротивлений кристалл-корпус, корпус-радиатор. Для транзистора IRL2203n значения этих параметров равны 0.85 °С/Вт и 0.5 °С/Вт  соответственно. Но, к сожалению, мне пришлось устанавливать под транзисторы теплопроводящие прокладки в связи с тем, что оба транзистора установлены на общем радиаторе и соединение их стоков не допустимо. Тепловое сопротивление используемой прокладки НОМАКОН размерами 10х13 мм и толщиной 0.2 мм составляет порядка 2,58 °С/Вт (было взято наихудшее значение, так как точная марка мне достоверно не известна).  Данные были взяты с сайта производителя. Кстати, мною запланировано экспериментальное измерение теплового сопротивления теплопроводящих подложек, но об этом в одной из следующих публикаций. Таким образом, общее тепловое сопротивление кристалл-радиатор составит 0.85+0.5+2.58 = 3.92 °С/Вт. Для расчета полученное значение округленно до 4 °С/Вт . Предполагаю, что значение завышено, но лучше перестраховаться, чтобы не повредить транзисторы. Каждые 10 мс в обработчике прерывания исходя из заданного тока, измеренного напряжения и измеренной температуры радиатора рассчитывается температура кристалла каждого транзистора. Если она превышает допустимое значение (для транзистора IRL2203n  175 °С), заданное константой CRYSTAL_TEMP_LIMIT, то ток через транзисторы устанавливается в нулевое значение (строки 221-222). Включается прерывистый звуковой сигнал. Следует отметить, что если отказаться от использования  теплопроводящей подложки, то можно увеличить максимально-допустимую рассеиваемую мощность на транзисторе, но, к сожалению это не возможно в данной конструкции. Есть планы поэкспериментировать с подложками из разных материалов, но это пока только в планах.

Для определения задержки установления задаваемого тока  используется алгоритм, прописанный в строках 252-254. Если ввести символ «p» в мониторе порта Arduino IDE, то выполнится условие в строке 252 и устройство начнет работать в импульсном режиме, т.е. ток будет менять свое значение от нуля до значения, заданного константой CURRENT_PULSE с периодом 20 мс. Ниже показана осциллограмма изменения тока (2 мс/деление).

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

Функция ReadVoltage(канал) возвращает измеренное напряжение в заданном канале (А1, А2 или В1). Функция производит 20 измерений уровня сигнала на соответствующем входе микроконтроллера  и усредняет полученные значения, затем усредненное измеренное значение умножается на коэффициент, соответствующий определенному каналу измерения. Коэффициент учитывает резистивный делитель напряжения и опорное напряжение аналого-цифрового преобразователя, которое в данном случае равно 1.1 вольт (внутренний опорник микроконтроллера). Функция требует доработки, и в первую очередь из-за своей медлительности, измерение напряжения занимает порядка 3 мс, и прежде всего из-за использования медленной встроенной функции analogRead().

Функция currentSet(канал, ток) устанавливает нужный ток в определенном канале. Функция сделана для того, чтобы , во-первых, ток можно было задавать из любого места программы в амперах, и во-вторых, что бы значение заданного тока всегда передавалось в массив currentCheck[2] для дальнейшего вычисления рассеиваемой мощности и температуры кристалла транзистора.

На этом, пожалуй, все. Кому интересно оставляйте комментарии и вопросы.

Плата, схема, скетч
Скачано: 77, размер: 43.2 KB, дата: 05 Апр. 2018

Поделиться ссылкой:

6 Comments on “Источник тока управляемый Arduino”

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

  1. Спасибо. Благодаря вашей статье сообразил как ШИМ перевести в аналог, для управления 100 W RGB матрицей. Разобрался прям досконально. Схема получилась маленько другая, другие транзисторы, больше ток. Спасибо.

Добавить комментарий