Well, the servos are actually gear motors. I took the guts out and made new circuit boards so they can be controlled by a serial line. I used back EMF to control the speed and get full power at slow speeds. I also took the original Penguin servos and made new boards for the inside of them so they run on the same serial line, and only require a go-to position command, (speed and ramp up/down back EMF etc) so that freed up a ton of pbasic space. All the servos and gear motors run off of one serial line. It really was a project that got out of hand.
Oh, and no I don't have a CNC machine. I ordered the pieces made, so ... with minimum orders and all I could now make about 30 pairs of feet and a few hundred of the digital servo and gear motor controllers.
Interact: Wow,·looks fantastic! All sorts of cool tilt/stride/spin motions are now possible with your design. Love to see a Youtube video if can post something!
erco
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ ·"If you build it, they will come."
Interact said...
Well, the servos are actually gear motors. I took the guts out and made new circuit boards so they can be controlled by a serial line. I used back EMF to control the speed and get full power at slow speeds.
Wow! That's quite a tour de force, in addition to being a beautifully-executed design! Would it be asking too much to share your motor drive circuit with us? Firmware, too?
This is a project that I left in an “almost” finished state 9 months ago. The rest of the year I am traveling (athlete) and never have time for things I can’t take with me. I am trying to get back into it, and having a hard time plugging my head back into where I was. I cant even find my AVR ISP programmer. As I remember, the gear motor firmware I was happy with, and amazed at how slow the motor would turn at full power. The back EMF control was a very satisfying thing to implement. The servo firmware was still a bit jittery at the extremes of its range and I remember starting over with the code several times, and never really finalized that code. I wasn’t really sure how to post the project because of all the elements covered.
On top of that, I have a laser range finder that works in conjunction with a small camera like the CMU cam. And the previously posted ouled attachment. That laser range finder has been now modified to test for water turbidity.
For the control instructions I tried to follow already accepted protocol and came up with:
;
Instruction Decode subroutine
;
; First Byte Sent:· = 1000 0000 = Start Byte. (bit7 = 1 is a start byte).
;
; Second Byte Sent: = 0BBB BBBB = Motor Number (0-127).
;
; Third Byte Sent: = 0001 0000 = Motor: Brake
;···························0001 0001 = Motor: Forward
;·························· 0001 0010 = Motor: Reverse
;···························0001 0011 = Motor: Program Motor number, with fourth byte.
;·························· 0001 0100 = Motor: Calibrate motor.
;·························· 0001 0101 = Motor: Reset.
;·························· 0001 0110 = Motor: Clear LED Pin.
;·························· 0001 0111 = Motor: Set LED Pin.
;·························· 0010 0000 = Servo: Turn Off servo.
;·························· 0010 0001 = Servo: Move to position of fourth byte.
;·························· 0010 0011 = Servo: Program Servo number, with fourth byte.
;·························· 0010 0110 = Servo: Clear LED Pin.
;·························· 0010 0111 = Servo: Set LED Pin.
;·························· 0xxx xxxx = All other values = NoOp.
;
; Fourth Byte Sent: = 0BBB BBBB = Servo: Position (0-127).
;···························· 0BBB BBBB = Servo: Number to program as Servo number.
;···························· 0BBB BBBB = Motor: Speed.
;···························· 0BBB BBBB = Motor: Number to program as Motor number.
;
; Fifth Byte Sent: = 0BBB BBBB = Servo: Ramp (0-127). All back EMF
;··························0BBB BBBB = Motor: Ramp (0-127). 0=no back EMF
; InstCntr = 0 - Ready for Motor Number byte. (Start byte done).
; InstCntr = 1 - Ready for Insrtruction byte.
; InstCntr = 2 - Ready for Position or Speed byte.
; InstCntr = 3 - Ready for Number to program as Motor number byte (to store in EEPROM).
; InstCntr = 4 - Ready for Ramp Byte.
; InstCntr = 20 - Not Ready for anything but a start byte.
The new feet look very cool and the job you did on this project is
very amazing! To be of maximum benefit to Penguin owners, and
to fully document this exceptional project, you could post details/
schematics/full code in the Project Forum.
Comments
Next Penguin has an extra free I/O for projects like this one, so it'll be easier to get the two I/O pins.
Make these on a desktop CNC, or full size? Great effort and nice results.
Ken Gracey
Parallax, Inc.
erco
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
·"If you build it, they will come."
-Phil
On top of that, I have a laser range finder that works in conjunction with a small camera like the CMU cam. And the previously posted ouled attachment. That laser range finder has been now modified to test for water turbidity.
For the control instructions I tried to follow already accepted protocol and came up with:
;
Instruction Decode subroutine
;
; First Byte Sent:· = 1000 0000 = Start Byte. (bit7 = 1 is a start byte).
;
; Second Byte Sent: = 0BBB BBBB = Motor Number (0-127).
;
; Third Byte Sent: = 0001 0000 = Motor: Brake
;························ ···0001 0001 = Motor: Forward
;························· · 0001 0010 = Motor: Reverse
;·························· ·0001 0011 = Motor: Program Motor number, with fourth byte.
;············ ·············· 0001 0100 = Motor: Calibrate motor.
;············· ············· 0001 0101 = Motor: Reset.
;·············· ············ 0001 0110 = Motor: Clear LED Pin.
;··············· ··········· 0001 0111 = Motor: Set LED Pin.
;················ ·········· 0010 0000 = Servo: Turn Off servo.
;················· ········· 0010 0001 = Servo: Move to position of fourth byte.
;·················· ········ 0010 0011 = Servo: Program Servo number, with fourth byte.
;··················· ······· 0010 0110 = Servo: Clear LED Pin.
;···················· ······ 0010 0111 = Servo: Set LED Pin.
;····················· ····· 0xxx xxxx = All other values = NoOp.
;
; Fourth Byte Sent: = 0BBB BBBB = Servo: Position (0-127).
;······················ ······ 0BBB BBBB = Servo: Number to program as Servo number.
;······················· ····· 0BBB BBBB = Motor: Speed.
;························ ···· 0BBB BBBB = Motor: Number to program as Motor number.
;
; Fifth Byte Sent: = 0BBB BBBB = Servo: Ramp (0-127). All back EMF
;························· ·0BBB BBBB = Motor: Ramp (0-127). 0=no back EMF
; InstCntr = 0 - Ready for Motor Number byte. (Start byte done).
; InstCntr = 1 - Ready for Insrtruction byte.
; InstCntr = 2 - Ready for Position or Speed byte.
; InstCntr = 3 - Ready for Number to program as Motor number byte (to store in EEPROM).
; InstCntr = 4 - Ready for Ramp Byte.
; InstCntr = 20 - Not Ready for anything but a start byte.
Post Edited (Interact) : 1/15/2009 5:08:47 AM GMT
very amazing! To be of maximum benefit to Penguin owners, and
to fully document this exceptional project, you could post details/
schematics/full code in the Project Forum.
humanoido
Jax
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
If a robot has a screw then it must be romoved and hacked into..
Anyone still using their Penguin ?