"Надо написать прошивку - спиннер"

Пролог

В этом тексте я произвел обзор микросхемы DRV8870.

DRV8870 - это старая простая микросхема управления коллекторным DC-мотором с токами в обмотках до 3.5 Ампер от компании Texas Instruments. По сути это драйвер H-моста. Причем H-мост встроен прямо внутрь корпуса микросхемы. Это полностью интегрированное решение.

H-мост это электротехническая цепь, которая позволяет пускать ток, как в прямом направлении, так и в обратном направлении. Это приводит к тому, что вал DC мотора либо вращается по часовой стрелке либо против часовой стрелки.

Целевое оборудование это принтеры, игрушки, индустриальное оборудование, столы с подъёмной столешницей, стекло-опускатели в автомобилях, управления насосами и т. п. В общем, этим чипом можно управлять любой индуктивной нагрузкой мощностью до 150W.

Постановка задачи

Научиться регулировать ток в обмотке DC мотора микросхемой DVR8870. Изменять ток от I_min до I_max непрерывно благодаря PWM сигналу на управляющих пинах. Использовать частоту PWM за пределами 20kHz, чтобы не было слышно акустического шума. Написать демонстрационную прошивку-спинер мотора по командам из UART-CLI.

Аппаратная часть

Что надо из оборудования?

Оборудование

Пояснение

Коллекторный мотор

для вращения вала

отладочная плата с DRV8870

для управления DC мотором

отладочная плата с микроконтроллером

для управления драйвером

лабораторный блок питания

для питания драйвера

Две Li-ion MH12210 батареи 18650. Модель NCR18650B.

для питания драйвера

батарейный отсек для двух элементов питания типоразмера 18650

для питания драйвера

программатор

для загрузки ПО в МК

кабели, перемычи

для программатора, и прототипа

осциллограф

для отладки PWM

отвертки

для крепления провода к плате драйвера

переходник USB-UART

для отладки прошивки через CLI

Прежде всего надо найти источник питания. Можно выбрать две батареи 18650 и батарейный отсек для них. DC мотор подойдет от игрушек.

Обычно микросхемы такого класса сами аппаратно наблюдают за тем, чтобы не произошло короткого замыкания в H-мосте. Плюс еще заложена встроенная защита от сверхтока, пропадания питания и перегрева микросхемы.

Крутящий момент и, как следствие, угловая скорость вала DC-мотора может регулироваться PWM (или PDM) сигналом на пинах IN1 и IN2.

У микросхемы DRV8870 наружу выходит всего 8 пинов

PIN

dir

TYPE

pull

DESCRIPTION

1

GND

in

PWR

--

Заземление

2

IN2

in

PWM

down

управляющий пин

3

IN1

in

PWM

down

управляющий пин

4

VREF

in

analog

--

опорное напряжение для компаратора

5

VM

in

PWR

--

Питание H-моста

6

OUT1

io

analog

--

Пин для подключения к мотору

7

ISEN

out

analog

--

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

8

OUT2

io

analog

--

Пин для подключения к мотору

9

PAD

--

PWR

--

Пад теплоотвода. Подключается к земле.

Внутри чипа четыре мощных высоко токовых N-канальных полевых транзистора, цифровая цепь управления затворами полевых транзисторов, датчик тока в обмотке, датчик температуры, компараторы. Это очень простой чип.

Существует оригинальная отладочная плата DRV8870EVM, EVALUATION MODULE DRV8870

Однако PCB от TI слишком дорогая. Поэкспериментировать с микросхемой DRV8870 можно и на отладочной плате DRV8870 High-power Dual-channel DC Motor, купить которую можно на Aliexpress.

Вот так подключается обвязка

Габариты модуля 48x30мм, по углам 4 отверстия диаметром 3мм.

В качестве управляющего микроконтроллера можно применить STM32F407VGT6 на миниатюрной плате DevEBox-STM32F4XX_M_V3.0

Программная часть

Правило управления чипом изложено в таблице 1. Два бита комбинаторно дают всего 4 режима работы.

режим

IN2

IN1

OUT1

OUT2

Пояснение

0

0

0

High-Z

High-Z

Драйвер отключен от мотора. Свободный пробег. IC в режиме энергосбережения.

1

0

1

VBAT

GND

Ток течет в направлении OUT1->OUT2 (CW)

2

1

0

GND

VBAT

Ток течет в направлении OUT2->OUT1 (CCW)

3

1

1

GND

GND

Торможение, ток в катушке бегает по кругу.

Формально DRV8870 микросхема может работать в одном из этих четырех режимов. Вот они перед вами.

Понятно, что включать и выключать токи в H-мосте это не весело. Хочется не просто вертеть ось мотора, но и делать это с разной угловой скоростью. Тут обычно два варианта: либо модулировать sigma-delta сигнал либо модулировать PWM сигнал.

Настройка PWM на STM32

--Надо выбрать два пина и сконфигурировать их на альтернативную функцию GPIO, чтобы GPIO пины стали подключены к компараторам аппаратного таймера.

+-----+-------+--------+-------+------+------+-----+-----+------------+---------------+
| No  |  pad  |  mode  | level | dir  | pull |MuxS |MuxG |  connect2  |     name      |
+-----+-------+--------+-------+------+------+-----+-----+------------+---------------+
|   0 |  PE13 |   ALT1 |   L   | out  |  Air |   1 |   1 | IN1        |      TIM1_CH3 |
|   1 |  PE14 |   ALT1 |   L   | out  |  Air |   1 |   1 | IN2        |      TIM1_CH4 |
|   2 |   PA6 |   ALT1 |   L   | out  |  Air |   2 |   2 | IN1        |      TIM3_CH1 |
|   3 |   PA7 |   ALT1 |   L   | out  |  Air |   2 |   2 | IN2        |      TIM3_CH2 |
+-----+-------+--------+-------+------+------+-----+-----+------------+---------------+

--Активировать прерывания по таймерам

+------+--------------------------+------------+------+
|  irq |      name                |    Base    |prior |
+------+--------------------------+------------+------+
|   24 | TIM1_BRK_TIM9_IRQn       | 0x08009811 |   10 |
|   25 |  TIM1_UP_TIM10_IRQn      | 0x080097b5 |   10 |
|   26 |  TIM1_TRG_COM_TIM11_IRQn | 0x080097d9 |   10 |
|   27 |  TIM1_CC_IRQn            | 0x080097e5 |   10 |
|   28 |  TIM2_IRQn               | 0x080097f1 |   10 |
|   29 | TIM3_IRQn                | 0x080097fd |   10 |
+------+--------------------------+------------+------+

--Подать тактирование на аппаратные таймеры
--Выбрать источник тактирование для пред-делителя таймера
--Вычислить пред-делитель и период счета таймера
--Задать начальное значение счетчика таймера
--Активировать каналы сравнения
--Выбрать полярность срабатывания компаратора
--Выбрать режим PWM для компаратора таймера
--Задать значение компаратора для таймера. Регистр компаратора задает заполнение периода.
--Написать обработчик прерываний для аппаратного таймера

Суммируя вышесказанное, вот на таком наборе регистров у меня работал таймерный PWM. Кому интересно можно полностью восстановить режим работы сверив значения регистров с детализацией в спеке refference manual на STM32F407xx

TIMER1
I,[Timer] Base:0x40010000,Cnt:20
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+
|  N  |        Name        |offset | size |    Addr    |   ValHex   |                  ValBin                   |
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+
|   1 |           TIMx_CR1 | 0x000 |    0 | 0x40010000 | 0x00000081 | 0b    00000000_00000000_00000000_10000001 |
|   2 |           TIMx_CR2 | 0x004 |    4 | 0x40010004 | 0x00007000 | 0b    00000000_00000000_01110000_00000000 |
|   3 |          TIMx_SMCR | 0x008 |    4 | 0x40010008 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   4 |          TIMx_DIER | 0x00c |    4 | 0x4001000c | 0x00000019 | 0b    00000000_00000000_00000000_00011001 |
|   5 |            TIMx_SR | 0x010 |    4 | 0x40010010 | 0x00000006 | 0b    00000000_00000000_00000000_00000110 |
|   6 |           TIMx_EGR | 0x014 |    4 | 0x40010014 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   7 |         TIMx_CCMR1 | 0x018 |    4 | 0x40010018 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   8 |         TIMx_CCMR2 | 0x01c |    4 | 0x4001001c | 0x00006c6c | 0b    00000000_00000000_01101100_01101100 |
|   9 |          TIMx_CCER | 0x020 |    4 | 0x40010020 | 0x00001100 | 0b    00000000_00000000_00010001_00000000 |
|  10 |           TIMx_CNT | 0x024 |    4 | 0x40010024 | 0x00003196 | 0b    00000000_00000000_00110001_10010110 |
|  11 |           TIMx_PSC | 0x028 |    4 | 0x40010028 | 0x00000004 | 0b    00000000_00000000_00000000_00000100 |
|  12 |           TIMx_ARR | 0x02c |    4 | 0x4001002c | 0x0000ee00 | 0b    00000000_00000000_11101110_00000000 |
|  13 |           TIMx_RCR | 0x030 |    4 | 0x40010030 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  14 |          TIMx_CCR1 | 0x034 |    4 | 0x40010034 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  15 |          TIMx_CCR2 | 0x038 |    4 | 0x40010038 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  16 |          TIMx_CCR3 | 0x03c |    4 | 0x4001003c | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  17 |          TIMx_CCR4 | 0x040 |    4 | 0x40010040 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  18 |          TIMx_BDTR | 0x044 |    4 | 0x40010044 | 0x00008000 | 0b    00000000_00000000_10000000_00000000 |
|  19 |           TIMx_DCR | 0x048 |    4 | 0x40010048 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  20 |          TIMx_DMAR | 0x04c |    4 | 0x4001004c | 0x00000081 | 0b    00000000_00000000_00000000_10000001 |
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+


-->tdrr 3
TIMER3
I,[Timer] Base:0x40000400,Cnt:20
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+
|  N  |        Name        |offset | size |    Addr    |   ValHex   |                  ValBin                   |
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+
|   1 |           TIMx_CR1 | 0x000 |    0 | 0x40000400 | 0x00000081 | 0b    00000000_00000000_00000000_10000001 |
|   2 |           TIMx_CR2 | 0x004 |    4 | 0x40000404 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   3 |          TIMx_SMCR | 0x008 |    4 | 0x40000408 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   4 |          TIMx_DIER | 0x00c |    4 | 0x4000040c | 0x00000007 | 0b    00000000_00000000_00000000_00000111 |
|   5 |            TIMx_SR | 0x010 |    4 | 0x40000410 | 0x00000018 | 0b    00000000_00000000_00000000_00011000 |
|   6 |           TIMx_EGR | 0x014 |    4 | 0x40000414 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   7 |         TIMx_CCMR1 | 0x018 |    4 | 0x40000418 | 0x00006c6c | 0b    00000000_00000000_01101100_01101100 |
|   8 |         TIMx_CCMR2 | 0x01c |    4 | 0x4000041c | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|   9 |          TIMx_CCER | 0x020 |    4 | 0x40000420 | 0x00000011 | 0b    00000000_00000000_00000000_00010001 |
|  10 |           TIMx_CNT | 0x024 |    4 | 0x40000424 | 0x0000571d | 0b    00000000_00000000_01010111_00011101 |
|  11 |           TIMx_PSC | 0x028 |    4 | 0x40000428 | 0x00000002 | 0b    00000000_00000000_00000000_00000010 |
|  12 |           TIMx_ARR | 0x02c |    4 | 0x4000042c | 0x00007100 | 0b    00000000_00000000_01110001_00000000 |
|  13 |           TIMx_RCR | 0x030 |    4 | 0x40000430 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  14 |          TIMx_CCR1 | 0x034 |    4 | 0x40000434 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  15 |          TIMx_CCR2 | 0x038 |    4 | 0x40000438 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  16 |          TIMx_CCR3 | 0x03c |    4 | 0x4000043c | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  17 |          TIMx_CCR4 | 0x040 |    4 | 0x40000440 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  18 |          TIMx_BDTR | 0x044 |    4 | 0x40000444 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  19 |           TIMx_DCR | 0x048 |    4 | 0x40000448 | 0x00000000 | 0b    00000000_00000000_00000000_00000000 |
|  20 |          TIMx_DMAR | 0x04c |    4 | 0x4000044c | 0x00000081 | 0b    00000000_00000000_00000000_10000001 |
+-----+--------------------+-------+------+------------+------------+-------------------------------------------+

Достоинства DRV8870

++Дешевизна IC DRV8870. Цена 39 RUR за чип. Это ни о чем.
++Полностью интегрированное решение. H-мост упакован внутри самой микросхемы.

Недостатки DRV8870

--Нет SPI регистров, чтобы читать состояние чипа (события перегрева или сверхтока).
--Нет режима проверки факта оторванной нагрузки в H-мосте
--Сомнительная надежность. Из двух купленных модулей DRV8870 заработало только полтора. На одном модуле H-мост крутился только в одну сторону.

Что можно улучшить?

Как вариант, можно попробовать управлять током в обмотках не классическим PWM сигналом, а PDM сигналом. Или, говоря правильно, delta-sigma модуляцией. Там тоже заполнение увеличивается при увеличении входного сигнала.

ток, %

PDM код на INi, bin

1

100000000000000000000000000000000

25

10001000100

50

10

75

11011101110

100

011111111111111111111111111111111

Однако аппаратных генераторов Sigma-Delta сигналов в MCU не бывает, и расчет PDM придется делать чисто программно, а это требует частых прерываний и вычислений внутри ISR.

Идеи проектов на основе IC DRV8870

++Если к DRV8870 подключить соленоид и поочередно пускать ток через катушку, то в одном направлении, то в другом уменьшая при этом амплитуду PWM сигналом, то можно сделать прибор для размагничивания отверток, свёрел, болтов, винтиков, наручных часов, шестигранников, насадок для шуруповертов и прочих мелких металлических предметов.
Аналогично пуская постоянный ток можно напротив до разной степени намагничивать инструменты, чтобы отвёртки могли подхватывать мелкие метизы при сборке механических изделий всяческих агрегатов.
++Можно использовать IC, как строго заданного источник тока в системе управления с обратной связью.
++Можно управлять тяговым мотором в игрушечной радио управляемой машинке.
++Можно раскручивать маховики для стабилизации CubeSat-ов
++Электромагнит
++Драйвер бензонасоса, дворников, поворотники зеркал и т. п.
++LED драйвер

Итоги

Удалось научиться крутить DC мотор через микросхему драйвер DRV8870. Прошивку можно скачать тут.

Словарь

Акроним

Расшифровка

IC

Integrated circuit

VM

Voltage Motor

DC

Direct Current

UVLO

Under voltage Lockout

FET

field-effect transistor

RMS

Root Mean Square

PCB

printed circuit board

ISR

interrupt service routine

OCP

Overcurrent Protection

TSD

Thermal Shutdown

PWM

pulse-width modulation

BDC

Brushed DC

Ссылки

Вопросы

  • Существуют ли российские микросхемы полностью интегрированных драйверов H-мостов? КР1128КТ4, КР1128КТ3А

  • Существуют ли микроконтроллеры, которые генерируют sigma-delta модулированный сигнал (PDM)? Это позволило бы более плавно управлять токами в обмотках мотора и LED нежели в случае с PWM.

Only registered users can participate in poll. Log in, please.
Вы работали с микросхемой DRV8870?
26.67%да8
73.33%нет22
30 users voted. 3 users abstained.
Only registered users can participate in poll. Log in, please.
Вы работали со схемами H-мостов?
86.21%да25
13.79%нет4
29 users voted. 3 users abstained.
Only registered users can participate in poll. Log in, please.
Вы управляли моторами sigma-delta сигналом?
16.67%да2
83.33%нет10
12 users voted. 2 users abstained.