I have a DINT from an encoder, and have succesfully linked it to a virtual encoder using the dummy businterface.
The encoder is then updated with the SMC_Encoder-FB, and this seems to work correctly.
However the output-axis from SMC_Encoder is very noisy in the Axis.fSetSpeed, fActSpeed and their higher derivaties. This makes stuff like gearings incredible noisy as well.
Anyone have experience with this - how to reduce the noise (except getting a higher resolution encoder)?
Regards
Nicolai Hanssing
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Do you have a closed loop position or velocity control set up? What are some of the parameters of your system? What is the encoder resolution, gear ratios, etc...
Derrivativatives will always suffer from poor resolution feedback devices. You can't run away from that. It is simply the physics of it.
Let us know a little more.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-10-09
Originally created by: Nicolai_Hanssing
Damn that was a fast response.
More detail:
PLC: Cubelec 600MHz Celeron.
CoDeSys 2.3.9.22
PLC-Open softmotion-target - latest release.
Cycletime for FB and CAN-Open interface 2ms
Can-slave: Linmot Drive
Encoder for testpurposes: 2000 inc/rev A/B-channel type, sent by transmissiontype 1 over CAN-Open.
All messages gets through.
One virtual servo-axis running, from which the Linmot linear motor gets its stream ing position-setpoint (Yes I know, a bit covoluted, but theres no native linmot-driver for 3S PLC-Open).
When this axis does normal moves everything runs smooth.
When the virtual axis runs a GearIn-slave to the Encoder-axis even with low gearing its INCREDIBLE noisy. Much more so than I would have imagined, using any onther servo-controller. I think its related to the derived estimates of velocity and accel.
I activated some undocumented filter-parameters in the encoder-structure, and this affected the noise, but also the position....
The encoder-axis "works" correctly, that is its position is tracked and also updated correctly, and I can use it to drive for instance SMC_GearIn.
I'm think there are some delay-compensations going on in GearIn, however thay are not documented, which uses the fSetVelocity/fActVelocity but for now, I actually want to deactivate these estimates.
Nicolai
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have never used softmotion but my gut tells me tha having the feedback for the loop over the CAN bus is problematic. You best bet there is to use sync messages for feedback polling but I don't know enough about your hardware to know if that is what is going on. The motion routines likely poll the encoder at fixed intervals but if the PDO message type is not synced then the data is actually being taken at random intervals. Filters will help a little here but, as you saw, to the detriment of performance.
Does the Linmot have to be synchronized with other axes or can it act independently? If so I would let the Linmot controller have the feedback directly and close the loop there (I think they have this capability). Just send position commands over the CAN bus and monitor the position and error status, etc.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-10-10
Originally created by: Nicolai_Hanssing
Sorry you are misunderstanding my post.
The encoder is not a feedback, but just an axis which is used to drive gearing, and CAMMMING for the slave-axes. No closedloop-feedback here, only openloop. Its "just" a master-axis.
The Linmot recives its position-setpoint as a stream over can and closes loop internally with its own encoderfeedback. Just as nearly all other axes does in SoftMotion.
There's nothing wrong with using encoder inputs as masteraxis over a synchrounous fieldbus, except the delay in the system which can end up being several cycles. If this is an issue you do some sort of delay-compensation which involves an estimate of the speed. It's not as good as the good old analog +/-10V+Encoder servo-controllers, but it no real problem in most applications.
Nicolai
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-10-11
Originally created by: Nicolai_Hanssing
Update:
Trying with another CAN-Open slave for the encoder input reduced the noise markedly. So I have concluded that the encoder-spoition was not read synchronously by the Linmot-slave.
Issue is resolved.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: Nicolai_Hanssing
Hi Forum,
I have a DINT from an encoder, and have succesfully linked it to a virtual encoder using the dummy businterface.
The encoder is then updated with the SMC_Encoder-FB, and this seems to work correctly.
However the output-axis from SMC_Encoder is very noisy in the Axis.fSetSpeed, fActSpeed and their higher derivaties. This makes stuff like gearings incredible noisy as well.
Anyone have experience with this - how to reduce the noise (except getting a higher resolution encoder)?
Regards
Nicolai Hanssing
Do you have a closed loop position or velocity control set up? What are some of the parameters of your system? What is the encoder resolution, gear ratios, etc...
Derrivativatives will always suffer from poor resolution feedback devices. You can't run away from that. It is simply the physics of it.
Let us know a little more.
Originally created by: Nicolai_Hanssing
Damn that was a fast response.
More detail:
PLC: Cubelec 600MHz Celeron.
CoDeSys 2.3.9.22
PLC-Open softmotion-target - latest release.
Cycletime for FB and CAN-Open interface 2ms
Can-slave: Linmot Drive
Encoder for testpurposes: 2000 inc/rev A/B-channel type, sent by transmissiontype 1 over CAN-Open.
All messages gets through.
One virtual servo-axis running, from which the Linmot linear motor gets its stream ing position-setpoint (Yes I know, a bit covoluted, but theres no native linmot-driver for 3S PLC-Open).
When this axis does normal moves everything runs smooth.
When the virtual axis runs a GearIn-slave to the Encoder-axis even with low gearing its INCREDIBLE noisy. Much more so than I would have imagined, using any onther servo-controller. I think its related to the derived estimates of velocity and accel.
I activated some undocumented filter-parameters in the encoder-structure, and this affected the noise, but also the position....
The encoder-axis "works" correctly, that is its position is tracked and also updated correctly, and I can use it to drive for instance SMC_GearIn.
I'm think there are some delay-compensations going on in GearIn, however thay are not documented, which uses the fSetVelocity/fActVelocity but for now, I actually want to deactivate these estimates.
Nicolai
I have never used softmotion but my gut tells me tha having the feedback for the loop over the CAN bus is problematic. You best bet there is to use sync messages for feedback polling but I don't know enough about your hardware to know if that is what is going on. The motion routines likely poll the encoder at fixed intervals but if the PDO message type is not synced then the data is actually being taken at random intervals. Filters will help a little here but, as you saw, to the detriment of performance.
Does the Linmot have to be synchronized with other axes or can it act independently? If so I would let the Linmot controller have the feedback directly and close the loop there (I think they have this capability). Just send position commands over the CAN bus and monitor the position and error status, etc.
Originally created by: Nicolai_Hanssing
Sorry you are misunderstanding my post.
The encoder is not a feedback, but just an axis which is used to drive gearing, and CAMMMING for the slave-axes. No closedloop-feedback here, only openloop. Its "just" a master-axis.
The Linmot recives its position-setpoint as a stream over can and closes loop internally with its own encoderfeedback. Just as nearly all other axes does in SoftMotion.
There's nothing wrong with using encoder inputs as masteraxis over a synchrounous fieldbus, except the delay in the system which can end up being several cycles. If this is an issue you do some sort of delay-compensation which involves an estimate of the speed. It's not as good as the good old analog +/-10V+Encoder servo-controllers, but it no real problem in most applications.
Nicolai
Originally created by: Nicolai_Hanssing
Update:
Trying with another CAN-Open slave for the encoder input reduced the noise markedly. So I have concluded that the encoder-spoition was not read synchronously by the Linmot-slave.
Issue is resolved.