Carousel - dont work w/o trigger

More
3 years 9 months ago #260951 by zz912
Hello,

We have Brother Tc-211.
I has rotary ATC.
I use HAL component carousel.
Binary encoder 4 bit, w/o trigger bit.
Controlled by asynchronous motor.
Pin for controller - carousel.0.motor-fwd and carousel.0.motor-rev
 

Attachment not found



My problem is that the encoder doesn't have a trigger bit, so sometimes some bits are read faster than others. The carousel component is confused by this.

So we have a problem when moving from position 9 to 8 and from position 3 to 2.
Why is this so:
9 = 2^3+0+0+2^0
8 = 2^3+0+0+0

3 = 0+0+2^1+2^0
2 = 0+0+2^1+0

When I want the revolver, let it turn from position 9 to 8 or from position 3 to 2. Then the engine starts and immediately stops. A situation occurs when, due to manufacturing tolerances, bit ^0 (2^0=1) turns on one millisecond before the rest of the bit, and the program thinks it is already in the position where it should be (but physically it is not) and turns off the rotation relay.

Any Idea what should I do now?

Please Log in to join the conversation.

More
3 years 9 months ago #260960 by PCW
Normally they use Gray code to avoid this sort of issue.

What about a say 10 ms debounce of all the bits?
(might need a integer debounce component instead of bit debounce)
 
An integer debounce component would need to sample an input integer
N times without change before updating its output by copying its
input to output.
 

Please Log in to join the conversation.

More
3 years 9 months ago #261009 by zz912
It did not help:
Code:
# nacteni komponenty debounce loadrt debounce cfg=4 addf debounce.0        servo-thread setp debounce.0.delay 10 # vstup komponenty debounce net atc-bit0  => debounce.0.0.in net atc-bit1  => debounce.0.1.in net atc-bit2  => debounce.0.2.in net atc-bit3  => debounce.0.3.in # vystup komponenty debounce net atc-deb-bit0  <= debounce.0.0.out net atc-deb-bit1  <= debounce.0.1.out net atc-deb-bit2  <= debounce.0.2.out net atc-deb-bit3  <= debounce.0.3.out # spojeni nactenych bitu a komponenty carousel net atc-deb-bit0  => carousel.0.sense-0 net atc-deb-bit1  => carousel.0.sense-1 net atc-deb-bit2  => carousel.0.sense-2 net atc-deb-bit3  => carousel.0.sense-3

I am in position 3 and I want move to position 2.
 

Attachment not found


ATC descends from position 3 and stops.
 

Attachment not found



ATC generally works, but some positions do nonsense.

 

Please Log in to join the conversation.

More
3 years 9 months ago #261032 by PCW
Yes, I would expect a BIT debounce to fail

What I expect is needed is an integer debounce

(so its impossible to get transient wrong encoder counts)

Please Log in to join the conversation.

More
3 years 9 months ago #261038 by zz912
I studied source code carousel.comp. I will try modify and I will make feedback.

Please Log in to join the conversation.

More
3 years 9 months ago #261152 by zz912
I solved it. 
I made a modification to the carousel component. The original solution worked in such a way that moving from the first position to the second position was only about checking whether it is already in the correct position. I have several phases. The first stage is to leave the first position. I check if the position is already 0 and I don't care how the read position changes. In the second phase, I just check that the position is zero. In the third phase, I check that the position has changed to anything else and stop the engine. The fourth stage is just waiting. The fifth phase decides whether we are in the right position or whether to continue in the right position.

Please Log in to join the conversation.

More
3 years 9 months ago #263173 by zz912
I made Draft Pull Request here:
github.com/LinuxCNC/linuxcnc/pull/2310

Please Log in to join the conversation.

Time to create page: 0.164 seconds
Powered by Kunena Forum