;***************************************************************************************** ;Telescope Mount Controller IV ;(c) Martin Cibulski ; ;Low level motor control ; ;The motors are driven by two Allegro A3973SB microstepping drivers. ;Commands are sent to the drivers in an interrupt routine 7812.5 times per second. ;***************************************************************************************** ; Allegro 3973 parameters .EQU A39_IDLE = 0 .EQU A39_ACTIVE = 1 .EQU A39_RESERVED = 0b00 .EQU A39_RECT_ACTIVE = 0b00 .EQU A39_RECT_DISABLE = 0b01 .EQU A39_RECT_PASSIVE = 0b10 .EQU A39_RECT_LOWSIDE = 0b11 .EQU A39_OSC_INTERN = 0b00 .EQU A39_OSC_EXTERN = 0b01 .EQU A39_OSC_EXTERN2 = 0b10 .EQU A39_OSC_EXTERN4 = 0b11 .EQU A39_BLANK_4 = 0b00 .EQU A39_BLANK_6 = 0b01 .EQU A39_BLANK_8 = 0b10 .EQU A39_BLANK_12 = 0b11 .EQU A39_RANGE_LOW = 0 .EQU A39_RANGE_HIGH = 1 .EQU A39_REF_INTERN = 0 .EQU A39_REF_EXTERN = 1 .EQU A39_MIXED_DECAY = 0 .EQU A39_SLOW_DECAY = 3 .EQU A39_PHASE_PLUS = 0 .EQU A39_PHASE_MINUS = 1 .EQU A39_WORD_STEP = 0 .EQU A39_WORD_INIT = 1 ;***************************************************************************************** .CSEG a39__irq_per_sec: .db 0x40,0xBE,0x84,0x80,0x00,0x00,0x00,0x00 ;7812.5 = 16 MHz / 2048 ;***************************************************************************************** ;Variables .DSEG a39_new_params: .byte 1 a39_offtimA: .byte 1 a39_offtimB: .byte 1 a39_activeA: .byte 1 a39_activeB: .byte 1 a39_synrecA: .byte 1 a39_synrecB: .byte 1 a39_dectimA: .byte 1 a39_dectimB: .byte 1 a39_blanktimA: .byte 1 a39_blanktimB: .byte 1 a39_decmodA: .byte 1 a39_decmodB: .byte 1 a39_rangeA: .byte 1 a39_rangeB: .byte 1 a39_sin_coeff3: .byte 2 a39_sin_coeff5: .byte 2 a39_sin_coeff7: .byte 2 ;***************************************************************************************** ;Monitor Labels .CSEG a39_label_tab: .dw a39_motsin .db L_XCMD ,"MOTSIN " .dw a39_sin_coeff3 .db L_WRAM ,"MOTSIN3 " .dw a39_sin_coeff5 .db L_WRAM ,"MOTSIN5 " .dw a39_sin_coeff7 .db L_WRAM ,"MOTSIN7 " .dw a39_new_params .db L_BRAM ,"MOTNEWPARM " .dw a39_activeA .db L_BRAM ,"MOTAACTIVE " .dw a39_activeB .db L_BRAM ,"MOTBACTIVE " .dw a39_synrecA .db L_BRAM ,"MOTASYNREC " .dw a39_synrecB .db L_BRAM ,"MOTBSYNREC " .dw a39_offtimA .db L_BRAM ,"MOTAOFFTIM " .dw a39_offtimB .db L_BRAM ,"MOTBOFFTIM " .dw a39_dectimA .db L_BRAM ,"MOTADECTIM " .dw a39_dectimB .db L_BRAM ,"MOTBDECTIM " .dw a39_blanktimA .db L_BRAM ,"MOTABLATIM " .dw a39_blanktimB .db L_BRAM ,"MOTBBLATIM " .dw a39_decmodA .db L_BRAM ,"MOTADECMOD " .dw a39_decmodB .db L_BRAM ,"MOTBDECMOD " .dw a39_rangeA .db L_BRAM ,"MOTARANGE " .dw a39_rangeB .db L_BRAM ,"MOTBRANGE " .dw 0 .db L_END , 0 ;***************************************************************************************** ;Stepper Motor Init .CSEG stepper_init_a3973: ldi r16 ,MOT_DDR_VALUE out MOT_DDR ,r16 ldi r16 ,(1<