by latchup » Thu Sep 20, 2007 4:53 am
by latchup
Thu Sep 20, 2007 4:53 am
Thanks very much for the answer, Fritzod. (You were right, I knew most of that by the time.) So according to the number of replies, the digital servo protocol doesn't seem to be that intersting after all? Then I will continue the thread by myself with a summary of what I've learned so far on the different topics.
(1)
While the 0xE? commands work fine for the 8598, the 0xF? commands don't work at all or return garbage. (Note that the HMI Servo programmer uses 0xE6 to set the target position, and so continuously produces framing errors.) Unlike Fritzoids statement the replies to all 0xE? commands seemed relyable in my tests.
(2)
The speed reduction increases with increasing readout frequency, no further investigations.
(3)
The motion control mechanism seems to be divided in two modules: A trajectory generator, which generates a multi-point trajectory with constant speed, and a PD-controller, which sets the driving pulsewidth according to the deviation from the actual trajectory point (independent from speed). You can read the actual trajectory set-point from memory location 0x06:0x07.
This mechanism provides a load-independent motion with constant speed.
Since the motor works as an integrator, the PD-Controller on the pulsewidth acts as a PI-Controller on the position.
The trajectory generator has a dangerous bug: When setting a new target point, the trajectory always starts at the last set target position. Since the joint can be released with the 0xEF command and manually be moved in the meantime, the actual position may be different from the old target position. The joint will then start to move in the direction of the old target position with maximum speed until it catches up with the trajectory. (Imagine this happend with a 'real' industrial robot...)
(4)
Command 0xE2 writes to the EEPROM. Address space is 0:0x2C. (Writing cells >0x2C seems to have no apparent evil side-effects, but fails every 3rd!?! attempt.)
Command 0xE4 addresses the volatile memory. Address space is 0:0xFF. While all locations are readable, not all locations are writable.
EEPROM locations 0:0x1E are loaded to memy locations 0x80:0x9E at power-on. At a 0xEA command the corresponding control parameter set is loaded from th EEPROM to memory locations 0x80:0x83.
To change the ID only ID and checksum have to be written. The motor will load the new ID from the EEPROM after the next power-on. When the servo reads a wrong EEPROM-checksum at power-on, all communication works properly, but the motor will not move. (So one has always the chance to repair the Checksum properly or write the default state to the EEPROM).
@Fritzoid: Since the mapping of to the real memory locations is transparent to the outside, your comment suggests that you might have some further information about the internal memory arrangement?
So, thats all until now.
If anyone is interested in a more detailed description then I can upload my excerpt to the forum. Just let me know.
Thanks very much for the answer, Fritzod. (You were right, I knew most of that by the time.) So according to the number of replies, the digital servo protocol doesn't seem to be that intersting after all? Then I will continue the thread by myself with a summary of what I've learned so far on the different topics.
(1)
While the 0xE? commands work fine for the 8598, the 0xF? commands don't work at all or return garbage. (Note that the HMI Servo programmer uses 0xE6 to set the target position, and so continuously produces framing errors.) Unlike Fritzoids statement the replies to all 0xE? commands seemed relyable in my tests.
(2)
The speed reduction increases with increasing readout frequency, no further investigations.
(3)
The motion control mechanism seems to be divided in two modules: A trajectory generator, which generates a multi-point trajectory with constant speed, and a PD-controller, which sets the driving pulsewidth according to the deviation from the actual trajectory point (independent from speed). You can read the actual trajectory set-point from memory location 0x06:0x07.
This mechanism provides a load-independent motion with constant speed.
Since the motor works as an integrator, the PD-Controller on the pulsewidth acts as a PI-Controller on the position.
The trajectory generator has a dangerous bug: When setting a new target point, the trajectory always starts at the last set target position. Since the joint can be released with the 0xEF command and manually be moved in the meantime, the actual position may be different from the old target position. The joint will then start to move in the direction of the old target position with maximum speed until it catches up with the trajectory. (Imagine this happend with a 'real' industrial robot...)
(4)
Command 0xE2 writes to the EEPROM. Address space is 0:0x2C. (Writing cells >0x2C seems to have no apparent evil side-effects, but fails every 3rd!?! attempt.)
Command 0xE4 addresses the volatile memory. Address space is 0:0xFF. While all locations are readable, not all locations are writable.
EEPROM locations 0:0x1E are loaded to memy locations 0x80:0x9E at power-on. At a 0xEA command the corresponding control parameter set is loaded from th EEPROM to memory locations 0x80:0x83.
To change the ID only ID and checksum have to be written. The motor will load the new ID from the EEPROM after the next power-on. When the servo reads a wrong EEPROM-checksum at power-on, all communication works properly, but the motor will not move. (So one has always the chance to repair the Checksum properly or write the default state to the EEPROM).
@Fritzoid: Since the mapping of to the real memory locations is transparent to the outside, your comment suggests that you might have some further information about the internal memory arrangement?
So, thats all until now.
If anyone is interested in a more detailed description then I can upload my excerpt to the forum. Just let me know.