Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Control of 1000 servo motors simultaneously

Status
Not open for further replies.

Nathaniell

New Member
Hi, i'm a new to electronics and am hoping to start this project where I would like to control 1000 servo motors individually and simultaneously. Basically, I would like to have these servos switch to either 0 degree or 180 degree. I plan to place these servos on a plane underneath a pliable material and move a tennis ball on top of the plane in any direction I want by actuating the servos up or down (to push the ball around).

Can anyone kindly help with any suggestions or advice regarding the setup, types of microcontroller, possible use of FPGA and servos connection circuitry which I require.

Thanks for your help.
 
Since servos (hobby type) need to be continually fed a positioning signal to hold a position, you are going to have to have a 1000-address-output servo control system. Do you have a cost cap for this project, as it's not going to be cheap.

Ken
 
That should not be that hard to do, with that limitation of just two positions. How fast update rate do you require?
You could use fpga or cpld, or just standard logic devices. I would go with serial to parallel data input, which will feed a bunch of invertors and and gates to choose one of the two input signals.
 
An FPGA solution is conceptually simple: you'll need 1000 outputs, which could mean as few as three devices or as many as (lots.)
Add an FTDI USB-chip for input from a PC, then 1000 output drivers: voila.

See how easy it is for someone who's not spending his own money?
Seriously, though; spend some time thinking about this before you buy 1000 of anything

Also: If that "0 or 180" spec is fixed, solenoids might work, too.
 
How many of these will you make. If 1000s I would go with the FPGA.
If only one then: I can get a 8 channel servo controller. It is controlled by serial (Rs232) or USB.
I believe 8 of these can be on the same serial port. So that is 64 servos can be controlled.
A while back I make a board where one serial port acts like 8 ports. (mux)
1:8 serial port mux X 8 servo boards X 8 servos = 512 servos. Well that's not 1000 but close.
 
Solenoids will be way cheaper and easier to control than servos. When you are getting into thousands of anything you really need to think through all the alternatives.
 
Kubeek, KMoffett, there's about $4-5000 allocated for it at the moment. I would study the alternatives to try and lower the cost. Assuming that cheap hobby grade actuators are used as first prototype I am thinking the update rate in order of milliseconds would be sufficient. I am currently trying LabVIEW graphical program since I am not familiar with VHDL. Based on everyone's recommendation, seems like a good idea to try maybe 10 solenoids actuators first on an FPGA. An actuator providing linear movement up and down with ability to hold its last position should be enough.

Also, the comment on drivers part (from Wade)..am not very familiar with it. Can you help elaborate more on it please.. Is there any way I could control large quantities of actuators simultaneously with minimal drivers. It would be a nightmare to get that many drivers.

Ron, I am planning to make just one of this. I thought of using an ArduinoMega to implement 512 actuators too. But I am not very sure as to how to link 2units of these (1024 units) to operate as a single unit. Is there a way to integrate the control of both boards?

Thanks for all your replies! :)
 
An actuator providing linear movement up and down with ability to hold its last position should be enough.
This part makes me think, are you still talking about ful-on, full-off movements of the servos, or do you want to have multiple positions in between? This will change the complexity of the code and required data throughput a lot.
Also "update rate in the order of milliseconds" is quite vauge, but you should know that normal RC servos are controlled by 1-2ms long pulses with 20ms period, so that makes only 50 updates per second.
 
My explanation wasn't clear. As in full on full off movements of actuators (servos/solenoid). And yes, 50 hz update is enough I reckon.
 
The problem with solenoids is they need drivers, servos on the other hand have all the electronics built in and only need a logic signal. Personally I'd try to compartmentalize it and maybe do a board that controls an array of 4 by 8 servos. As only two signal lengths are needed (1mS and 2mS) then a 40 pin pic chip could handle a 4 by 8 array. For communication, I'd daisy chain the boards via RS232. A simple protocol would be an address byte followed by 4 data bytes, when a chip receives a packet with address byte of zero then it uses that packet otherwise it decrements the address byte and passes the packet on. The main problem with this setup would be the update rate as you have to send at least 1000 bits so at 9600 baud you'd only be able to update as 10 times per second. Most chips can work at the 50k baud rate but I'm not sure how reliable that would be at ttl levels in a noisy environment. Alternatively use the MSSP for faster coms but that would require a load pin as well but would have the advantage of simultaneous updates.

Just my initial thoughts.

Mike.
 
Excellent ideas! Thank you all for your generous feedback. I will do more work on this and hopefully be able to share this here, the end result :) Cheers!
 
It's possible to drive all servos arranged in a multiplexed 33 x 33 grid at an update rate of 15Hz, or a 16 x 64 grid with a 31Hz update rate. In the first setup, you'd need to control 66 outputs; in the second setup, you'd need to control 80 outputs (which can be done using strings of shift registers: 9 SR for the former or 10 SRs for the latter config.). To allow the servos to be driven from the matrix, a decoder like the one shown in the attached diagram would be fitted on every servo (RSEL is active high, CSEL is active low).

This setup allows multiple levels to be sent to the servos; not just 0 / 180 degree.
 

Attachments

  • decoder.png
    decoder.png
    7.2 KB · Views: 241
It's possible to drive all servos arranged in a multiplexed 33 x 33 grid at an update rate of 15Hz, or a 16 x 64 grid with a 31Hz update rate. In the first setup, you'd need to control 66 outputs; in the second setup, you'd need to control 80 outputs (which can be done using strings of shift registers: 9 SR for the former or 10 SRs for the latter config.). To allow the servos to be driven from the matrix, a decoder like the one shown in the attached diagram would be fitted on every servo (RSEL is active high, CSEL is active low).

This setup allows multiple levels to be sent to the servos; not just 0 / 180 degree.
I don't see how the low cost servos can be driven like this.
 
The servos I use want a 50hz update rate and 1 to 2mS pulse.
Maybe if I saw a picture of what you are talking about.
 
The servos I use want a 50hz update rate and 1 to 2mS pulse.
The multiplexing setup I was writing about would have a row period of 2ms, which allows the control pulse between 1-2ms to be provided to any servo on that row, via the column select lines. The fact that I suggested 33 or 16 rows means that the update rate is slower than 50Hz; i.e. 33*2ms=66ms -> ~15Hz and 16*2ms=32ms -> ~31Hz.

I'll draw it tomorrow evening if it's still not clear. It's a basic multiplex circuit where 1 row is enabled at a time, and all columns that need to be pulsed will be pulsed for the 1-2ms. Then the same is repeated for the next row.
 
Dougy,

Many servos, after they have found their position, can be 'turned off' by not sending a signal to them. If the servo is not under a lot of force it will hold with the motor not power up.

I think in this project, all but 2 or 3 servos will be in the up position. Where the down servos are needs to change.

Using a muxing idea, Do not address most of the servos, just let them stay. Only select the servos that you want to change. Send them a new position for about 1/10 of a second. Done! (You need to send data for as long as it takes for the servo to travel)
 
Even cheap hobby servos exert a fair amount of torque/force, because of internal gearing. To get the same torque/force from a solenoid with a travel of more than a few mm is likely to require a much higher supply current. That may not be an issue if only a few will be active at any one time, though.
 
The extension speed of a solenoid, without damping, might be an issue in this project too.

Ken
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top