На рис. 10.12 изображено, какие сопротивления имеет используемый нами двигатель. Между центральным выводом и концами обмоток сопротивление составляет 13 Ом, соответственно между концами обмоток сопротивление имеет значение 26 Ом. Сопротивление между парами соединенных обмоток равно, соответственно, бесконечности (отсутствие соединения). Например, если мы измерим сопротивление между коричневым и голубым проводником, то прибор покажет бесконечность. Вооружившись этими данными, мы сможем правильно включить обмотки ШД в схему.
Рис. 10.12. Сопротивление между выводами однополярного шагового двигателя
Программа для тестовой схемы управления
После того как тестовая схема управления изготовлена, необходимо запрограммировать PIC- микроконтроллер с помощью следующей программы на языке BASIC. Программа является очень простой и короткой, чтобы показать, насколько просто обеспечить вращение ШД. В таблице 10.3 показано, как на каждом шаге включается соответствующий транзистор. Используйте таблицу 10.3 для слежения за логикой BASIC программы. Когда вы достигаете до конца таблицы, то последовательность повторяется, начиная с начала.
‘Контроллер шагового двигателя
Symbol TRISB = 134 ‘Инициализировать TRISB как 134
Symbol PortB = 6 ‘Инициализировать PortB как 6
Symbol ti = b6 ‘Инициализировать ti как задержку
ti = 25 ‘Задержка 25 мс
poke TRISB,0 ‘Установить шины PORTB на выход
start: ‘Последовательность движения вперед
poke portb,1 ‘Шаг 1
pause ti ‘Задержка
poke portb,2 ‘Шаг 2
pause ti ‘Задержка
poke portb,4 ‘Шаг 3
pause ti ‘Задержка
poke portb,8 ‘Шаг 4
pause ti ‘Задержка
goto start ‘Повторение
При полном шаге для завершения полного оборота ШД требуется 200 импульсов (360° /1,8° на шаг). Подсчет количества импульсов позволяет PIC-микроконтроллеру управлять и позиционировать ротор ШД.
Вторая программа на PICBASIC
Вторая программа на PICBASIC является гораздо более гибкой. Пользователь может изменять параметры программы (время задержки) во время ее работы с помощью одного из четырех выключателей, соединенных с портом А. При нажатии кнопки 1 время задержки между импульсами увеличивается, и соответственно ротор ШД вращается медленнее. Кнопка 2 обладает противоположным действием. При нажатии кнопки 3 двигатель останавливается и находится в режиме ожидания, пока эта кнопка нажата. Кнопка 4 управляет направлением вращения ШД (по часовой стрелке или против часовой стрелки). Нажатие кнопки 4 изменяет направление вращения на противоположное. Реверсирование направления вращения сохраняется на все время нажатия кнопки.
‘Контроллер вращения ШД
Symbol TRISB = 134 ‘Инициализация TRISB как 134
Symbol TRISA = 133 ‘Инициализация TRISA как 133
Symbol PortB = 6 ‘Инициализация portb как 6
Symbol PortA = 5 ‘Инициализация porta как 5
symbol ti = b6 ‘Начальное время задержки
ti = 100 ‘Установка времени задержки 100 мс
Poke TRISB,0 ‘Установка PORTB как выхода
start: ‘Вращение ШД вперед
poke portb, 1 ‘Шаг 1
pause ti ‘Задержка
poke portb,2 ‘Шаг 2
pause ti ‘Задержка
poke portb,4 ‘Шаг 3
pause ti ‘Задержка
poke portb,8 ‘Шаг 4
pause ti ‘Задержка
goto check ‘Переход на проверку состояния кнопок
start2: ‘Вращение ШД назад
poke portb,8 ‘Шаг 1
pause ti ‘Задержка
poke portb,4 ‘Шаг 2
pause ti ‘Задержка
poke portb,2 ‘Шаг 3
pause ti ‘Задержка
poke portb,1 ‘Шаг 4
pause ti ‘Задержка
goto check ‘Переход на проверку состояния кнопок
Check: ‘Состояние кнопок
Peek PortA, B0 ‘Загрузка состояния
if bit0 = 0 then loop1 ‘Если кнопка 1 нажата, увеличить ti
if bit1 = 0 then loop2 ‘Если кнопка 2 нажата, уменьшить ti
if bit2 = 0 then loop3 ‘Остановка ШД
if bit3 = 0 then start ‘Вращение вперед
goto start2 ‘Реверсивное вращение
loop1: ‘Увеличение времени задержки
poke portb,0 ‘Выключение транзисторов
ti = ti +5 ‘увеличение задержки на 5 мс
pause 50 ‘Пауза 50 мс
if ti > 250 then hold1 ‘Ограничение задержки 250 мс
peek porta,b0 ‘Проверка состояния кнопок
if bit0 = 0 then loop1 ‘Продолжать увеличивать задержку?
goto check ‘Если нет, переход на основную проверку состояния
loop2: ‘Уменьшить задержку
poke portb,0 ‘Выключение транзисторов
ti = ti – 5 ‘Уменьшение задержки на 5 мс
pause 50 ‘Пауза 50 мс
if ti < 20 then hold2 ‘Ограничение задержки 20 мс
peek porta,b0 ‘Проверка состояния кнопок
if bit1 = 0 then loop2 ‘Продолжать уменьшать задержку?
goto check ‘Если нет, переход на основную проверку состояния
hold1: ‘Верхний предел задержки
ti = 245 ‘Задержка до 250 мс
goto loop1 ‘Идти назад
hold2: ‘Нижний предел задержки