Простейшая программа для экспериментов с биполярным шаговым двигателем
Рассмотренная в этой статье простейшая программа была разработана для экспериментов со схемой управления биполярным шаговым двигателем на контроллере PIC12F629.
Программа реализует следующий алгоритм управления: при нажатии на кнопку КН1 двигатель делает один шаг в одну сторону, а при нажатии на кнопку КН2 - один шаг в другую сторону. В общем-то всё управление заключается в формировании на выводах контроллера одной из четырёх комбинаций сигналов (рисунок справа), в зависимости от нажатой кнопки и предыдущего состояния.
Алгоритм:
Итак, в аппаратной части мы имеем:
входы: GP5 - кнопка КН1, GP4 - кнопка КН2; когда кнопка не нажата - на входе висит "1"(высокий уровень);
выходы: GP0 - выход на EN1, GP1 - выход на EN2, GP2 - выход на IN1/IN2;
используется внутренний генератор.
Программа:
;--------------------------------------------------------- list p = 12f629 __config 01FC4h ;*** Переменные ****************************************** CBLOCK 0x20 ; Начальный адрес блока пользовательской памяти Step1 Step2 Step3 Step4 Counter1 Counter2 StepNumber ENDC ;**** Константы / Адреса регистров ************************ Status equ 03h ; выбор банка GPIO equ 05h ; управление защелками порта (банк 0) Cmcon equ 19h ; компаратор (банк 0) TrisIO equ 05h ; выбор направления работы выводов порта (банк 1) INTCON equ 0Bh ; разрешение(1)/запрет(0) прерываний (любой банк) OSCCAL equ 10h ; хранение калибровочной константы (банк 1) T1 equ .255 T2 equ .255 INDF equ 0h ; регистр косвенной адресации FSR equ 04h ; регистр адреса при косвенной адресации ;********************************************************* org 0 ;********************************************************* ;*** КОНФИГУРИРОВАНИЕ КОНТРОЛЛЕРА ************************ ;****** Калибровка Генератора **************************** start bsf Status,5 Call 3FFh ; Загрузить калибровочную константу в w movwf OSCCAL ;*** Запрет прерываний *********************************** clrf INTCON ; запретить все прерывания ;*** Установка направления работы ног ******************** bcf Status,5 ; перейти в банк 0 clrf GPIO ; инициализация защелок (все выходы равны нулю) movlw .7 ; биты 0..2 поднять movwf Cmcon ; компар. выключен, GP0,GP1,GP2 - цифровые вх/вых bsf Status,5 ; перейти в 1-й банк movlw b'00110000' ; настройка выходов (GP4,GP5 - входы) movwf TrisIO bcf Status,5 ; перейти в банк 0 ;********************************************************* movlw b'00000001' movwf Step1 movlw b'00000010' movwf Step2 movlw b'00000101' movwf Step3 movlw b'00000110' movwf Step4 clrf StepNumber ;********************************************************* ;*** РАБОЧАЯ ЧАСТЬ *************************************** ;*** Сканирование кнопок ********************************* wait btfss GPIO,4 call Forward btfss GPIO,5 call Backward goto wait ;********************************************************* Backward decfsz StepNumber,1 goto Next movlw .4 movwf StepNumber Next movlw 1fh addwf StepNumber,0 movwf FSR movf INDF,0 movwf GPIO call pause clrf GPIO return Forward btfsc StepNumber,2 ; если StepNumber=4, то обнулить clrf StepNumber incf StepNumber,1 movlw 1fh addwf StepNumber,0 movwf FSR movf INDF,0 movwf GPIO call pause clrf GPIO return ;----------------------------------------- pause movlw T2 movwf Counter2 pause2 movlw T1 movwf Counter1 pause1 nop decfsz Counter1,1 goto pause1 decfsz Counter2,1 goto pause2 return end ;---------------------------------------------------------Скачать готовую прошивку и asm-файл
Внимание. Во избежание затирания калибровочных констант, алгоритм заливки этой прошивки в контроллер следующий:
1. Считываем память контроллера.
2. Записываем значение последнего слова программного кода (слово по адресу 03FF) - это калибровочные данные генератора.
4. Открываем прошивку, которую мы хотим залить, в программе программатора и меняем в ней биты калибровки генератора на считанные и записанные значения.
5. Заливаем исправленную для конкретного экземпляра PIC12 прошивку в контроллер.