Управление биполярным шаговым двигателем. Часть 2. Схема с контроллером PIC12F629 и драйвером L293D

  1. — Часть 1. Теория. Схема с PIC12F629 и драйвером LB1838
  2. — Часть 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 откл

Диаграммы:

диаграмма управления шаговым двигателем через L293D

Если внимательно посмотреть на диаграмму слева, то можно увидеть, что сигнал 1A можно сделать одинаковым с сигналом 3A, а сигнал 2A — одинаковым с сигналом 4A. В этом случае наша диаграмма упроститься и будет выглядеть так:

диаграмма управления шаговым двигателем через L293D

На последней диаграмме нарисовано, какие комбинации уровней сигналов должны быть на управляющих входах драйвера (1,2EN, 3,4EN, 1A, 2A, 3A, 4A) для того, что бы получить соответствующие комбинации подключения обмоток двигателя, а также стрелками указан порядок смены этих комбинаций для обеспечения вращения в нужную сторону.

Теперь внимательно смотрим на последнюю диаграмму и сравниваем её с соответствующей диаграммой для драйвера LB1838. Мы видим, что в случае с L293 нам придётся использовать для управления драйвером 4 ноги контроллера вместо трёх, как это было в случае с LB1838, соответственно схему и программу для контроллера придётся переделать.

Начнём со схемы. Схема для L293 будет выглядеть так:

Схема управления биполярным шаговым двигателем на L293D

Элементы можно взять те же самые, что и для схемы с LB1838:

  1. R1..R2 = 1 кОм
  2. С1, С2 = 0,1 мкФ — керамика
  3. С3 = 470 мкФ х 16В — электролит

Далее давайте подумаем, что нужно будет изменить в программе микроконтроллера, чтобы наше устройство с L293D работало аналогично девайсу на LB1838 (который мы рассматривали в первой части). А, собственно говоря, практически ничего. Что у нас изменилось? Только количество ног и их подключение (нога GP4 у нас теперь будет использоваться для управления драйвером, а КН2 мы подключим к ноге GP3). Соответственно, в программе мы должны сделать следующие три вещи:

  1. настроить GP4 на выход. Для этого нужно заменить в программе вот эту строчку:
    movlw  b'00110000' ; настройка выходов (GP4,GP5 - входы)

    на вот такую:

    movlw  b'00101000' ; настройка выходов (GP3,GP5 - входы)
  2. изменить место в программе, отвечающее за сканирование кнопок (кнопка КН2 у нас теперь на GP3 висит). Для этого нужно заменить в программе вот эту строку:
    wait  btfss  GPIO,4

    на вот такую:

    wait  btfss  GPIO,3
  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 оставить всего три управляющих сигнала.

В этом случае схема будет выглядеть вот так:

Схема управления биполярным шаговым двигателем на L293D

В качестве инвертора подойдёт, например, копеечная микросхема 74HCT04 и многие другие микросхемы стандартной логики.

Плюсом в данном случае является то, что для этой схемы нам вообще никак не нужно переделывать программу микроконтроллера из первой части (для схемы с LB1838).

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