Arduino und CTS288 Encoder Probleme

U

User 23246

Mich würde mal interessieren ob diejenigen die sich die CTS gekauft haben, schon damit rumgespielt und evtl auch was erreicht haben.
 
U

User 23124

Habe meine CTS mittlerweile erhalten, hatte aber noch keine Muse da etwas anzufangen...
 
U

User 11852

Ich habe CTS als auch Bourns gekauft, beide werden, schätze am WE, aber an einem SC2BT Board betrieben
 
U

User 30398

Hi, ich habe selber eine DD Arduino Motortreiber (weiter)entwickelt und dafur auch eine Logik implementiert um der Encoder aus zu lesen (quadrature). Die meiste libraries sind einfach zu kompliziert und so etwas selbst implementieren ist nicht so schwierig.

Eigentlich alles was man braucht ist eine lookup tabelle mit gultige kombinationen vom neue Zustand und letzte Zustand. Im Binary format ist das so etwas:

state = PA_OLD PB_OLD PA_NEW PB_NEW (i.e. bit 3,2,1,0)

Beispiel:
state = 1 0 1 0 --> idx: 10 --> encoder_table[10] (keine Anderung)
state = 1 0 1 1 --> idx: 11 --> encoder_table[11] (Anderung -1 Click)
state = 1 1 1 1 --> idx: 15 --> encoder_table[15] (keine Anderung)
Am nachster update schiebst du dann die letzte 2 bits nach vorne (neue PA/PB sind dann die alte PA/PB). Der wert aus diese Zustand kannst du dann durch diese Tabelle konvertieren in eine "Click".

Hier unten ist meine Code fur eine Arduino Pro Micro, wo ich zwei neben ein ander liegende Pins auf Bank D auslese (PD2 und PD3).
Port mapping findest du hier: https://www.arduino.cc/en/Hacking/PinMapping32u4

const int8_t encoder_table[] = { 0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0, -1, 1, 0 };

void Encoder::tick(void)
{
volatile static byte state = 0;

// byte sig1 = digitalReadFast(encoderPinA);
// byte sig2 = digitalReadFast(encoderPinB);
// Update state
// state = ((state & 0b0011) << 2) | ((sig2 << 1) | sig1);

// Update state (new --> old)
state = ((state & 0b0011) << 2);
// Read enconder pulse on PD2 and PD3 (D0/RX and D1/TX)
state |= ((PIND >> 2) & 0b11);

// Update encoder position
currentPosition += encoder_table[state];
}
 
U

User 11852

Habe heute mal für die CTS Knobs designed, gedruckt und zur Probe eingebaut. Muss sagen, dass ich von Schaltwiederstand mehr erwartet habe.
Werde mal meine DSD Buttonbox aufschrauben und da reinschauen, die Encoder schalten sich sehr gut. Nichtsdestotrotz wandern die Encoder in meine Wheels.....

EDIT: In der DSD Buttonbox sind CTS 288 verbaut, ich habe CTS 288 V gekauft, vielleicht liegt da der Hund begraben.

EDIT2: Habe gerade festgestellt, dass die Bourns Encoder ein angenehmeres, weil deutlicheres, Schaltgefühl haben. Dann wandern die eben in die Wheels....
 
Zuletzt bearbeitet:
U

User 20791

falls es noch jemand interessiert, ich habe bei Github einen Eintrag gefunden, wo jemand den AMStudio Code auf Quarterstep für die Bodnar CTS umgebaut hat. Bei mir funktionierts :giggle:

 
U

User 18558

Das Geheimnis liegt wohl in der Lookup Table des Encoders. Im Datenblatt ist die ganze Tabelle des CTS288. Die 2-Bit Version hat im Fullstep 48 Zustände/Pulse zur Verfügung. Wenn man jetzt aber den Quarterstep fahren möchte muss man schauen dass das Ding also nur noch 12 Steps pro 360° zur Verfügung hat und genau da liegt der Hund wahrscheinlich begraben.
 
Zurück
Oben