- — Часть 1. Теория. Схема с PIC12F629 и драйвером LB1838
- — Часть 2. Схема с PIC12F629 и драйвером L293D
Поскольку драйвера для шаговиков L293D более популярны у радиолюбителей, чем LB1838, и их гораздо легче достать, то, по просьбам форумчан, я решил написать продолжение статьи про управление биполярными шаговыми двигателями и рассмотреть схему с драйвером L293D.
Про то, как подключать обмотки и в каком порядке на них подавать сигналы, я писать не буду, это было подробно рассмотрено в первой части статьи, вместо этого давайте рассмотрим, чем, с точки зрения управления, драйвер L293D отличается от рассмотренного нами ранее драйвера LB1838 и как нужно переделать схему и программу управления, чтобы получить точно такое же устройство, только на драйвере L293D.
Итак, в чём же отличия? Во-первых, — в обозначениях. У LB1838 выходы обозначены как OUT, а у L293D они обозначены буквой Y, у LB1838 управляющие входные сигналы обозначены как IN, а у L293D они обозначены буквой A. Во-вторых, — в количестве управляющих сигналов. У LD293D для каждого выхода есть свой управляющий входной сигнал, а у LB1838 один входной сигнал управлял сразу двумя выходами. В остальном, никаких принципиальных отличий с точки зрения управления, в этих драйверах нет.
Далее, давайте посмотрим на таблицу истинности драйвера L293D и нарисуем для него диаграммы входных управляющих сигналов для одного полного цикла вращения, когда на выходах последовательно появляются все 4 комбинации подключения обмоток (также, как мы это делали для LB1838):
Таблица истинности для L293D (состояние выходов в зависимости от состояния входов):
1,2EN | 1A | 1Y (a) | 2A | 2Y (b) | 3,4EN | 3A | 3Y (c) | 4A | 4Y (d) |
High | High | + | High | + | High | High | + | High | + |
High | Low | — | Low | — | High | Low | — | Low | — |
Low | X | откл | X | откл | Low | X | откл | X | откл |
Диаграммы:
Если внимательно посмотреть на диаграмму слева, то можно увидеть, что сигнал 1A можно сделать одинаковым с сигналом 3A, а сигнал 2A — одинаковым с сигналом 4A. В этом случае наша диаграмма упроститься и будет выглядеть так:
На последней диаграмме нарисовано, какие комбинации уровней сигналов должны быть на управляющих входах драйвера (1,2EN, 3,4EN, 1A, 2A, 3A, 4A) для того, что бы получить соответствующие комбинации подключения обмоток двигателя, а также стрелками указан порядок смены этих комбинаций для обеспечения вращения в нужную сторону.
Теперь внимательно смотрим на последнюю диаграмму и сравниваем её с соответствующей диаграммой для драйвера LB1838. Мы видим, что в случае с L293 нам придётся использовать для управления драйвером 4 ноги контроллера вместо трёх, как это было в случае с LB1838, соответственно схему и программу для контроллера придётся переделать.
Начнём со схемы. Схема для L293 будет выглядеть так:
![]() Элементы можно взять те же самые, что и для схемы с LB1838:
|
Далее давайте подумаем, что нужно будет изменить в программе микроконтроллера, чтобы наше устройство с L293D работало аналогично девайсу на LB1838 (который мы рассматривали в первой части). А, собственно говоря, практически ничего. Что у нас изменилось? Только количество ног и их подключение (нога GP4 у нас теперь будет использоваться для управления драйвером, а КН2 мы подключим к ноге GP3). Соответственно, в программе мы должны сделать следующие три вещи:
- настроить GP4 на выход. Для этого нужно заменить в программе вот эту строчку:
movlw b'00110000' ; настройка выходов (GP4,GP5 - входы)
на вот такую:
movlw b'00101000' ; настройка выходов (GP3,GP5 - входы)
- изменить место в программе, отвечающее за сканирование кнопок (кнопка КН2 у нас теперь на GP3 висит). Для этого нужно заменить в программе вот эту строку:
wait btfss GPIO,4
на вот такую:
wait btfss GPIO,3
- ну и наконец, изменить значения, сохраняемые в регистрах Step1, Step2, Step3, Step4, которые определяют состояния выходов контроллера для каждого шага нашего мотора. Для этого нужно в программе строку:
movlw b'00000001'
заменить на:
movlw b'00000101'; (Step1)
строку:
movlw b'00000010'
заменить на:
movlw b'00000110'; (Step2)
строку:
movlw b'00000101'
заменить на:
movlw b'00010001'; (Step3)
строку:
movlw b'00000110'
заменить на
movlw b'00010010'
Вот в общем-то и всё, — мы получили девайс, аналогичный тому, который рассматривали в первой части, только теперь уже на драйвере L293D.
Есть ещё один способ переделать схему с LB1838 под драйвер L293D, но в этом случае нам понадобится дополнительная микруха. Если ещё раз внимательно посмотреть на диаграмму управляющих сигналов, то можно увидеть, что сигналы «1A, 3A» и «2A, 4A» инвертированы друг относительно друга. Поэтому если в схему добавить обычный инвертор, то можно, как и в случае с LB1838 оставить всего три управляющих сигнала.
В этом случае схема будет выглядеть вот так:
В качестве инвертора подойдёт, например, копеечная микросхема 74HCT04 и многие другие микросхемы стандартной логики.
Плюсом в данном случае является то, что для этой схемы нам вообще никак не нужно переделывать программу микроконтроллера из первой части (для схемы с LB1838).