Homing in AKD Basic
The AKD Basic drive does not have a homing procedure like the other AKD drive models. The homing procedure must be written into the Basic program. Here is one example of using the Position Capture feature to find the home position. In this example, the homing is only done once after the program is started. The program configures the position capture parameters and uses the captured position to calculate the home position. The Basic program allows flexibility to define the homing procedure however you want it to behave.
'-------------- Device Params -----------------------
Params
End Params
'-------------- Define (dim) Global Variables --------
Dim homefound as integer
Dim targetposition as integer
Dim speed as integer 'speed of initial move to sprayposition
Dim accel as integer 'acceleration for all moves
Dim decel as integer 'deceleration for all moves
MBInfo
End
'-------------- Main Program -------------------------
Main
DRV.SWENABLE = 0
homefound = 0
'Enable Interrupts
INTR.HWLS.POSSTATE = 1
INTR.HWLS.NEGSTATE = 1 'used for homing if home input not reached before limit switch
Intr.DRV.FAULTS = 1
INTR.DISABLE = 1
INTR.DRV.HWENABLE = 1
'Set default values
targetposition = 1016 'total distance, in 0.001mm
speed = 200 'speed of initial move to targetposition
accel = 1000
decel = 1000
Move.Acc = accel ' Acceleration (drive units)
Move.Dec = decel ' Deceleration (drive units)
While DRV.HWENABLE = 0 : Wend 'wait for hardware enable
'While 1 = 1 'start continuous loop
DRV.SWENABLE = 0 'enable drive
'Homing, homing uses Input 3 to start homing and Input 4 for the position capture
'the negative limit switch inturrupt is also used for homing
If homefound = 0 Then 'If axis has not been homed, then ...
Print "waiting for input 3"
While DIN3.STATE = 0 : Wend 'wait for the start home command
'start the homing routine
CAP0.MODE = 0 'standard position capture
CAP0.TRIGGER = 3 'Use input 4 for position capture
CAP0.EDGE = 1 'positive edge
CAP0.EVENT = 0 'no pre-conditions must be met
CAP0.EN = 1 'Start looking for the capture trigger
MOVE.RUNSPEED = 200
MOVE.DIR = 1 'negative direction
MOVE.GOVEL 'start moving
Print "waiting for input 4"
While CAP0.STATE = 0 : Wend 'wait for the capture to trigger, if hits neg limit switch then run interrupt
Print "captured"
MOVE.RUNSPEED = 0
MOVE.GOVEL 'stop moving, zero speed
While MOVE.MOVING = 1 : Wend 'wait for motion to stop
MOVE.POSCOMMAND = (PL.FB - CAP0.PLFB ) 'set position to the difference between the actual position and captured position
Pause (.2)
MOVE.RUNSPEED = 50
MOVE.TARGETPOS = 0
MOVE.GOABS 'move back to the captured position
Pause (1) 'this is the end of the homing routine
homefound = 1 'set homefound tag
Print "home found"
Print "end of homing"
End If
While 1 = 1
While DRV.HWENABLE = 0 : Wend
Move.RunSpeed = speed
Move.TargetPos = targetposition
MOVE.GOREL
Print "moving"
While MOVE.MOVING = 1 : Wend
Print "finished moving"
Pause (1) 'wait a second before looping to move again
Wend 'loops back to "While 1 = 1"
End Main
'-------------- Subroutines and Functions ------------
'-------------- Interrupt Routines -------------------
Interrupt HWLS.NEGSTATE
If homefound = 0 Then 'move to the positive side of the home switch
While MOVE.MOVING = 1 : Wend 'wait to stop moving
MOVE.DIR = 0 'positive direction
MOVE.RUNSPEED = 50 'mm/s
MOVE.GOVEL 'start moving
While DIN4.STATE = 0 : Wend 'wait to get on the home switch
While DIN4.STATE = 1 : Wend 'find positive edge of home switch
Pause (0.5)
MOVE.RUNSPEED = 0
MOVE.GOVEL 'stop moving, zero speed
While MOVE.MOVING = 1 : Wend 'wait to stop moving
CAP0.EN = 1 'Start looking for the capture trigger
MOVE.DIR = 1 'negative direction
MOVE.RUNSPEED = 50 'mm/s
MOVE.GOVEL 'start moving
ElseIf homefound = 1 Then
Print "Restarting - Neg Limit"
Restart
End If
INTR.HWLS.NEGSTATE = 1
End Interrupt
Interrupt HWLS.POSSTATE
Print "Restarting - Pos Limit"
Restart
End Interrupt
Interrupt DRV.HWENABLE
Print "Restarting - HW Enable"
Restart
End Interrupt
Interrupt DRV.FAULTS
Print "Restarting - Fault"
Restart
End Interrupt