Knowledge Base

Example: Simple motor speed control with SPice10213

The following sample program illustrates the basic speed control function and dynamic braking with the SPice10213. It drives the motor 1 (reversible) output.

;MDrv1  SPice10213 simple speed control example

;This program illustrates simple speed control
;and dynamic braking of a small DC motor using the SPice10213
;on an MS12 controller. It has a forward/reverse button and a stop/start button.

;Forward/reverse is active only while the motor is stopped.

;Stop/starts initial starts the speed ramping up. Once running,
;it triggers a sudden stop.

;The motor will be started at an initial PWM setting. This will be a function of
;the motor ... below some threshold it doesn't rotate at all.
InitialPWM EQU 50

;The motor will ramp up to the PWM value MaxPWM
MaxPWM EQU 200

iStopStart iEQU 16 ;The Stop/Start button
iFwdRev iEQU 14 ;The Forward/Reverse button

oDirection oEQU 12 ;The direction relay

;------- RAM allocation ------------------
PWM mEQU 0


;------
;Start of program
setu 0,1 ;set spice connector pin 4 as DO
setu 4,4 ;set spice connector pin 8 as PWM output
SpiceConfigU

Idle: ;Back here when motor is stopped
ResetK :clear any pending buttons
IdleLoop: ;Sit and wait for a button (command)

GoIfInK iStopStart,StartUp ;Test for start command
InputK iFwdRev ;Test for reversal
GoIfF IdleLoop
InputO oDirection ;Reverse the direction relay
NOT
Output oDirection
GoTo IdleLoop

;Here to start the motor
StartUp:
LoadX InitialPWM ;Initial speed
RampLoop:
Push ;Duplicate
GoIfXEQ MaxPWM,Running ;Test if at max speed
IncX ;Increment the speed value
Push ;Duplicate
AnOutJ ;Update motor drive
GoIfInK iStopStart,Stop ;Test for stop
Pause 2 ;20mS delay
GoTo RampLoop

Running: ;Here when running at max speed
WaitOnK iStopStart ;Wait for stop command
Stop:
LoadX 0
AnOutJ ;Turn off PWM output
InputO oDirection ;Reverse the direction relay ..
NOT ; .. for ...
Output oDirection ;... dynamic braking
Pause 10 ;Time for motor to stop
InputO oDirection ;Restore the direction relay
NOT
Output oDirection
GoTo Idle