Суббота, 02 июля 2011 21:54

Контроллер шагового двигателя. Featured

Written by
Rate this item
(0 votes)

Эта статья является дополнением к статье: "Интерфейсная плата для станка ЧПУ". Схема и прошивка контроллера была взята с сайта http://robozone.su. На сайте небыло под неё печатной платы, я развёл свою. Плата получилась односторонняя, с минимальным количеством перемычек. Собрал, подключил двигатель, прошил микроконтроллер – всё работает. Из описания сказано, что переключение между шаг и полушаг производится при помощи перемычки и перезагрузки контроллера. Пришлось прошивку дизассемблировать и внести небольшие изменения. Теперь выбор режимов шаг или полушаг происходит без перезагрузки контроллера.

 

 

Униполярный двигатель имеет одну обмотку в каждой фазе, но от середины обмотки сделан отвод. Это позволяет изменять направление магнитного поля, создаваемого обмоткой, простым переключением половинок обмотки. При этом существенно упрощается схема драйвера. Драйвер должен иметь только 4 простых ключа. Таким образом, в униполярном двигателе используется другой способ изменения направления магнитного поля, в отличии от биполярного. Средние выводы обмоток могут быть объединены внутри двигателя, поэтому такой двигатель может иметь 5 или 6 выводов. Иногда униполярные двигатели имеют раздельные 4 обмотки, по этой причине их ошибочно называют 4-х фазными двигателями. Каждая обмотка имеет отдельные выводы, поэтому всего выводов 8. При соответствующем соединении обмоток такой двигатель можно использовать как униполярный или как биполярный. Униполярный двигатель с двумя обмоткими и отводами тоже можно использовать в биполярном режиме, если отводы оставить неподключенными. В любом случае ток обмоток следует выбирать так, чтобы не превысить максимальной рассеиваемой мощности.

 

Возможности контроллера:

 

  • Аппаратная ШИМ регулировка ограничения тока фаз.
  • Аппаратная ШИМ регулировка ограничения тока фаз в режиме удержания.
  • Реализован режим “fixed time off”.
  • Больший диапазон тока фаз (проверен до 5А).
  • Использование универсальных управляющих сигналов STEP, DIR, ENABLE.
  • Работа в режимах «полный шаг», «полушаг» (FULL STEP/ HALF STEP).
  • Автоматическое определение положения джампера (шаг, полушаг).

 

Схема контроллера.

Листинг кода.

 




;**************************************************************************************************
            processor   16F628A
            ErrorLevel  -302
            __config    0x3F70
;   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_ON & _MCLRE_ON & _PWRTE_ON & _WDT_OFF 
;   & _INTOSC_OSC_NOCLKOUT 
;==================================================================================================
; Описание регистров специального назначения.
;==================================================================================================
TMR0        equ         01h         ; Таймер отсчёта 1 секунды.
Status      equ         03h         ; Регистр Status.
PortA       equ         05h         ; PortA.
PortB       equ         06h         ; PortB.
IntCon      equ         0Bh         ; Регистр прерываний.
PIR1        equ         0Ch         ; Регист флагов периферийных прерываний.
TMR1L       equ         0Eh         ; Младший байт TMR1.
TMR1H       equ         0Fh         ; Старший байт TMR1.
T1CON       equ         10h         ; Регистр управления TMR1.
CMCON       equ         1Fh         ; Управление модулем компараторов.
OptionR     equ         81h         ; Конфигурация контроллера.
TrisA       equ         85h         ; Настройка выводов PortA.
TrisB       equ         86h         ; Настройка выводов PortB.
;==================================================================================================
; Регистры общего назначения.
;==================================================================================================
Reg_1       equ         70h
step        equ         71h         ; Несёт признак шага (0-полушаг, 1-полный шаг).
count       equ         72h         ; Счётчик числа прерываний TMR1.
temp_Status equ         73h         ; Временный регистр Status (INT).
temp_PIR1   equ         74h         ; Временный регистр PIR1 (INT).
temp_W      equ         75h         ; Временный регистр W (INT).
;==================================================================================================
; Присваивание битам названий.
;==================================================================================================
C           equ         0           ; Флаг переноса-заема.
DC          equ         1           ; Флаг десятичного переноса.
Z           equ         2           ; Флаг нулевого результата.
RP0         equ         5           ; Бит выбора банка.
RP1         equ         6           ; Бит выбора банка.
INTF        equ         1
;**************************************************************************************************
; Начало программы.
;**************************************************************************************************
            org         0
            goto        START
            org         4
            goto        INT
