Hello All,There are many small, off-the-shelf boards which can accept TTL or RS232 serial data and control/drive multiple RC servo motor. What I am looking for is the reverse of this operations. That is, I want to measure multiple servo pulses with one small unit, and send the measured values via a TTL or RS232 port.Do you know if there is any small, off-the-shelf solution for this?Roberto
If I understand your question right, I managed to hack the ardupilot firmware (and jumpered a couple pins) to basically perform this function. The board can be made to read 4 individual channels from any receiver and then send those values out the serial port using some predefined packet format. In addition, the same board could read back servo positions from the host computer via the same serial channel and drive 4 servos. Also, the ardupilot comes with built in RxMux (manual pass through) circuitry that uses a 5th selection channel. So if you only need to do 4 channels in/out, you don't mind a bit of servo jitter on output channels 3+4, and you don't mind doing a bit of soldering, it's not a bad way to add an entire servo/receiver management + RxMux subsystem to just about any computer that has a serial port (or ubs -> serial converter.)
What you give up is the ability to connect a gps to that same ardupilot (the single serial port is now tied up with communication to and from the host computer.) I also completely ignored the IR sensors since I don't plan to use them, but I didn't remove that code from my version of the firmware so you could potentially add that data to the receiver data packet and pass the IR sensor values up to the host computer too.
If anyone wants to play around with this I can certainly send you my firmware changes and a picture of the back of my ardupilot showing the 4 wires I soldered on to make the appropriate pin connections.
If I could voice my wish list, I'd love to see something like my hacked system that simply acts as a sensor interface board with a serial connection to a host computer. But it would be great to support at least 6 channels in and out. It would be great to have additional serial ports so that a gps and possibly other sensors could be managed through the sensor board. It would be great to have pressure based altitude and pressure based speed sensors both as part of the default package. Such a board could be hooked up to a PC, a laptop, a gumstix, and just about any other computer board that has a serial port. The nice thing about having a host computer upstream is that you can plug in a *lot* more horse power to do sophisticated kalman filtering, sophisticated navigation, you could imagine "nice" or "understandable" code, written at a high conceptual level with nice modern tools, versus your typical bare metal low level embedded code that is *very* application and *very* platform specific and can be very difficult to understand or modify or extend.
I Heart Robotics is right. The easiest way is to tap straight into the PPM pin, where the signals come out in sequence. Look to the Paparazzi wiki for more details on how to do that. You can handle all the channels with one digital pin that way, and it's computationally very light. You could do it with an ATTiny. Propeller is overkill.
The secret to getting this working the easy way is you need PPM compatible PWM signaling.
If you use a decade counter to generate your pwm signal, (like almost every R/C receiver) then you just OR the outputs together with diodes then use one i/o line to sample all 8 pwm signals. I will know how the ArduPilots PWM signal looks later today.
Varga,
Thank you for the link. It is very similar to what I want. But, that example use inerrtupt and timer. As far as I know that approach can not scale-up to 8 channels.
Comments
What you give up is the ability to connect a gps to that same ardupilot (the single serial port is now tied up with communication to and from the host computer.) I also completely ignored the IR sensors since I don't plan to use them, but I didn't remove that code from my version of the firmware so you could potentially add that data to the receiver data packet and pass the IR sensor values up to the host computer too.
If anyone wants to play around with this I can certainly send you my firmware changes and a picture of the back of my ardupilot showing the 4 wires I soldered on to make the appropriate pin connections.
If I could voice my wish list, I'd love to see something like my hacked system that simply acts as a sensor interface board with a serial connection to a host computer. But it would be great to support at least 6 channels in and out. It would be great to have additional serial ports so that a gps and possibly other sensors could be managed through the sensor board. It would be great to have pressure based altitude and pressure based speed sensors both as part of the default package. Such a board could be hooked up to a PC, a laptop, a gumstix, and just about any other computer board that has a serial port. The nice thing about having a host computer upstream is that you can plug in a *lot* more horse power to do sophisticated kalman filtering, sophisticated navigation, you could imagine "nice" or "understandable" code, written at a high conceptual level with nice modern tools, versus your typical bare metal low level embedded code that is *very* application and *very* platform specific and can be very difficult to understand or modify or extend.
If you use a decade counter to generate your pwm signal, (like almost every R/C receiver) then you just OR the outputs together with diodes then use one i/o line to sample all 8 pwm signals. I will know how the ArduPilots PWM signal looks later today.
With this example decade counter servo thing you can get 8 12bit pwm signals with one interrupt driven i/o line.
http://www.iheartrobotics.com/2008/12/12bit-servo-controller.html
I can probably make an off the shelf solution in about 4 weeks or so given my current project load.
Thank you for the link. It is very similar to what I want. But, that example use inerrtupt and timer. As far as I know that approach can not scale-up to 8 channels.