Здравствуйте, уважаемые читатели!
Представляю вам очередной обзор продукции китайской электронной промышленности, на этот раз у меня на столе плата для ШИМ-управления двумя коллекторными двигателями 3-36V с реверсом.
Я предварительно планирую использовать её для управления 12-вольтовыми линейными приводами форточек и дверей в теплице в новой версии контроллера. Поэтому данная статья в первую очередь шпаргалка для меня самого. Почему я не хочу интегрировать мосты на основную плату? Потому что в случае неисправности заменить плату мостов на подменную гораздо проще и быстрее, чем ремонтировать её (но нужно иметь замену, конечно).
Предупреждение! Статья не закончена: данные “ходовых испытаний” пока не получены. Поэтому статья будет дополнена позже, по мере испытания на реальной нагрузке.
Технические характеристики
Производитель заявляет следующие данные:
- Напряжение питания логики – 5В
- Уровни TTL логики управления – 5В
- ШИМ модуляция скорости вращения – от 0% до 99%
- Возможность смены направления движения
- Напряжение питания нагрузки – от 3 до 36В
- Ток нагрузки максимальный – 15А
- Кратковременный допустимый ток – 30А
- Размеры 60 х 110 мм
Если будете заказывать данную плату, обратите внимание на то, что в продаже имеется две версии. На другой, “усовершенствованной”, версии в центре платы имеется еще один “электролит”, и немного изменена схема преобразователя напряжения. По слухам, новые платы не всегда работают, но проверить я это не могу.
Плата имеет два идентичных друг другу канала управления, поэтому можно управлять сразу двумя электродвигателями. На входе установлена обычная стандартная гребенка, которая не отличается высокой надежностью в процессе эксплуатации. Поэтому я впоследствии заменю ее на разъем XH2.54, ибо они мне нравятся гораздо больше.
На плате тут и там видны следы неотмытого флюса, особенно на оборотной стороне. Разъемы и силовые элементы паяются вручную.
На нижней стороне отсутствуют два диода D2 и D4 (см. схему ниже). Силовые дорожки снизу “усилены” припоем, но на верхней стороне такого нет – только луженая медь.
Некоторые микросхемы явно допаивали вручную:
Поэтому прежде чем ставить плату в готовое устройство, стоит немного поработать щеткой и средством для отмывки флюса.
Схема
Разумеется, никто не предоставляет никаких datasheet-ов и схем на данную плату, поэтому мне пришлось сделать реверс-инженеринг и нарисовать её самому. Надеюсь, я нигде не напутал.
Основная логика
Каждый из двух каналов имеет похожую схему, которая включает в себя логику управления и по две микросхемы драйвера моста, которые в свою очередь, управляют ключевыми MOSFET-транзисторами.
На входе установлена микросхема 74HCT02D, которая содержит в себе четыре 2-входовых вентиля NOR (“2ИЛИ-НЕ”). Входы имеют ограничительные диоды защиты.
С моей точки зрения очень жаль, что здесь установлена именно 74HCT02D, которая рассчитана на 5-вольтовую TTL-логику. Была бы 74HC02D (CMOS-уровни) – можно было бы напрямую подключать плату к ESP32. С другой стороны, на Ali есть отзыв, что сгоревшая из-за перегрузки плата утянула за собой и контроллер Arduino. Так что оптроны между микроконтроллером и этой платой точно не помешают, а ими же можно будет одновременно и согласовать логические уровни.
Два элемента используются просто как инверторы, на двух других реализована логика переключения направления движения мотора, в результате чего логические уровни на выходах 4 и 13 являются противоположными друг другу (противофазными).
Далее, этими сигналами запускаются два драйвера IGBT/MOSFET-полумоста на микросхемах L6384ED.
Эта микросхема имеет несколько уровней защиты от сквозного тока через ключевые транзисторы полумоста, в том числе функцию deadtime, настраиваемой через внешний резистор, подключенный к выводу DT/SD. Логические входы совместимы с CMOS/TTL логикой, что упрощает взаимодействие с управляющими схемами.
Интересно, что две микросхемы (в разных каналах по одной) оснащены вootstrap-диодами Шоттки D3 и D5, а две – нет.
Ключевые MOSFET-транзисторы
Собственно сам H-мост собран на N-канальных MOSFET-ах IRF3205:
Этот транзистор по даташиту допускает нагрузку до 55В и 75~110А, и имеет сопротивление в открытом состоянии 0.0065 Ом/66А, 10В. То есть с большим запасом. Но это характеристики оригинальных транзисторов. Какие установлены в данном случае – знает только производитель этих самых транзисторов, и, возможно, производитель платы. Кроме того, эти характеристики приведены для использования на массивном радиаторе с эффективным теплоотводом, чего нет в данном случае. Поэтому производитель платы ограничивает ток моторов на 15А.
Ну а я немного позже проверю, выдержат ли данные транзисторы ток 12В 6А без значительного нагрева, и дополню данную статью (на сайте, на дзене будет отдельная статья-дополнение).
Преобразователь напряжения
Так как для работы драйверов требуется напряжение 11,5~16В, на микросхеме MC34036A собран повышающий импульсный DC-DC преобразователь:
Меня только смутил резистор R7, по даташиту и схемам в интернете он должен быть номиналом 0,22 ~ 0.33 Ом. Здесь же мы видим маркировку 0 Ом, то есть “перемычка”. Впрочем, реальное сопротивление у этой перемычки вполне может быть эти самые 0,22 Ома.
При подаче питания на логику на выходе преобразователя тестер показывает выходное напряжение около 15 вольт.
Тестирование работоспособности
В качестве тестовой нагрузки я использовал коллекторный электродвигатель, установленный на 3D-ЧПУ станочке. Станок все равно пока стоит без дела. Снимать же приводы с теплицы очень не хочется – разъемов у приводов нет, придется обрезать провода а потом вновь паять, что не очень хочется.
Этот двигатель потребляет около 1А при 12В и около 1.2А при напряжении 20В.
Конечно, этого мало для моих целей (мне нужно управлять приводами 12В суммарным током до 5~6А), но хотя бы позволяет оценить нагрев транзисторов и работоспособность самой платы H-моста. Если заблокировать вал двигателя, то ток легко может превысить 5А, но долго держать его в таком режиме нельзя.
Первым делом я попытался запустить “логику” платы от напряжения 3,3В – а “вдруг прокатит”?… Не прокатило.
Встроенный в плату преобразователь DC-DC запустился только при напряжении около 4В. То есть подключить её напрямую к 3.3В-логике ESP32 не выйдет. Значит, нам необходим преобразователь логических уровней – ведь необходимо не “понизить” напряжение, а повысить его. Вариантов может быть несколько, например:
- С помощью оптронов, например PC817
- С помощью преобразователя уровней на основе полевых транзисторов (или даже биполярных)
Схема сопряжения уровней
В целях тестирования для согласования уровней я применил китайскую платку OP71A04 3.3 -> 5.0В – это всего лишь четыре оптрона PC817 с токо-ограничительными резисторами и светодиодами для дополнительной индикации. Само собой, оптроны будут вносить дополнительные искажения в ШИМ сигнал, в чем мы и убедимся чуть позже.
Для тестирования платы я собрал незамысловатую схему:
Два выхода микроконтроллера GPIO5 и GPIO17 через оптоизолятор подключил к входам DIR1 и PWM1 платы. На плату подано напряжение 5В с дополнительного блока питания. На выходные цепи и электродвигатель подключено напряжение 12 ~ 24 В с лабораторного блока питания.
Работа с “постоянным” управляющим сигналом категорически не рекомендуется
Производитель (продавец) заявляет, что на входы PWM1 и PWM2 необходимо обязательно подать ШИМ-сигнал с заполнением от 0 не выше 99%. Что ж, проверим это. Подаем питание, и на вход PWM1 подаем +5В – просто логическую единицу. Напряжение на DIR в общем-то не важно.
И двигатель начинает вращаться!! “А что, так можно было что-ли?”. Продавец / производитель не в курсе, что так работает?
Но!!! Через пару секунд об выходной транзистор можно легко обжечься.
Причем греется только один транзистор, а не два, как можно было бы предположить (я предположил, что причина этому отсутствующие диоды с обратной стороны платы). Его температура через 10 секунд легко перешагивает сотню градусов. Не порядок!
Забегая вперед, скажу, что в ШИМ-режиме ничего подобного не наблюдается. Получается, производитель заведомо знает о таком поведении платы – и это не баг, а фича. Следовательно, использовать данную плату в режиме управления постоянным напряжением нельзя.
Придется подключать к микроконтроллеру и выводить ШИМ сигнал с него.
Тестовая программа
Программа для тестирования не отличается особой сложностью:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <inttypes.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "driver/gpio.h" #include "driver/ledc.h" #define GPIO_PWM 5 #define GPIO_DIR 17 void app_main(void) { gpio_config_t io_conf = {}; io_conf.intr_type = GPIO_INTR_DISABLE; io_conf.mode = GPIO_MODE_OUTPUT; io_conf.pin_bit_mask = BIT64(GPIO_DIR); io_conf.pull_down_en = 0; io_conf.pull_up_en = 0; gpio_config(&io_conf); ledc_timer_config_t ledc_timer; ledc_timer.duty_resolution = LEDC_TIMER_8_BIT; ledc_timer.freq_hz = 4000; ledc_timer.speed_mode = LEDC_LOW_SPEED_MODE; ledc_timer.timer_num = LEDC_TIMER_0; ledc_timer.clk_cfg = LEDC_AUTO_CLK; ledc_timer.deconfigure = 0; ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer)); ledc_channel_config_t ledc_channel; ledc_channel.channel = LEDC_CHANNEL_0; ledc_channel.gpio_num = GPIO_PWM; ledc_channel.intr_type = LEDC_INTR_DISABLE, ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE; ledc_channel.timer_sel = LEDC_TIMER_0; ledc_channel.duty = 0; ledc_channel.hpoint = 0; ledc_channel.flags.output_invert = 1; ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel)); bool dir = 0; while (1) { gpio_set_level(GPIO_DIR, (uint32_t)dir); for (uint16_t i = 0; i < 256; i++) { printf("Set duty: %d\n", i); ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, i)); ESP_ERROR_CHECK(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0)); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf("Reverse\n"); dir = !dir; } }
Вначале мы настраиваем вывод GPIO17 в режим выхода – им мы будем управлять направлением вращения.
Затем настраиваем ШИМ-таймер и ШИМ-канал 0 на выводе GPIO5. Для начала я использовал частоту 4 кГц, разрешение 8 бит (возможны значения duty от 0 до 255). Так как в схеме присутствует инвертирующий оптоизолятор, пришлось применять и инвертирование выходного сигнала.
Затем изменяем скважность от 0 до 255 каждую секунду, после каждого цикла меняем направление вращения двигателя.
Запускаем и вы видим самый обычный ШИМ:
На входе платы XR-106 картинка уже не такая “красивая”:
Происходит этот потому, что PC817 – довольно медленные оптроны, и они “сглаживают” фронты импульсов, а короткие и вовсе полностью “проглатывают”. В реальной схеме лучше применять более высокоскоростные оптроны, либо использовать другие варианты согласования уровней.
На 4000 Гц при мотор начинает “звенеть” при duty = 12 (но не вращается), а уверенно трогается с места при duty = 15. При duty = 253 электродвигатель отключается, хотя нагрев выходных каскадов не происходит. То есть диапазон рабочего заполнения ШИМ от ~6% до 99%.
Температура MOSFET-транзисторов при этом не превышает 30 градусов при температуре в комнате 25 градусов при любом значении duty.
При частоте ШИМ 1000 Гц электродвигатель начинает вращаться уже при duty = 6 ( 2% ). Это связано с тем, что оптроны меньше искажают ШИМ-сигнал. Но вот шума от его работы больше в разы – двигатель “звенит” даже при работе на высоких оборотах (duty > 150). И, кроме того, начинают немного греться MOSFET-ы – их температура достигает уже 53 градусов:
Ради интереса я повторил опыт на частоте 10 кГц. Двигатель стронулся с места при duty = 40 ( 16% ), но зато работает без пыли и шуму звона и дерганий – почти так же как при питании от БП напрямую. Транзисторы остались холодными на всем диапазоне регулировки частоты вращения.
Делаем вывод, что низкая частота ШИМ нам не очень подходит. В моем случае низкие значения duty – это вообще не важно, так как открывать и закрывать форточки лучше на максимально возможной скорости. Если же вам нужно обязательная регулировка вращения “от нуля”, можно применить согласователь уровней на полевых транзисторах. В таком случае, я полагаю, это будет легко возможно. Но это уже совсем другая история….
Пожалуйста, оцените статью:
-= Каталог статей (по разделам) =- -= Архив статей (подряд) =-