;**************************************************************************************************
; Инициализация контроллера
;**************************************************************************************************
START       bcf         Status,RP0  ; Банк 0.
            movlw       b'00100001' ; TMR1-вкл, Внутр. ист. fosc/4, Ген. выкл., Преддел 1:4,
            movwf       T1CON       ; 
            movlw       b'00110110' ; Схема два компаратора с общим опорным напряжением
            movwf       CMCON       ; Входы RA0-RA1, инверсные выхода,
            bsf         Status,RP0  ; Банк 1.
            movlw       b'11100111' ;
            movwf       TrisA       ; RA3 и RA4 на выход, остальные на вход.
            movlw       b'00001111' ; RB0-RB3 на вход, RB4-RB7 на выход
            movwf       TrisB       ;
            movlw       b'10000111' ; Предделитель вкл. перед TMR0 1:256,Прерывания по ЗФ,
            movwf       OptionR     ; подтягивающие резисторы отключены.
            movlw       b'11010000' ; Разрешение прерывания от периферийных устройств и
            movwf       IntCon      ; внешнего прерывания INT.
            bcf         Status,RP0  ; Банк 0
            clrf        PortB       ; Очистка порта B.
            clrf        PortA       ; Очистка порта A.
            clrf        Reg_1
;-- Включен полный шаг или полушаг -- 
CYCLE       btfsc       PortA,7     ; Проверка порта RА7 Jmp3 (замкнут=0).
            goto        FSTEP       ; Перемычка снята (полный шаг).
            clrf        step        ; Перемычка установлена (полушаг).
            goto        $+3
FSTEP       movlw       1           ; Полный шаг (перемычка снята)
            movwf       step
;-Проверка сигнала Enable Jmp1 стоит-
            btfsc       PortB,2     ; Проверка, где перемычка.
            goto        ENABLE
            btfsc       PIR1,0
            goto        NO_ENABLE
ENABLE      bsf         Status,RP0  ; Банк 1
            bsf         TrisB,3     ;  
            bcf         Status,RP0  ; Банк 0.
            goto        CYCLE
NO_ENABLE   bsf         Status,RP0  ; Банк 1
            bcf         TrisB,3     ; 
            bcf         Status,RP0  ; Банк 0.
            goto        CYCLE
;**************************************************************************************************
; Программа прерываний.
;**************************************************************************************************
INT         movwf       temp_W      ; Сохранение аккумулятора во впеменный регистр.
            swapf       Status,W    ; Сохранение  
            clrf        Status      ; регистра Status
            movwf       temp_Status ; во временный регистр
            movf        PIR1,W      ; Сохранение состояния
            movwf       temp_PIR1   ; регистра PIR1.
            btfsc       step,0      ; Какой режим установлен (шаг.полушаг)
            goto        FULLSTEP    ; Переход на полный шаг.
;--------------- Полушаг ------------
            btfsc       PortB,1     ; Проверка сигнала DIR.
            goto        DIR_1       ; На входе Dir 1.
            incf        Reg_1,F     ; Reg_1+1
            goto        DIR_0
DIR_1       decf        Reg_1,F     ; Reg_1-1
DIR_0       movf        Reg_1,W
            xorlw       9           ;
            btfss       Status,Z    ; Reg_1=9 ?
            goto        NO_9        ; Нет
            movlw       1           ; Да.
            movwf       Reg_1       ; Сброс Reg_1 до 1.
NO_9        movf        Reg_1,W     ; Reg_1 =0
            xorlw       0           ; 
            btfss       Status,Z
            goto        NO_0        ; Нет
            movlw       0x08        ; 
            movwf       Reg_1       ; Reg_1=8
NO_0        call        OUT_STEP    ; Вывести в порт сигналы двигателя.
            goto        OUT_INT     ; На выход из прерывания.
;------------ Полный шаг ------------
FULLSTEP    btfsc       PortB,1     ; Проверка сигнала DIR.
            goto        DIR_11      ; На входе Dir 1.
            incf        Reg_1,F     ; Reg_1+1
            goto        DIR_00
