OpenServo.com Forum Index OpenServo.com
Discussion of the OpenServo project
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Quantity Production
Goto page 1, 2  Next
 
Post new topic   Reply to topic    OpenServo.com Forum Index -> Hardware
View previous topic :: View next topic  
Author Message
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Tue May 16, 2006 7:03 pm    Post subject: Quantity Production Reply with quote

Hello All,

I am interested in making in bulk the PC board for the open servo. I am still reviewing the options, and waiting a bit to see how the current version pans out. My thought process is, it can be used for the servos, but also for gear head motors. I want to build a gear head motor joint for the Servo Erector Set that will be more powerful by using a larger gear reduction, and a bigger motor. So it's a win win if the board could do both.

Mike Thompson, can you send me your email address? Thanks...
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Tue May 16, 2006 10:30 pm    Post subject: Reply with quote

Welcome Jim. Andy has chatted with me about your interest in making OpenServo boards. I'm very happy about your interest and will do what I can to provide whatever information I can.

There is another member of this forum, Barry Carter, who is working with an OpenServo based design to drive larger motors for a large size robot arm he is building. He may be able to provide additional insight into the suitability of the OpenServo to drive motors larger than is typically present in standard RC servos.

As far as I know, the OpenServo should be able to drive a larger gearhead motor assuming the H-Bridge portion of the circuit is appropriately beefed to handle more current and voltage as needed. I'm assuming that you would still be using a potentiometer for position control. Using other position sensors such as a digital encoder would require a substantial modification to the software, but it should be possible.

I think the OpenServo hardware design is fairly flexible and it shouldn't be a big deal for an experienced designer to layout a new PCB as needed to accomodate a specific hardware configuration. For me, the big win would be able to have a variety of hardware configurations across a variety of RC servos and larger motors, but keep the software and control model the same across all servos.

-Mike

PS, I sent you an email with my contact information.
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
ginge
Site Admin


Joined: 14 Jan 2006
Posts: 1029
Location: Manchester, UK

PostPosted: Wed May 17, 2006 9:14 am    Post subject: Reply with quote

Hi,

The OpenServo version that I am using for my robot arm is only a slight mod from the original version. I have had to put it onto a larger board for many reasons (size of FET drivers, temperature constraints, etc) but is only a slight change. Something that I am doing is to only assemble the top half of an OpenServo board, and then trail wires to another H-Bridge board. This is less than ideal for a finished product, but suffices for experimentation.

