Society of Robots - Robot Forum
Electronics => Electronics => Topic started by: 555 timer chip guy on June 09, 2007, 04:54:59 PM
-
I am building a robot that uses stepper motors and I am having some trouble, everything was working fine until I wonted to make the motors go faster. here is my PBASIC code for a BS2sx microcontroller I am using to drive my motors:
' {$STAMP BS2sx}
' {$PBASIC 2.5}
SETUP:
STEP1 PIN 0
STEP2 PIN 1
STEP3 PIN 2
STEP4 PIN 3
i CON 100 'SPEED VALUE
MANE:
STEP1 = 1
PAUSE i
STEP1 = 0
STEP2 = 1
PAUSE i
STEP2 = 0
STEP3 = 1
PAUSE i
STEP3 = 0
STEP4 = 1
PAUSE i
STEP4 = 0
GOTO MANE
END
the only problem is that the pause time only gos down to 1 ms but it needs to be smaller for the motors to
go faster.
-
Have you tried overlapping the signal, ie half-stepping? I know using this technique increases the torque of the motor but it could also speed up the motor.
Also, why not create your own "delay" function? Make a function with a simple loop in it and call that in b/n steps. To change the timing of the delay, increase or decrease the number of loops in the function. You'll have to tune this by hand, or if you have a frequency counter or oscilloscope to verify the speed of the pulses.
- Rommel
-
I have tyred that but still the smallest period of time I could get it down to was still 1 ms
-
I am assuming that you tried the "half-stepping" part and failed.
For the second part of my comment. If you write your own "delay" function, the actual delay will be a factor of your clock rate (ie how fast the MCU is processing instructions). Most MCU instructions do not execute in 1ms, unless your clock rate is 1 instruction per millisecond. You could do something like this in C:
void my_delay(int delay)
{
int i = 0;
int j = 0;
for (i = 0; i < delay; i++)
for (j = 0; j < delay; j++)
return;
}
So in your main code:
step(1);
my_delay(100);
step(2);
my_delay(100);
- Rommel
-
(E how fast the MCU is processing instructions). Most MCU instructions do not execute in 1ms, unless your clock rate is 1 instruction per millisecond.
my microcontroller is 50MHz and has a program execution speed of 10,000 instructions a second, plenty fast to time intervals under 1 ms the only problem is I don't know how :'(
please explain how to create my own delay function in PBASIC I don't know c very well
thanks
-
' {$STAMP BS2sx}
' {$PBASIC 2.5}
delayt VAR Word
counter VAR word
Main:
' do something here
delayt = 255 ' change this
GOSUB calldelay
GOTO Main ' loops
calldelay:
FOR counter = 1 TO delayt
delayt = delayt ' this does nothing but waste time
NEXT
return
something like that
can a sx chip drive a stepper on its own?
-
thanks