Let's Make Robots!

Yet another PWM Picaxe question

Byrik

I am programming my Mr Basic with Mr Basic moron driver. I use a Picaxe 28x1. It is a very basic setup indeed, with a small servo carrying a sharp IR distance sensor.

After reading many pages of manuals and LMR and example code of other victims, I ran into a wall. It's the dreaded "PWM and servopos don't mix" wall on picaxes.

I understand from all the frustrated posts on LMR that the valid workaround would be to not mix pwm and servo commands. Use one after the other, but never simultaneously. That's were I fail. How do I switch off a servo signal or pwm signal?

My current code makes a PWM signal and the servo responds to it. The electrical signal is not to blame. Noisy as it might be. When I delete the servo commands from my code, but leave everything plugged in (servo, sharp, driver), the servo stops jittering.

I tried to bring the servopin low, to bring the pwm pin low, but neither is stopping the timer issue. Should I force the timer to OFF in between commands? Should my uC take a very short "nap"? Is there an official answer here at all?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
OddBot's picture

http://letsmakerobots.com/node/17936

Sadly this is one of the reasons I changed to Arduino where I am still having PWM problems.

http://letsmakerobots.com/node/18743

With picaxe I have found, yes you can have PWM and servos but not at the same time and because the servos will not receive signals while PWM is in use they can then loose their position while under load.

Ultimately I found if I wanted to use servos then continuous rotation servos for the drive motors was the only practical solution.

MarkusB's picture

You could produce the PWM also by an external circuit :p

MarkusB's picture

You don't need to switch off a servo(pos) command. Any other timer command like pause should stop the servo(pos) command. Just add a line with pause 500 for instance. If you still have problems, please post the part of your code, which makes trouble :)

 

 

rik's picture

Is that true for any timer-related command? Because my servo keeps jittering as soon as my pwm kicks in.

I'll try to replicate the effect with as little code as possible. This may take a week or more. Madrid is gonna distract me from robots, I guess ;-)

rik's picture

For future reference (by me mostly): Nuumio confirms: a "low pin" will stop a servopos command on that pin.

MarkusB's picture

Hi Rik,

You mean, the servo begin to jitter as soon as you start any pmw command even there is no temporary servo command? Then electrical noise could be a possibility, but you had already put this out of the question.

 

 

rik's picture

I ruled out noise, I think, by plugging the servo to the board, NOT issueing any servo commands => still jitter.

Removing PWM from code clears this up. This places the blame with PWM, I think.

But I still need to isolate this when my head is fresh again. Or sun burned. Whatever.

MarkusB's picture

Hi Rik,

But do you drive any motors during PWM and plugged in servo? I ask to terminate if not the motors cause some electrical noise during PWM.

rik's picture

No I had not tried removing the electrical load from the PWM pins yet. That would be a good experiment!

Too bad my experimental board requires a soldering iron to remove those wires. That's probably why I had not thought about it yet.

mintvelt's picture

Is the PWM pin connected to anything? If so; the noise may be some sort of signal spillover outside the 28X1. you might try running the code with PWM but without connecting anything to the PWM pin(s)

Anyway. All the timer related stuff in the picaxe kept giving me unexpected behavior, when combined with other timer related functions. So I swore to only use dedicated PicAxes for PWM and dedicated Picaxes to control servos.