Something that would be handy, is a pad to solder the external H-Bridge connections to. I actually made a few v2.0 OpenServo boards with this breakout connector on it (as well as some other stuff) which is all in the robot section of my homepage ( http://www.headfuzz.co.uk/?q=robot ).

The OpenServo software if almost 100% compatible with the larger H-bridges I am driving, and only requires a small amount of tweaking.

Barry
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger MSN Messenger
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Thu Feb 01, 2007 7:03 pm    Post subject: Reply with quote

Hello again,

Well I finally found a motor that looks like it will work for the custom gearhead servo for our Servo Erector Set. I'm still waiting for the aluminum part that will connect the pot to the motors shaft to arrive. In the meantime I can attach two hubs together for testing.


The motor is 22mm diameter. It draws 3.2amps at stall. It's a 12vdc motor with 231:1 all metal gear reduction and a final RPM of 64 at the output shaft. It's rated for 25kg-cm stall torque. I'm not sure it is an apples to apples comparison to hobby servos, because it is seriously strong. I did some testing with an HS-700 servo amp I had laying around and it didn't work very well. The slow refresh of the analog amp was not up to the task. I need a new controller... LOL The motor drew 180mA no load and I was able to get it up to 500mA by grabbing the hub on the output shaft and trying to stop it. I couldn't stop it... Very Happy

This is just the first implementation of the servo. I'm designing it specifically for the shoulder in a robot arm. I will also look into other configurations where the pot is moved to the same side as the motor and is connected with a set of gears. After this I am planning a larger version using a 32mm motor. I can see I have a lot of reading to do here to catch up. Thanks, Jim
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Thu Feb 01, 2007 7:45 pm    Post subject: Reply with quote

Hi Jim,

Very nice indeed.

I'm certain you will be interested in getting as many of these servos in the hands of other robot developers. Right now, the OpenServo is controlled by an I2C bus which while suitable for implementing sophisticated features such as the curve following I described in other forum threads, but it isn't suitable for a large majority of the robotic hobbiest who will simply want to simply plug your servo/motor into a standard servo controller such as the SSC-32 you sell.

My suggestion would be to leverage the 80% of the code in the existing OpenServo that controls motors with a fairly high degree of fidelity, but that we (Lynxmotion and the OpenServo community) work together to create a version of the OpenServo that is controlled with a standard servo PWM signaling. This would basically involve creating a software module in the OpenServo that will translate the pulse duration on an I/O port to a control value that controls servo position. Right now, position is controlled by discrete values sent over the I2C bus. There is plenty of spare I/O and compute horsepower to do this on the existing AVR ATmega168 in the OpenServo. On such a board we would certainly want to retain the I2C interface capability so the end-user can use the more sophisticated features of the OpenServo software if they choose. An I2C or serial interfaces is critical for updating the control software or changing the motion control gains. The end result would be one killer servo for your customers.

What are your thoughts about putting some type of project organization around an effort to get an OpenServo-based board for your motor?

To come out with an OpenServo based solution suitable for a wider robotics audience, my thoughts are:

1. Implement standard servo PWM signalling to the OpenServo in addition to the existing I2C based signalling -- described above.

2. Define the H-Bridge requirements for the powerful motor you are using. I think there are some people in the OpenServo community who could help with some good suggestions. Also, do you have any goals regarding the dimensions of the control board?

3. Do you see your customers purchasing the motor/sensor and OpenServo pcb seperately or as a single unit? I can see it working both ways. I guess it's mostly a product issue for you.

4. Create a fairly simple PC application and hardware cable (probably plugs into a PCs parallel port) so that an end user can update the OpenServo firmware and control parameters with minimal fuss. Such a product would help the general OpenServo community as well as we are all using different solutions for communicating with our OpenServos over the I2C bus. Having a standard, general solution would certainly help newbies working with OpenServos.

-Mike
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Thu Feb 01, 2007 9:33 pm    Post subject: Reply with quote

"mpthompson" wrote:
Hi Jim,

Very nice indeed.

I'm certain you will be interested in getting as many of these servos in the hands of other robot developers. Right now, the OpenServo is controlled by an I2C bus which while suitable for implementing sophisticated features such as the curve following I described in other forum threads, but it isn't suitable for a large majority of the robotic hobbiest who will simply want to simply plug your servo/motor into a standard servo controller such as the SSC-32 you sell.


I do want to support both configurations. Very Happy We are working on an additional servo controller, Atmega 128 based with 24 channels. It will be a cross between a servo controller and our SSC-32. It will be open source and I intend to support the open servo I2C format. But it's going to be a while on that one.

"mpthompson" wrote:
My suggestion would be to leverage the 80% of the code in the existing OpenServo that controls motors with a fairly high degree of fidelity, but that we (Lynxmotion and the OpenServo community) work together to create a version of the OpenServo that is controlled with a standard servo PWM signaling. This would basically involve creating a software module in the OpenServo that will translate the pulse duration on an I/O port to a control value that controls servo position. Right now, position is controlled by discrete values sent over the I2C bus. There is plenty of spare I/O and compute horsepower to do this on the existing AVR ATmega168 in the OpenServo. On such a board we would certainly want to retain the I2C interface capability so the end-user can use the more sophisticated features of the OpenServo software if they choose. An I2C or serial interfaces is critical for updating the control software or changing the motion control gains. The end result would be one killer servo for your customers.


I agree completely. I'm not overly concerned that the device be able to fit inside a standard servo case though. The increased current draw may prohibit this anyway.

"mpthompson" wrote:
What are your thoughts about putting some type of project organization around an effort to get an OpenServo-based board for your motor?


That's exactly why I'm here. Wink

"mpthompson" wrote:
To come out with an OpenServo based solution suitable for a wider robotics audience, my thoughts are:

1. Implement standard servo PWM signalling to the OpenServo in addition to the existing I2C based signalling -- described above.


Yep!

"mpthompson" wrote:
2. Define the H-Bridge requirements for the powerful motor you are using. I think there are some people in the OpenServo community who could help with some good suggestions. Also, do you have any goals regarding the dimensions of the control board?


I was thinking it could be attached to the back of the motor with a header to connect the pot wires to, but I'm open to suggestions.

"mpthompson" wrote:
3. Do you see your customers purchasing the motor/sensor and OpenServo pcb seperately or as a single unit? I can see it working both ways. I guess it's mostly a product issue for you.


I try to offer every sub component seperately for every product I dream up. It's my intention to do it with this as well. Very Happy

"mpthompson" wrote:
4. Create a fairly simple PC application and hardware cable (probably plugs into a PCs parallel port) so that an end user can update the OpenServo firmware and control parameters with minimal fuss. Such a product would help the general OpenServo community as well as we are all using different solutions for communicating with our OpenServos over the I2C bus. Having a standard, general solution would certainly help newbies working with OpenServos.

-Mike


Would serial port work for this? At least the new PC's can use the USB to serial cables. Let me know if I'm a dummy on this.
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Thu Feb 01, 2007 9:48 pm    Post subject: Reply with quote

I only have a few of the motors right now, After I get an order of them in I should be able to divvy out some test platforms. Very Happy
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Thu Feb 01, 2007 10:06 pm    Post subject: Reply with quote

Quote:
Would serial port work for this? At least the new PC's can use the USB to serial cables. Let me know if I'm a dummy on this.


Well, certainly a serial port would work and actually be easiest for the end user. However, we would need to create a serial based bootloader as well as create additional software modules that replace the I2C protocol with a serial protocol. A hardware related issue is you would probably want to use an external oscillator/crystal that drives the AVR at a speed suitable for serial communciations (i.e. a clock that divides nicely into 9600, 56kb and 115kb speeds). Also, an RS232 level converter such as the MAX232 would be needed because getting TTL level serial is not easy from a PC.

If the end user is provided a cable that connects to a PC parallel port for bit-banged I2C, it probably isn't too bad a solution. I have seen USB to parallel solutons implemented on AVR ATtinyXX chips that could work as well. A USB solution such as this could be made for a few bucks and would drive the I2C bus for control/updates of a single OpenServo. Of course, this would be a more ambitious solution.

Quote:
I only have a few of the motors right now, After I get an order of them in I should be able to divvy out some test platforms.


Samples are always nice Smile.

Compared to switching the protocol from I2C to serial, getting standard servo PWM signalling should be much easier and quicker. Getting this working first would also help with working out and important control issues early on. Solving the serial issue could be a follow up project after successful control of the motor is proven.

-Mike
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
jamma



Joined: 30 Mar 2006
Posts: 24

PostPosted: Fri Feb 02, 2007 12:39 am    Post subject: Reply with quote

Jim:

I like the move to the more powerful motor. I've wanted to scale up the typical bi-ped for some time, which is one of the reasons I'm following this project. The system in your picture will be quite long and thin, though, making construction more difficult. Have you thought of putting the pot next to the gearhead, such that both shafts are pointing the same way? You'd need a little 1:1 pulley (or gear set), but you'd end up with a more compact package.

Ideally, you'd dispense with the pot altogether in favor of an encoder to make the lightest, most compact module possible. There was talk on this forum of modifying the code to work with an encoder. For cost purposes you might want to homebrew the encoder, the circuitry for which could probably be encorporated with the H-bridge on the expanded PCB.
Back to top
View user's profile Send private message
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Fri Feb 02, 2007 6:07 am    Post subject: Reply with quote

I did a some poking around the AVR ATmega168 specs and looked at what changes would need to be done to support servo pulse signaling using the OpenServo code base. Currently, we use Timer0 to drive the 10ms ADC sampling, Timer1 in 8-bit mode to drive PWM output to the motor and Timer2 is unused.

For position control we support 10-bits of resolution -- 0x000 to 0x400. We therefore should measure the 1ms to 2ms pulse duration from a servo controller with 10 or more bits of resolution. To do this we would need to utilize ICP1 (pin 12 - unused) with Timer1 configured to measure the duration of the pulse with 16-bit resolution. With Timer1 used for pulse measurement, we then would need to shift PWM output to Timer0 driving OC9A and OC0B (pins 9 and 10 - unused) and outputs OC1A and OC1B (pins 13 and 14) from Timer1 would then be unused. For ADC sampling we would switch to Timer2. Unfortunately, ADC can't be auto triggered from Timer2 (only Timer0 and Timer1) so we would have to trigger ADC samples in an interrupt handler which isn't too big of a deal. We could swap Timer0 and Timer1, but then there are conflicts between OC2A and MOSI on pin15 which should probably be avoided.

These are enough changes that a prototype circuit would probably make sense before committing a lot of work to an updated schematic and PCB design. The prototype could be done on STK500 to validate servo pulse measurement and timer swapping doesn't hurt things. Or, with microsurgery on an OpenServo 2.1 board, pin 14 could be jumpered to pin 9, pin 10 jumpered to pin 13, and pin 12 brought external on a wire for the pulse control from a standard servo controller. A 2.1 board can't drive the big motors, but could be at least used to validate the software changes on a small servo. The good news in this is that a PCB board could probably be designed to support 2.1 code or 3.0 code -- if that is desireable.

These are also enough changes that certain source files will get pretty cluttered with a lot of #ifdefs and we would probably want to restructure the source a bit.

-Mike
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Fri Feb 02, 2007 5:41 pm    Post subject: Reply with quote

"jamma" wrote:
Jim:

I like the move to the more powerful motor. I've wanted to scale up the typical bi-ped for some time, which is one of the reasons I'm following this project. The system in your picture will be quite long and thin, though, making construction more difficult. Have you thought of putting the pot next to the gearhead, such that both shafts are pointing the same way? You'd need a little 1:1 pulley (or gear set), but you'd end up with a more compact package.

Ideally, you'd dispense with the pot altogether in favor of an encoder to make the lightest, most compact module possible. There was talk on this forum of modifying the code to work with an encoder. For cost purposes you might want to homebrew the encoder, the circuitry for which could probably be encorporated with the H-bridge on the expanded PCB.


On the layout of the motor and pot. I said the following in my second post. Perhaps you missed it.

"Jim Frye" wrote:
This is just the first implementation of the servo. I'm designing it specifically for the shoulder in a robot arm. I will also look into other configurations where the pot is moved to the same side as the motor and is connected with a set of gears. After this I am planning a larger version using a 32mm motor.


I feel so silly quoting myself. Very Happy hehehe

On the encoder issue. I have found a really cool solution from USDigital. The MA2-A... It's a no contact absolute positional encoder with an analog output. It's not expensive compared to high resolution quadrature encoders, but at $29.00 it's a bit much for a hobby servo. I'm keeping the option available as this is looking less like a hobby device as it evolves. I am experimenting with a totally new method of creating an absolute encoder, but the details will remain a secret for now. If it works it will be very inexpensive and very accurate. Very Happy
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
Jim Frye



Joined: 16 May 2006
Posts: 14
Location: Middle of nowhere, Illinois

PostPosted: Fri Feb 02, 2007 5:43 pm    Post subject: Reply with quote

"mpthompson" wrote:
I did a some poking around the AVR ATmega168 specs and looked at what changes would need to be done to support servo pulse signaling using the OpenServo code base. Currently, we use Timer0 to drive the 10ms ADC sampling, Timer1 in 8-bit mode to drive PWM output to the motor and Timer2 is unused.


Wow that looks complicated. I'm no programming genius that's for sure. Let me know if there is anything I can do to help with the prototyping or anything else. Thanks! Jim
_________________
Jim Frye, the Robot Guy
Lynxmotion, Inc.
home of the Servo Erector Set
http://www.lynxmotion.com
Back to top
View user's profile Send private message Visit poster's website
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Fri Feb 02, 2007 6:26 pm    Post subject: Reply with quote

Jim,

I think there are three distinct steps to a working servo based on your hardware configuration.

The first step is making sure that we can fit some type of pulse measurement into the existing AVR ATmega168 infrastructure with minimal side effects to the existing OpenServo features. I outlined the requirements for this in my previous posting and this is mostly a ""simple matter of programming"" to build a working OpenServo controlled from a standard pulse driven servo signal.

The second step is coming up with a suitable H-Bridge design for your motor. The primary requirement is that it can be driven by PWM signaling from the AVR microcontroller. This may require the microcontroller PWM outputs drive FETs or power transistors which in turn drive the FETs that implement the H-Bridge for your motor. Do you already have a design in mind? If not, hopefully we can get some feedback in the OpenServo community on how best to design a working H-Bridge for your motor. Then we'll need to build a prototype H-Bridge circuit which is certainly something you could help with. We could then drive the prototype H-Bridge from existing modified OpenServo boards such as those readily from Jay to prove that we have a functioning servo.

The third part is to then consider what other things need to be added to come up with a practical servo solution for end users. This includes making a final PCB design based on the prototypes, making a final determination on how an end user would update and tune the servo software from their PC, etc...

I'm certainly willing to take the lead with the first step as I think that pulse driven servo control of the OpenServo is important in and of itself. I'll be off for two weeks of vacation in the middle of February, but I'm fairly confident a working software prototype could be created by the end of February. If I burn the midnight oil I may even be able to get this done before I leave on February 10th.

For the second step, the H-Bridge, I would have to know what resources you already have to drive your motor to make any estimate. If you have a working H-Bridge design already I would suggest getting a number of prebuilt OpenServo boards from Jay and pulling the PWM signals from it to drive your H-Bridge with the existing OpenServo software. It won't be pulse driven, but it will prove that motor/potentiometer/h-bridge/openservo combination will indeed work for you. Also, it sounds like you may already be ready for AVR development through other products you offer. However, if not, it's going to be important that you or someone you work with be able to build the OpenServo software and you have the pieces necessary to update the OpenServo firmware as needed.

Steps one and two can also be done concurrently so it may be reasonable to expect both steps to be finished by the end of February. The second step is the unknown for me at this time.

Finally, the third step will have to be done after a functioning prototype from the first two steps are complete, but planning can take place early on. The timeline for this final step will be driven by how you want to productize your hardware/OpenServo combination and what, if any, additional software/hardware features need to be developed.

Hopefully it's a bit more clear the things you can do and what others might do to help move things along.

-Mike
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
robotjay
co-admin


Joined: 01 Aug 2006
Posts: 225
Location: Nebraska, USA

PostPosted: Fri Feb 02, 2007 6:54 pm    Post subject: Reply with quote

Mike,

As far as a working H-Bridge goes, I believe that the IRF7389 MOSFET is a drop in replacement for the IRF7309's we are currently using. The current rating on the 7389 is 5.3A. Which is more than enough for Jim's motor, and even enough for a LOT of other motors.

As far as everything else you've said in this post, you are right on the money, and I love where we're taking the OpenServo. The concept of making this both Serially controllable AND PWM controllable is key to gaining popular acceptance. I'll be using my newly acquired STK500 (thanks, Mike!) to see what I can do to get PWM support on the ATMega168. I am hoping that we can just use the SDA line on the existing boards I have as the PWM signal line. I'll start a new thread about that.

I've e-mailed Jim about bulk production, and I hope he gets back to me about that. This whole project is starting to get very exciting, because I feel like we are on the verge of a major break-through, and hobby robotics is about to get a big boost from what we're doing. Keep up the good work everyone!

-Jay
_________________
"Nothing is fool-proof; For we fools are ingenious and will find a way."
Back to top
View user's profile Send private message Send e-mail Visit poster's website
mpthompson



Joined: 02 Jan 2006
Posts: 650
Location: San Carlos, CA

PostPosted: Sat Feb 03, 2007 6:18 am    Post subject: Reply with quote

Jim, if you haven't spotted it already, in the thread linked below I describe the implementation of servo pulse signaling control of an unmodified OpenServo I just coded. The ideal solution would use 16bit Timer1, but with some interrupt handling I got Timer2 functioning well enough to measure a pulse duration with the needed resolution.

http://www.openservo.com/forums/viewtopic.php?t=327

The implementation will need some clean-up, but it's a step forward for the OpenServo to be controlled with standard servo pulses.

-Mike
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
Display posts from previous:   
Post new topic   Reply to topic    OpenServo.com Forum Index -> Hardware All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group