Commutation Offset/Encoder Mounting

Hello Community,

I am working with a generic AS6 project using mappMotion. During initial axis commissioning, it is necessary to determine the commutation offset, as we are using motors from external suppliers.

Is there a built-in way to allow the commissioning technician to set and persist this value via mappCockpit or a similar tool? I’m aware that the technician could write the corresponding ParID directly or use the Autotune Motor Phasing / Set Offset function in mappCockpit, but as far as I know, this only stores the value temporarily and is therefore not retained across cold or warm starts.

Any guidance or best practices would be appreciated.

Thanks and best regards,
Kenan

For B&R motors the Commutation Offset is burned into the Endat Encoder at the factory. (I have experienced once or twice in my twenty years where the offset was not burned or was incorrect).

In theory if the motor has an Endat encoder, it may be possible to burn the offset in. It may be possible with other types of encoders, I don’t have answer on that possibilities.

B&R Online Help The encoder interface section of the help provides information about interacting with the memory of both Endat and Hiperface motors.

My best practice would likely be

  1. use the Autotune Motor phasing to find the commutation offset.
  2. save the commutation offset ParId to a retained variable
  3. load the commutation offset into the ParID on power up.

If you expect the machine to have frequent program changes once installed (if you are careful, you could erase the retained memory), or the down time/hassle of commutating is significant; then i would look at implementing via code the programming of the commutation offset into memory. It’s not impossible to do it through the test window in ACP10, but I don’t know if this is exposed via the mappMotion interface for commissioning easily.

hmm, in case of commissioning a 3rd party synchronous motor there are much more motor parameters to save than just the commution offset …

the way is to store all motor parameters in hardware tree and of cause there is also room for the commutation offset:


well after determining all parameters the technician has to change the project, compile and download afterwards.

In case of an encoder with EPROM memory there would be a way to store the commutation offset into the encoder’s memory (as B&R does).
But to my knowledge there is still no standard defined where to store this.
And the procedure to write to Endat’s memory is somewhat complicated and can be done with EPROM - Memory access function block.
So the best way in my opinion is either use the hardware tree or use the method @Matt_Buck described.

Hey,

thanks for your input. The project im working with is kind of a template for multiple machines. These parameters you mentioned @christoph.hilchenbac are already set in the project, because they are static in my case. Only parameter that is causing trouble is the commutation offset since it is different from motor to motor or machine to machine.

It is not the only dynamic parameter. There is the Neg/Pos SW limits and the homeoffset that have to be determined by the technican. Luckily they can be easily set and persisited with mappCockpit :slight_smile:

I will probably use the programmatic approach Matt described. The permanent Variables will be set by the technican via .pil-script to keep it simple.

BR Kenan

Even the commutation offset can programatically be set (and will then remain persistent).

see MC_BR_ProcessConfig / mcCFG_MOT_SYN, please

Perfect! Thanks alot again.

BR Kenan