DIR_11      decf        Reg_1,F     ; Reg_1-1
DIR_00      movf        Reg_1,W
            xorlw       5           ;
            btfss       Status,Z    ; Reg_1=5 ?
            goto        NO_5        ; Нет
            movlw       1           ; Да.  
            movwf       Reg_1       ; Сброс Reg_1 до 1.
NO_5        movf        Reg_1,W     ; Reg_1 =0
            xorlw       0           ;  
            btfss       Status,Z
            goto        NO_00       ; Нет
            movlw       4           ; 
            movwf       Reg_1       ; Reg_1=4
NO_00       call        OUT_FULL    ; Вывести в порт сигналы двигателя.
;---- Восстановление регистров ------
OUT_INT     bcf         IntCon,INTF ; Сброс флага внешнего прерывания.
            clrf        TMR1H       ; Очистка байтов TMR1.
            clrf        TMR1L       ; Очистка байтов TMR1.
            bcf         PIR1,0      ; Сбросить флаг прерывания по переполнению TMR1.
            movf        temp_PIR1,W ;
            movwf       PIR1        ; Восстановление PIR1.
            swapf       temp_Status,W           
            movwf       Status      ; Восстановление Status.
            swapf       temp_W,F    ;
            swapf       temp_W,W    ; Восстановление аккумулятора.          
            retfie                  ; Выход из прерывания.
;**************************************************************************************************
; Работа в режиме полушаг.
;**************************************************************************************************
OUT_STEP    movf        Reg_1,W
            xorlw       1
            btfsc       Status,Z
            goto        STEP_1
            movf        Reg_1,W
            xorlw       2
            btfsc       Status,Z
            goto        STEP_2
            movf        Reg_1,W
            xorlw       3
            btfsc       Status,Z
            goto        STEP_3
            movf        Reg_1,W
            xorlw       4
            btfsc       Status,Z
            goto        STEP_4
            movf        Reg_1,W
            xorlw       5
            btfsc       Status,Z
            goto        STEP_5
            movf        Reg_1,W
            xorlw       6
            btfsc       Status,Z
            goto        STEP_6
            movf        Reg_1,W
            xorlw       7
            btfsc       Status,Z
            goto        STEP_7
            movf        Reg_1,W
            xorlw       8
            btfsc       Status,Z
            goto        STEP_8
            return

STEP_1      movlw       b'10000000' 
            movwf       PortB       ; 
            return

STEP_2      movlw       b'10100000' 
            movwf       PortB       ; 
            return

STEP_3      movlw       b'00100000'  
            movwf       PortB       ;
            return

STEP_4      movlw       b'01100000'   
            movwf       PortB       ; 
            return

STEP_5      movlw       b'01000000'      
            movwf       PortB       ;
            return

STEP_6      movlw       b'01010000'   
            movwf       PortB       ;
            return

STEP_7      movlw       b'00010000'    
            movwf       PortB       ; 
            return

STEP_8      movlw       b'10010000'   
            movwf       PortB       ; 
            return

;**************************************************************************************************
; Работа в режиме полный шаг.
;**************************************************************************************************
OUT_FULL    movf        Reg_1,W
            xorlw       1           ;
            btfsc       Status,Z
            goto        SHAG_1
            movf        Reg_1,W
            xorlw       2           ;
            btfsc       Status,Z
            goto        SHAG_2
            movf        Reg_1,W
            xorlw       3           ; 
            btfsc       Status,Z
            goto        SHAG_3
            movf        Reg_1,W
            xorlw       4           ;  
            btfsc       Status,Z
            goto        SHAG_4
            return

SHAG_1      movlw       b'10100000'    
            movwf       PortB       ;
            return

SHAG_2      movlw       b'01100000'       
            movwf       PortB       ; 
            return

SHAG_3      movlw       b'01010000'     
            movwf       PortB       ;
            return

SHAG_4      movlw       b'10010000'       
            movwf       PortB       ; 
            return
;**************************************************************************************************
            end

 

Файлы для скачивания:

icon Скачать схему и разводку печатной платы (62 Кбайт)

icon Скачать прошивку контроллера (оригинальная и доработаная) (2 Кбайт)

icon Скачать исходник asm (2 Кбайт)

 

Список использованных источников:http://robozone.su ;http://electroprivod.ru

Read 5522 times Last modified on Вторник, 02 сентября 2014 14:40

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru