Mike's 6-Axis Articulated Robot

Did a bit of researching last night on the encoders for these motors and I see an issue brewing if I ever want to run these on my Allen Bradley servo drives.

The Allen Bradley Kinetix 2000 is a modular drive platform that supports Tamagawa 17-bit serial (sort of). Specifically it supports Tamagawa TL5669 series encoders with 17-bit single turn data (131072 counts/rev) + 16-bit absolute multiturn data (4096 revolutions rotary or +/- 2047 revolutions linear). In addition, the motor must be properly programmed with a "blob" file or a chunk of data that is saved on the encoder and allows the drive to self-identify the motor against an entry in the database. Unprogrammed motors or motors with data not in the database are not allowed. I do have experience manipulating a custom motor file (CMF) to add a valid entry to the database, but never got it to work quite right; for unrelated reasons I believe. I do not have, nor have ever seen, a breakdown of all the values in the blob data. This would be a major challenge to decode and manipulate. Again, the SERCOS environment (the family of drives containing the Kinetix 2000) was never designed to be open to 3rd party devices at all. I also have no clue how one would even program these encoders. This might be done at the factory and not be possible by a user.

1643985831859.png
1643985859767.png

My motors have Tamagawa TS5643N151 encoders. I can't find exact data on these yet, but it looks like they might be 11-bit per turn (2048 counts/rev) + 13-bit absolute multiturn data. These motors will either have an unprogrammed "blob" file, or they will have one programmed to talk with the RC3-V6A robot controller.

1643985825073.png

The Panasonic series of motors I have, when the default "S" encoder is selected, advertised 17-bit encoders (no mention of absolute multiturn range). I had hoped these might be 1:1 compatible with my servo drives, but I know now that it won't be that easy. The DENSO part number has a "Q" (custom selection) in the encoder spot of the part number which makes me think they selected a non-standard encoder option.

One solution I am brewing up in my head is to insert a microprocessor between the encoder and the drive. This could read the 11-bit data packet and reformat the whole thing to look like a data packet that a 17-bit encoder would have put out. It could probably even insert blob data without needing to program the encoder. This microprocessor would then send that new packet to the drive. I theorize that if I am careful with the packet structure and quick enough in manipulating the data, the drive would never know there was a mismatched encoder on the other end. This is the same idea as my feedback interface boards for my last robot (pic below), but a completely different implementation.

image046.jpg

Of course this is all a moot point if Panasonic doesn't wish to share their motor parameters with me. I emailed them yesterday and have my fingers crossed. Replacing the motors isn't really realistic as I would be spending several hundred dollars per axis (times 6!).


EDIT: One additional thought... The closest match to the TS5643N151 encoder on Tamagawa's website advertises 11bit/turn and 13bit/Multi-Turns, Incremental 2,048C/T. The number of encoder wires exiting the motors on the robot was quite a few more than the 7 wire interface advertised for the serial only interface. I think that this is because the encoders not only put out serial data but also incremental AQB tracks. If this is the case, then there also could be a unique opportunity to run these motors are generic TTL incremental encoders. I could do the Wake N' Shake self sensing commutation, or add a board between the motor and drive which uses the serial data to initialize the hall effect commutation signals to the right angle for AQB + Halls feedback. I might even be able to message the absolute position data to the PLC somehow outside of the drive interface and run the motor incrementally after the initial absolute position startup sequence. I think I'd like to try to stick to pure serial, but this gives me options which is good.

Thinking more, I'd guess this is how the RC3-V6A controller talks to these motors. One serial message to pull the absolute position data, and then only AQB incremental after that.
 
Last edited:
I've also come up with what I consider to be a minimum viable system for the original robot RC3-V6A controller. Bold indicates I own or have a path forward on the item already.

1643986625418.png

  1. Robot - have it
  2. Motor Cable - I can build myself
  3. Encoder Cable - bought one on eBay really cheap
  4. Power Cable - bought the parts to make one
  5. Step Down Transformer, 240/208, available for around $100 on eBay
  6. Teach Pendant - have it
  7. Robot Controller - have it
  8. Teach Pendant Cable - missing and not available online. Will need to build.
  9. Initialization Floppy Disk - missing. Will ask DENSO to sell disk or provide parameters for entry by Teach Pendant
  10. Programming Manual - Hoping DENSO can provide. I would expect they would. Some programming info is in the manual I have
  11. Encoder/Controller batteries - Generic 3.6V batteries available online. I can replace the batteries with new ones.
  12. CALSET Data - I believe I have this from a sticker on the robot.
  13. J6 Mastering Fixture - missing. Might be able to machine my own, or make a new design and generate my own J6 CALSET data. Not important.
Assuming the controller is not busted for some unknown reason, I need to buy a couple things, make a few cables, get a manual from DENSO, and get the critical parameters for the controller from DENSO. Really seems somewhat doable - I hope.
 
Last edited:
Little update. I found and purchased a replacement motor for that damaged one. It should be a 1:1 replacement but we will have to see. There were extremely few options (this was the only US based seller) and the going price seemed to be around $600-800 for a used motor. I got mine on best offer for a bit over $100. That hurt, especially since I just bought the robot, but I know it was a good price. It is in the mail now, and I'll make a post about installing the new motor when it arrives.

1644251463018.png

Alright. After digging through the bowels of the internet, I've managed to scrounge up some specification documents on the encoders inside my motors. One of my goals is to control this robot with some Kinetix 2000 AC Servo drives. In order to do this, I will definitely need to do some hackery with the encoder interface to maybe get the drives to accept the motors.

These encoders are a bit strange if you've only worked with standard optical or magnetic encoders before. These encoders are still optical transmissive, but they have 11 tracks on them producing 2048 unique readings per revolution (encoder reads binary, so 2^11 = 2048). This is called the single turn data and it can be read at any time without the need for homing or even battery backup. This encoder also has a special circuit that counts the number of full revolutions completed any time it is powered up or on battery backup. This is the multiturn data and mine can track 13 bits or 8192 revolutions (+/-4096). This data can only be maintained while the encoder is powered, hence the need for the battery backup. The encoder enters a low power sleep state when operating on battery only and will still track motor motion but only up to 6000rpm.

Check out the code wheel!

1644244265881.png

Rather than streaming the data in real time, the encoder saves the data to memory and responds to serial message queries. The options are to read the position data, write to EEPROM, read from EEPROM, and read extended statuses. The information for exactly how this interface works varies in detail from manual to manual, but with all the different sources of info I have found, I think I understand roughly what is going on. Check out the serial specification for the position data.

1644245030510.png
Alright, so where am I going with this. Well the bad news is that this data is NOT what my servo drive is looking for. Unfortunately the Kinetix 2000 servo drive is only designed to talk with a TS5669N124 encoder inside an Allen Bradley TLY motor. This encoder is a 17 bit serial encoder with 16 bits of multiturn data. The serial data format is a bit different to accommodate the extra data length. So if I want to be able to get my motors running on these drives, I need to manipulate the serial data from my motors on the fly to reformat it into the data expected by my servo drives.

Fortunately because this is serial, I don't expect it to be impossible. A microprocessor with proper transceivers should be able to collect and relay the serial message from the encoder to the drive, manipulating the data as needed. The question will be if there is sufficient time to do so between sequential reads. I do not know the frequency of data requests from the drive, but I wouldn't expect it to be any faster than say 250us. A full frame transmission, per the spec above is 84us, although adding more data for the 17-bit format might stretch that out. That gives roughly 80us to read the serial buffer, perform the necessary operations, and begin transmitting the outgoing packet to the drive. The drive might also have timeouts which limit the response time of the encoder further. A demanding application but not feeling impossible.

The TS5669N124 encoder specification (the encoder designed to work with the servo drives I have) has a lot of detail on the EEPROM memory which can be used to store motor data. The specification for the TS5643N151 encoder (I actually only have the spec for a TS5643N100) does not have detail on these functions. This might mean that my encoder does NOT have EEPROM memory. If this is the case, then my application gets more demanding as my serial interface must then interpret the incoming request from the drive and identify if EEPROM data is requested. If so, I could inject a fake EEPROM response directly from the microprocessor without needing to send the request to the encoder itself.

Still waiting to see if Panasonic will share the motor characteristics with me. Both this information and the encoder interface must work to run these motors. I could substitute an incremental only option, thanks to the extra incremental tracks on my encoder, but that brings with it issues of commutation and homing (remember my robot does not have home switches).

Motor commutation is a remaining mystery. I do not see anything related to the encoder which indicates how commutation is accomplished. I'm guessing that Allen Bradley motors have their single turn data zeroed right at the commutation transition between two specific phases and that data is maintained for the life of the encoder. If this was done at the factory, then all motors would have a 0 degree commutation offset. Only the non-battery backed singe turn data would be needed to get the commutation angle. The TS5669N124 motor has documented commands for zeroing the single turn data, my TS5643N151 does not seem to have this function.

EDIT: Another data point that suggests that these encoders might have different functions and capabilities is the control chip part number difference. The Panasonic motor encoder TS5643N151 uses the Tamagawa ASIC AU5660. The Allen Bradley motor encoder TS5669N124 uses the Tamagawa ASIC AUA5262.
 

Attachments

Last edited:
Been working away at cleaning the robot for a few days now and just ran out of Goof Off (the only thing that takes off the overspray). I decided to open up the mechanics a bit, as knowing the gear ratios within the arm is very important to getting this running on a Rockwell PLC down the road.

I started on the J6 tool platter since this axis was already partially disassembled due to the bum motor. I took 8 long bolts out of the flange at the end of the robot, but left 4 short bolts held the two halves of the harmonic drive assembly together. This entire assemble then slid out of the end of the arm (after getting past a pretty tight O-ring gasket).

image026.jpg

image031.jpg

This revealed a Harmonic Drive brand SF14-50-921826-4 harmonic drive gearbox. Here is the closest match to an active product today: https://www.harmonicdrive.net/products/gear-units/gear-units/csf-2uh

The grease is sitting inside the Flexspline with the ring gear around the outside (the part the bolts go into). The "50" in the part number indicates this gearbox has a 50:1 reduction ratio.

image033.jpg

Here is the wave generator. A super thin race bearing pressed onto an elliptical hub. As a motor turns the elliptical hub, the outer race of the bearing flexes with a wave traversing it. This drives the flex spline into two lobes of engagement with the ring gear. Wikipedia has a good article on it: https://en.wikipedia.org/wiki/Strain_wave_gearing

image032.jpg

Removing bolts from the bevel gear driving shaft allows the J6 bevel gear module to slide out the side. There was a satisfying pop of a tight tolerance bore and an airtight cavity behind it.

image027.jpg

Looking inside this bore, you can see a depression in the grease that matches the bevel gear I just removed, as well as the mating bevel gear, visible coming in from the left of the bore. These gears each have 20 teeth and only serve to change the direction of the rotary motion to line up with the J6 harmonic drive.

image029.jpg

This J6 driven pulley that goes into the bevel gearbox rotates with the nod of the wrist (J5 motion). This means that if the J5 motor is rotated and J6 motor is not, both joint 5 and joint 6 will rotate. This is known as differential coupling and makes the job of the software guy (me...) a bit trickier since J6 motor must track the geared down motion of J5 any time motion on J6 is not desired. Fortunately, this is the only example of this coupling on my robot. Some types of 6 axis robots place all the wrist motors (3-4) on the elbow and drive the mechanics with shafts, gears, and belts. This is done to get as much weight away from the end of the arm as possible, but greatly complicated the control issues with coupled kinematics.


Anyways, this post got long, I'll do another one for J5 and J4. I will also update the first post with the new information about the mechanical elements.
 
Alright, so J5 and J4 look quite similar to J6.

The J5 harmonic drive is driven by a wave generator mounted on a bearing block at the end of the arm. The motor (bottom left) is belted to this with a 1:1 ratio timing belt. Removing 9 bolts let me pull out the wave generator.

image054.jpg

This exposed the flex spline cup attached to the swiveling wrist. The Harmonic Drive part number was lasered on the ring gear: HS14-80-921773-5. This is an 80:1 reduction. Notice the smaller teeth around the perimeter of the flex spline and ring gear compared to the J6 pictures. I got some of the extra grease worked into the bearings and teeth, then bolted it back together.

image036.jpg

The J4 harmonic drive is located at the very rear of the elbow. It drives a shaft which in turn rotates a large crossed roller bearing slew ring about midway down the upper section of the arm.

image038.jpg

Again, removing the wave generator bearing block revealed the ring gear with the lasered part number: HS14-80-921773-14. This is also an 80:1 reduction. Everything was greased and reassembled.

image042.jpg

Here are 2 shots of the wave generator. It is hard to see, but the thin bearing race (somewhat copper colored) is elliptical. Looks very strange since you think of bearing races as being amazingly circular. That outer bearing race is pressed lightly into the flex spline. The entire inside section rotates at the motor speed, while the bearing race and flexspline rotate at the 1/80th reduced speed. Since there are no rolling elements, there is no need for backlash in the mechanism and it can attain near zero backlash measurements.

image044.jpg

image045.jpg

Popping open the robot base showed a mess of wire colors. The good news is this gave me a lot of clues as to what all the colors mean. Would still really like a pinout for the connectors.

The encoder backup battery is normally velcroed to the top of that metal case. I have it removed to see if I can get a replacement or build my own.

image046.jpg
 
Got the robot encoder cable in the mail today. $35 shipped and brand new. I couldn't make it myself for that price.

image055.jpg

I figured out what the connector on the teach pendant is (I hope!). It is a very obsolete Hirose Electric 10 pin connector. Could only find it for sale in the UK, so I bought one - will likely take a bit to get here. Hirose RM15TP-10S. My understanding is this is a RM product family, shell size 15, threaded plug, 10 pin, female sockets, solder cups.

1644360900012.png

Here is the receptacle on the teach pendant.

image056.jpg

I opened up the teach pendant to see what was inside:

image057.jpg

Found it interesting that the keypad is a flexible plastic sheet over real buttons, rather than a membrane keypad. Feels funny to use compared to stuff today, but I bet it is bullet proof.

image058.jpg

Under the keypad is the main board. It consists of a Hitachi H8/325 "Microcomputer", a serial line driver, and some resistor networks used to read the buttons. A deadman switch on the side is required to jog the robot.

image060.jpg

I still have had no luck finding an original teach pendant cable or motor power cable. I'll likely be building my own. The motor power cable will need to be 18AWG with at least 23 conductors, but 25 is much more common. A shielded cable would be preferable. IGUS makes some nice high conductor count control cables perfect for this application. The one I think is best runs about $5.50 per foot, or $100 to match the length of the encoder cable (6m). Ouch! CF881-07-25 is the part number. Add in the cost of the connectors at each end too. I'll need this regardless of if I use the original control or my own drives.

1644361443839.png
 
Great news! The replacement motor arrived today. The Denso part number is different due to it having a different drive attachment for a different robot.

image062.jpg

The motor shaft was an exact match, which I could not confirm before buying.

image063.jpg

Got the original hardware installed. The encoder connectors are a different color plastic, but have the same encoder wire colors, same pinout, and same series connector. I think it is an exact match. Kinda don't want to open it up to check the encoder since it is currently water resistant.

image064.jpg

The motor fit back in just where it was supposed to. Belt was tensioned to "finger tight".

image065.jpg

Back of the motors is visible from the J5 motor/gearbox side. A longer motor with a brake (my only other option) would not have fit.

image066.jpg

And the arm with all the belt and wrist covers back on! Mostly done cleaning this part, still need to do a lot of cleaning on the lower sections.

image067.jpg
 
I have been accumulating questions for DENSO, Panasonic, and Tamagawa. I finally decided to polish up some emails and send them out. Have heard nothing back from Panasonic or Tamagawa, however there is one US based support engineer for DENSO that has been answering my emails. I sent him a book and he said he was willing to help get the info I needed, although it will take several weeks. This guy is awesome!

Anyways he started by sending me an extra manual which I didn't have before. Apparently this robot was made on December 6, 1999. They were probably pushing all the robots out the door that they could before the Millennium Bug took them down :D

This was manufactured with software version 9.57. This came with a number of added functions and benefits over the base model. This new document (attached in 3 parts) highlights the features of this higher version of software.

I haven't read the whole document yet, but I did pick out one interesting tidbit.

A new "inching" function was added which moves the robot, what I am assuming, is one encoder count at a time. This is neat info because I think I can calculate the gearbox ratios from it.

1644503615082.png

Using joint 5 as a known example, the control receives 2048 pulses per rev (depending if this is counts or pulses, we might be off by a factor of 4). Divide the circle by this amount and that's 0.175781 degrees per pulse. We know this goes through an 80:1 gearbox, so we divide this number by 80. This is 0.002197 degrees per encoder pulse at the wrist (after the gearbox). OK let's bring in that factor of 4 again, and we get 0.000549 degrees per count (x4 quadrature interpolation). That's the published number!!

OK so lets look at this again. Since all the motors have the same encoder (likely), then J2 and J3 have 80:1 gearboxes.

Lets calculate J1. So (((360/2048)/x)/4)=0.00044. Then "x" (the gear ratio) is 99.88:1. Accounting for rounding and truncation, we know this means the J1 gear ratio is 100:1! We can double check by just comparing ratios. (0.00055/0.00044)*80 = 100

This was cool!
 

Attachments

Last edited:
Quick update. Had a pretty productive weekend on this project.

While messing around with this unit, I noticed there was a small yet noticeable click or a small bit of movement from the J2 shoulder joint when I pushed on it. This joint should be really stiff and the gearbox should have no backlash, so I decided to investigate.

The motor was easily removed with (4) allen head cap screws. That distinctive butter yellow grease is everywhere. Although I immediately noticed this gearbox has a significant amount of brown/copper colored staining around the wave generator and the flex spline teeth.
image068.jpg
image069.jpg

The part number on the gearbox is 25-100-9921494-17. This indicates a 100:1 gear reduction. Strangely this does not match what I estimated from my previous post. I trust the gearbox part number more than manufacturer documentation.

image071.jpg

The wave generator was held onto the motor shaft by a locking screw and cap on the end of the shaft. Once removed, the wave generator was a snug slip fit on the shaft. This motor has an electromagnetic holding brake so I cannot rotate the shaft by hand.

image072.jpg

Once I removed the mounting ring, I could see nearly 3/4" of dried up grease and lots of dark coppery material. Yuck

image074.jpg

And double yuck. There is the wave generator. The bearing was incredibly gritty and full of mud brown junk. This was heartbreaking since replacement gearboxes (even from eBay) cost more than I paid for the whole robot.

image075.jpg

I started cleaning with lots of paper towels and WD-40. Hours later, I got the wave generator all cleaned up. Amazingly, this seems to be OK. The bearing is very smooth, and a visual inspection of the raceways under magnification doesn't show obvious signs of spalling, galling, or bad wear. The balls are a little less than mirror finish, but that's to be expected from a 23 year old machine.

image081.jpg

I also removed all the excess grease from the flexspline cup and anywhere else I could reach. I would have liked to remove the entire flexspline cup to clean the teeth and the teeth on the ring gear, however, after removing all 8 bolts, it was still stuck in the cavity incredibly tightly (it had 6 slip fit pins, a tight locating boss, and the mesh of the gear teeth). I gave up and spent an hour straight flushing the teeth with spindle bearing oil. The oil eventually was running pretty clean, slightly brown but no grit, so I called it good.

image082.jpg

I wanted to buy the original grease MULTEMP AC-N (Lithium grease with diester oil and moly), but this is a high end grease from Japan and I couldn't easily find it for sale. One reference showed a price of $950 per 5kg hand packing pail, so probably not worth it. I found a generic lithium soap grease with moly and graphite additives which I hope is chemically compatible with the remnants of the existing grease. That's on order right now. The greasing passages on this are impressive and should permit greasing of all wear components in the gearbox, plus flushing of old grease, in a single shot port.

Edit, After reinstalling, the click is gone and while there may be a slightest smidge of movement in the joint, it is likely from the small amount of play in the motor brake. This is perfectly acceptable for use and will not cause any issues.

I should probably open up and clean all the other gearboxes too...
 
Last edited:
Quick side post on the harmonic drive

Here is wave generator of the gearbox. The steel core is ground in the shape of an ellipse and has a thin walled high compliment ball bearing pressed over it, deforming into an ellipse itself. How would you manufacture this to ultra precision tolerances? This same gearbox was used on the Apollo lunar rover.

image076.jpg

The back side has a pair of precision slots milled and ground into it.

image077.jpg

These match to a steel disk with some sort of dry lubricant PVD coating on it. There are precision ground pads and dogs on this component.

image078.jpg

The aluminum hub fits the dogs on the other side of that steel disk. Note that the dogs are 90 degrees rotated to the ones on the other side in the previous picture. This is the coolest and most unexpected feature of the unit. It is an integral oldham style shaft coupler to account for radial misalignment between the motor and gearbox. The aluminum part floats inside the wave generator and has a small amount of radial travel. Thanks to the tight fitting slots in the coupling, there is no rotational play.

image080.jpg

On the front, a shim pack and bronze washer preload the oldham coupling mechanism and are held in place by a retaining clip. All super compact. A really innovative design.

image081.jpg
 
Back
Top