Авторизация


...

Кто на сайте?

Сейчас 136 гостей и ни одного зарегистрированного пользователя на сайте

Статистика

-Посетители : 23007
-Материалы : 209

Пользователь сайта продает...

  Программатор Pic K-150

Пользователь сайта покупает...

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

Автор: Sergey Roslik Просмотров: 8395

 

 

Униполярный двигатель имеет одну обмотку в каждой фазе, но от середины обмотки сделан отвод. Это позволяет изменять направление магнитного поля, создаваемого обмоткой, простым переключением половинок обмотки. При этом существенно упрощается схема драйвера. Драйвер должен иметь только 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

Случайные статьи....

Prev Next

Среда программирования.

22-04-2012 Super User

Для написания наших программ  нам понадобится установить на наш компьютер  программное обеспечение. Для PIC микроконтроллеров существует интегрированная  среда разработки MPLAB (IDE) фирмы Microchip Technology Incorporated. MPLAB позволяет писать программы в встроенном текстовом редакторе, ассемблировать и компилировать исходный текст, отлаживать и оптимизировать...

Доработка строительного фена

19-08-2012 Super User

Доработка строительного фена

   Строительный фен, в радиолюбительстве незаменимая вещь. Не буду перечислять все возможности использования, я его купил, когда пришлось упаковывать 3м гибкой шины в термоусадочную трубку. Взял самый дешевый по тому, что использовать его намеревался не в профессиональных, а  любительских целях.  С первой...

ПП перекодировки данных .

30-05-2012 Super User

   Данный алгоритм можно применить в подпрограммах  перекодировки, где таблица, записанная в память данных, позволяет сопоставить одному 8-битному числу другое произвольное 8-битное число. Здесь  в примере,  показано как можно произвести  перекодировку десятичного числа  в другое десятичное число.  Первоначально в память программ...

ПП чтения EEPROM памяти данных.

24-05-2012 Super User

Чтение байта данных из EEPROM-памяти  данных. Для чтения байта данных необходимо до вызова ПП записать в регистр EEADR  адрес выбранной  ячейки в EEPROM-памяти  данных. Результат будет сохранен в "W".  


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

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