Перейти к содержимому

Двойной H-мост для управления электродвигателями XR-106

Здравствуйте, уважаемые читатели!

Представляю вам очередной обзор продукции китайской электронной промышленности, на этот раз у меня на столе плата для ШИМ-управления двумя коллекторными двигателями 3-36V с реверсом.

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

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

 


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

Производитель заявляет следующие данные:

  • Напряжение питания логики – 5В
  • Уровни TTL логики управления – 5В
  • ШИМ модуляция скорости вращения – от 0% до 99%
  • Возможность смены направления движения
  • Напряжение питания нагрузки – от 3 до 36В
  • Ток нагрузки максимальный – 15А
  • Кратковременный допустимый ток – 30А
  • Размеры 60 х 110 мм

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

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

Разъем управления

На плате тут и там видны следы неотмытого флюса, особенно на оборотной стороне. Разъемы и силовые элементы паяются вручную.

На нижней стороне отсутствуют два диода D2 и D4. Но взамен присутствуют потеки флюса.

На нижней стороне отсутствуют два диода 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 – это вообще не важно, так как открывать и закрывать форточки лучше на максимально возможной скорости. Если же вам нужно обязательная регулировка вращения “от нуля”, можно применить согласователь уровней на полевых транзисторах. В таком случае, я полагаю, это будет легко возможно. Но это уже совсем другая история….


Пожалуйста, оцените статью:
[ 5 из 5, всего 2 оценок ]

-= Каталог статей (по разделам) =-   -= Архив статей (подряд) =-

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *