Hi all,
I am working on developing a PID controller designed to hold a levered arm level by controlling an EFlite outrunner motor. The idea being if I can hold one hinged arm level than with 4x the hardware I could make a platform fly. I am using some OSEPP sensors I purchased from Frys: a gyroscope and accelerometer. I am controlling the thing with the Arduino Wire library. However, when I run the motor my sensor values go berserk, making all subsequent PID control meaningless.
How can I clean up the noise?
From what I have learned, using I2C is not ideal in noisy environments. I have already added two 1.5k pull-up resistors. I heard using a low-pass filter might help, based off an RC circuit, but I don't want to filter my sensor values.
Since I have an Arduino Mega, I was wondering if dedicating one board for the sensor reading, and another to the motor control would clear up my values. However, since it seems like the most intuitive to communicate between the boards would also be using the Wire library, I wonder if I would just be extending the problem.
Maybe I should just buy new sensors?
Any help would be much appreciated :)
Replies
Are you having I2C problems? Doesn't sound like you understand the I2C bus at all. It's a digital bus, it's going to either work perfectly or hang very quickly and give you nothing. In many cases if you miss an ack the bus will hang until it's reset or times out. If you're getting anything other than silence with intermittent garbage it's likely working just fine and you need to look elsewhere.
If you're using wires longer than a few inches or nonstandard voltages you need to double check your pullup resistors and wire capacitance and/or reduce the speed as needed.
I don't think having a separate board would do anything much except make the software more complicated.
It could be one or more of a number of things. You might first want to temporarily mount the motor on a solid base away from the sensors and run it up to see whether it's mechanical or electrical noise that's causing the problem.
Some possible causes: