步进电机的控制原理和程序 选自北航出版 耿德根主编《高速嵌入式单片机原理与应用》第七章7.4.2 源程序:SLAVR742.ASM 自从六十年代初期步进电机面世以来,在过去几年它的重要性大大提高了。它用来驱动时钟和其他采用指针的仪器,打印机、绘图仪、磁盘光盘驱动器、各种自动控制阀、各种工具,还有机器人等的机械装置。关于马进电机工作原理请参考有关资料。 下面用单极1-2相激磁方法步进电机做实验,即1极、2极、1极、2极、....极以次循环,如何用单极二相激该方法控制步进电机,由读者或用户自行 编制程序实验。 ;实验选用4.5V步进电机,用5V即可,实验时节省一组步进电机驱动电源; ;型号:MA82135; 相数:2相; 电压:4.5V; 电流/相:0.12A; 电阻欧姆:34Ω/相; 重量:30g ;********************************************* ;* 步进电机控制程序(单极1-2相) * ;* * ;*SLAVR742.ASM * ;*use ULN2803 ;使用PC0-PC3 驱动步进电机 * ;*use 11-17new bord * ;********************************************* .include"8515def.inc" .def temp =r16 .def dt =r19 .def np =r17 .def step =r18 .def TStep =r20 .def cnt =r21 .equ turntab=0x0200 .org $0000 rjmp RESET .cseg .org 0x010 RESET: ldi temp,low(RAMEND) ;设堆栈 out SPL,temp ldi temp,high(RAMEND) out SPL+1,temp ser TEMP ;C口设置为输出 OUT ddrc,TEMP ldi zl,low(turntab*2) ;步进电机旋转资料指针 ldi zh,high(turntab*2) ldi np,4 ldi temp,$44 out portc,temp ;初始化 ldi TStep,$25 rcall delay ldi cnt,10 clt rep: ldi step,192 ldi TStep,1 ;1--255 rcall turn dec cnt brne rep loop: nop rjmp loop ;************************************************************* ; t=1 uncircle turn ;T=1逆时针转 * ; t=0 circle turn ;T=0顺时针转 * ; 96 step a turn * ; TStep is time of a step ; * ;************************************************************* turn: brts uncircle ;判转向 inc np ;正转 cpi np,8 brne next clr np next: push zl add zl,np lpm out portc,r0 pop zl rcall delay dec step brne turn ret uncircle: ;反转 dec np cpi np,$ff brne next ldi np,$07 rjmp next delay: push TStep ;延时子程序 del1: ldi dt,70 del2: push dt del3: dec dt brne del3 pop dt dec dt brne del2 dec TStep brne del1 pop TStep ret .org turntab ; 0 1 2 3 4 5 6 7 ;步进电机旋转资料表 .db 0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33
|