- PVSM.RU - https://www.pvsm.ru -

Обзор микросхемы DRV8870

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

Обзор микросхемы DRV8870 - 1

Пролог

В этом тексте я произвел обзор микросхемы 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 мотор подойдет от игрушек.

Обзор микросхемы DRV8870 - 2

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

Обзор микросхемы DRV8870 - 3

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

Обзор микросхемы DRV8870 - 4

У микросхемы 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-канальных полевых транзистора, цифровая цепь управления затворами полевых транзисторов, датчик тока в обмотке, датчик температуры, компараторы. Это очень простой чип.

Обзор микросхемы DRV8870 - 5

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

Обзор микросхемы DRV8870 - 6

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

Обзор микросхемы DRV8870 - 7

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

Обзор микросхемы DRV8870 - 8

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

Обзор микросхемы DRV8870 - 9

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

Обзор микросхемы DRV8870 - 10

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

Правило управления чипом изложено в таблице 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 микросхема может работать в одном из этих четырех режимов. Вот они перед вами.

Обзор микросхемы DRV8870 - 11

Понятно, что включать и выключать токи в H-мосте это не весело. Хочется не просто вертеть ось мотора, но и делать это с разной угловой скоростью. Тут обычно два варианта: либо модулировать sigma-delta [2] сигнал либо модулировать 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

10

100000000000000000000000000000000

25

10001000100

50

10

75

11011101110

100

011111111111111111111111111111111

Однако расчет PDM придется делать программно, а это много вычислений.

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

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

++Можно использовать IC, как строго заданного источник тока в системе управления с обратной связью.

++Можно управлять тяговым мотором в игрушечной радио управляемой машинке.

++Можно раскручивать маховики для стабилизации CubeSat-ов

Итоги

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

Словарь

Акроним

Расшифровка

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

OCP

Overcurrent Protection

TSD

Thermal Shutdown

PWM

pulse-width modulation

BDC

Brushed DC

Ссылки

Название

URL

H-мост: Load Detect (или как выявлять вандализм)

https://habr.com/ru/articles/709374/ [4]

Управление напряжением PWM сигналом (PWM+RC=DAC)

https://habr.com/ru/articles/821951/ [5]

Delta-sigma modulation

https://en.wikipedia.org/wiki/Delta-sigma_modulation [2]

Электрический стол (или Зачем нужны ARM Cortex-M0)

https://habr.com/ru/articles/946204/ [6]

STM32F4XX M

https://stm32-base.org/boards/STM32F407VGT6-STM32F4XX-M.html [1]

Прошивка для исследования возможностей DRV8870

https://github.com/aabzel/Artifacts/tree/main/dev_ebox_stm32f4x_ir_car_m [3]

DRV8870DDAR, Драйвер Brushed DC двигателей, 3.6А [HSOP-8 EP]

https://www.chipdip.ru/product/drv8870ddar-drayver-brushed-dc-dvigateley-texas-instruments-9001130288 [7]

DRV8870EVM, EVALUATION MODULE DRV8870

https://www.chipdip.ru/product/drv8870evm-evaluation-module-drv8870-texas-instruments-8005804155 [8]

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

https://aliexpress.ru/item/1005009148915516.html?spm=a2g2w.orderdetail.0.0.12824aa6PrlURS&sku_id=12000048092500836&_ga=2.138446899.1207779862.1759316522-1366395838.1659565241 [9]

Разработка блока управления боковыми зеркалами автомобиля @RV3EFE [10]

https://habr.com/ru/articles/697388/ [11]

Вопросы

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

Автор: aabzel

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/stm32/433320

Ссылки в тексте:

[1] DevEBox-STM32F4XX_M_V3.0: https://stm32-base.org/boards/STM32F407VGT6-STM32F4XX-M.html

[2] sigma-delta: https://en.wikipedia.org/wiki/Delta-sigma_modulation

[3] тут: https://github.com/aabzel/Artifacts/tree/main/dev_ebox_stm32f4x_ir_car_m

[4] https://habr.com/ru/articles/709374/: https://habr.com/ru/articles/709374/

[5] https://habr.com/ru/articles/821951/: https://habr.com/ru/articles/821951/

[6] https://habr.com/ru/articles/946204/: https://habr.com/ru/articles/946204/

[7] https://www.chipdip.ru/product/drv8870ddar-drayver-brushed-dc-dvigateley-texas-instruments-9001130288: https://www.chipdip.ru/product/drv8870ddar-drayver-brushed-dc-dvigateley-texas-instruments-9001130288

[8] https://www.chipdip.ru/product/drv8870evm-evaluation-module-drv8870-texas-instruments-8005804155: https://www.chipdip.ru/product/drv8870evm-evaluation-module-drv8870-texas-instruments-8005804155

[9] https://aliexpress.ru/item/1005009148915516.html?spm=a2g2w.orderdetail.0.0.12824aa6PrlURS&sku_id=12000048092500836&_ga=2.138446899.1207779862.1759316522-1366395838.1659565241: https://aliexpress.ru/item/1005009148915516.html?spm=a2g2w.orderdetail.0.0.12824aa6PrlURS&sku%5C_id=12000048092500836&%5C_ga=2.138446899.1207779862.1759316522-1366395838.1659565241

[10] @RV3EFE: https://www.pvsm.ru/users/rv3efe

[11] https://habr.com/ru/articles/697388/: https://habr.com/ru/articles/697388/

[12] Источник: https://habr.com/ru/articles/952484/?utm_campaign=952484&utm_source=habrahabr&utm_medium=rss