📄 1.txt
字号:
stepper_acc1 (_stepper2_acc_index,_stepper2_period_preset)
stepper_acc1N (_stepper2_acc_index,_stepper2_acc_count)
stepper2_status = _stepper_status_continuous
end if
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Runs motor to the specified target position,
-- using the current direction, speed and accereration settings
-- This routine can also be called as a macro,
-- allowing to use large integer values
-- stepper_run_into 1,23300
-- ---------------------------------------------------------------------
procedure stepper_run_into (byte in motor_nr = 1,
byte in target_pos1 = 0,
byte in target_pos2 = 0,
byte in target_pos3 = 0,
byte in target_pos4 = 0) is
if motor_nr == 1 then
stepper1_status = _stepper_status_running
-- it's not necessary to disable interrupts here !!
;;;;;<;mac> byte4_assign _stepper1_target_pos = target_pos
_stepper1_target_pos1 = target_pos1
_stepper1_target_pos2 = target_pos2
_stepper1_target_pos3 = target_pos3
_stepper1_target_pos4 = target_pos4
;;;;;<;/mac>
else
stepper2_status = _stepper_status_running
-- it's not necessary to disable interrupts here !!
;;;;;<;mac> byte4_assign _stepper2_target_pos = target_pos
_stepper2_target_pos1 = target_pos1
_stepper2_target_pos2 = target_pos2
_stepper2_target_pos3 = target_pos3
_stepper2_target_pos4 = target_pos4
;;;;;<;/mac>
end if
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Runs motor for the specified HALF-STEPS !!
-- using the current direction, speed and accereration settings
-- If motor is running, the specified steps will be added to the target position
-- This routine can also be called as a macro,
-- allowing to use large integer values
-- stepper_do_steps 1,23300
-- ---------------------------------------------------------------------
procedure stepper_do_steps (byte in motor_nr = 1,
byte in n_steps1 = 0,
byte in n_steps2 = 0,
byte in n_steps3 = 0,
byte in n_steps4 = 0) is
-- interrupts must be disabled, because target-position is changes
T0IE = false
if motor_nr == 1 then
if stepper1_forward then
;;;;;<;mac> byte4_add _stepper1_target_pos = _stepper1_target_pos , n_steps
Y1 = _stepper1_target_pos1
Y2 = _stepper1_target_pos2
Y3 = _stepper1_target_pos3
Y4 = _stepper1_target_pos4
X1 = n_steps1
X2 = n_steps2
X3 = n_steps3
X4 = n_steps4
byte4_add
_stepper1_target_pos1 = Y1
_stepper1_target_pos2 = Y2
_stepper1_target_pos3 = Y3
_stepper1_target_pos4 = Y4
;;;;;<;/mac>
else
;;;;;<;mac> byte4_sub _stepper1_target_pos = _stepper1_target_pos , n_steps
Y1 = _stepper1_target_pos1
Y2 = _stepper1_target_pos2
Y3 = _stepper1_target_pos3
Y4 = _stepper1_target_pos4
X1 = n_steps1
X2 = n_steps2
X3 = n_steps3
X4 = n_steps4
byte4_sub
_stepper1_target_pos1 = Y1
_stepper1_target_pos2 = Y2
_stepper1_target_pos3 = Y3
_stepper1_target_pos4 = Y4
;;;;;<;/mac>
end if
stepper1_status = _stepper_status_running
else
if stepper2_forward then
;;;;;<;mac> byte4_add _stepper2_target_pos = _stepper2_target_pos , n_steps
Y1 = _stepper2_target_pos1
Y2 = _stepper2_target_pos2
Y3 = _stepper2_target_pos3
Y4 = _stepper2_target_pos4
X1 = n_steps1
X2 = n_steps2
X3 = n_steps3
X4 = n_steps4
byte4_add
_stepper2_target_pos1 = Y1
_stepper2_target_pos2 = Y2
_stepper2_target_pos3 = Y3
_stepper2_target_pos4 = Y4
;;;;;<;/mac>
else
;;;;;<;mac> byte4_sub _stepper2_target_pos = _stepper2_target_pos , n_steps
Y1 = _stepper2_target_pos1
Y2 = _stepper2_target_pos2
Y3 = _stepper2_target_pos3
Y4 = _stepper2_target_pos4
X1 = n_steps1
X2 = n_steps2
X3 = n_steps3
X4 = n_steps4
byte4_sub
_stepper2_target_pos1 = Y1
_stepper2_target_pos2 = Y2
_stepper2_target_pos3 = Y3
_stepper2_target_pos4 = Y4
;;;;;<;/mac>
end if
stepper2_status = _stepper_status_running
end if
-- enable interrupts again
T0IE = true
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- internal routine used by stop and null
-- stops the motor (sets also stopped mode)
-- if NULL, defines current-position as NULL
-- sets target-position to current-position
-- ---------------------------------------------------------------------
procedure _stepper_stop_null (byte in motor_nr, bit in null) is
if motor_nr == 1 then
stepper1_status = _stepper_status_stopped
-- at this point interrupts have or will see the stop status and will do nothing
-- so it's save to change the target-position
-- define current position as NULLpoint
if null then
;;;;;<;mac> byte4_assign stepper1_pos = 0
stepper1_pos1 = 0x00
stepper1_pos2 = 0x00
stepper1_pos3 = 0x00
stepper1_pos4 = 0x00
;;;;;<;/mac>
end if
-- set target-position to current-position
;;;;;<;mac> byte4_assign _stepper1_target_pos = stepper1_pos
_stepper1_target_pos1 = stepper1_pos1
_stepper1_target_pos2 = stepper1_pos2
_stepper1_target_pos3 = stepper1_pos3
_stepper1_target_pos4 = stepper1_pos4
;;;;;<;/mac>
else
stepper2_status = _stepper_status_stopped
-- define current position as NULLpoint
if null then
;;;;;<;mac> byte4_assign stepper2_pos = 0
stepper2_pos1 = 0x00
stepper2_pos2 = 0x00
stepper2_pos3 = 0x00
stepper2_pos4 = 0x00
;;;;;<;/mac>
end if
-- set target-position to current-position
;;;;;<;mac> byte4_assign _stepper2_target_pos = stepper2_pos
_stepper2_target_pos1 = stepper2_pos1
_stepper2_target_pos2 = stepper2_pos2
_stepper2_target_pos3 = stepper2_pos3
_stepper2_target_pos4 = stepper2_pos4
;;;;;<;/mac>
end if
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- stops motor directly
-- sets motor status to stopped
-- sets position target=current
-- ---------------------------------------------------------------------
procedure stepper_stop (byte in motor_nr = 1) is
_stepper_stop_null (motor_nr, false)
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- stops motor smoothly
-- ---------------------------------------------------------------------
procedure stepper_stop_smooth (byte in motor_nr = 1) is
T0IE = false ; disable interrupts
if motor_nr == 1 then
stepper1_accelerate_on = true
_stepper1_acc_count = 1
_stepper1_not_decelerating = false
else
stepper2_accelerate_on = true
_stepper2_acc_count = 1
_stepper2_not_decelerating = false
end if
T0IE = true ; enable interrupts
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- stops motor directly and nulls position
-- sets motor status to stopped
-- sets position current=0
-- sets position target=current
-- ---------------------------------------------------------------------
procedure stepper_set_null (byte in motor_nr = 1) is
_stepper_stop_null (motor_nr, true)
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- initializes all stepper motors
-- this procedure is automatic called by the include of this library
-- and should rarely be called be the user
-- ---------------------------------------------------------------------
procedure stepper_init is
var byte value
stepper1_status = _stepper_status_stopped
stepper_set_null (1)
stepper1_full_steps = true
stepper1_forward = true
stepper1_full_force_2_winding = false
stepper1_full_force_1_winding = true
stepper1_accelerate_on = false
_stepper1_index = 0
_stepper1_not_decelerating = true
-- get table value, output to port
_get_stepper_value ( _stepper1_index, value )
_stepper1_port_dir = all_output
_stepper1_port = value
if stepper_Nmotors == 2 then -- compiler directive !!
stepper2_status = _stepper_status_stopped
stepper_set_null (2)
stepper2_full_steps = true
stepper2_forward = true
stepper2_full_force_2_winding = false
stepper2_full_force_1_winding = true
stepper2_accelerate_on = false
_stepper2_index = 0
_stepper2_not_decelerating = true
-- get table value, output to port
_get_stepper_value ( _stepper2_index, value )
_stepper2_port_dir = all_output
_stepper2_port = value
end if
-- intialize TMR0 prescaler
OPTION_REG = ( OPTION_REG & ! ( _b_T0CS )) -- set TMR0 to main oscillator
OPTION_REG = ( OPTION_REG & ! ( _b_PSA )) -- enable prescaler for TMR0
OPTION_REG = ( OPTION_REG & 0xF8 ) | 0x06 -- set prescaler to 6 = 1:128
-- in that case a timer value of -39 will give 0.9984 msec
-- enable interrupts
T0IE = true -- enable TMR0 interrupt
GIE = true -- enable general interrupts
T0IF = false -- clear TMR0 interrupt flag
end procedure
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- perform the stepper intialisation
-- ---------------------------------------------------------------------
stepper_init
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -