Hallo Leute!,
Ich habe einen Sensor den ich per Arduino seine CLK Daten geben muss (Übertragungsmodus 24 Bit Messwert + 1 Fehler Bit).
Der Sensor gibt mir nun Die Data Signale über Gray Code zurück die dann der Arduino umwandeln muss in ein Takt A und Takt B Signal damit ein Messgerät mir eine Strecke wieder anzeigen lassen kann.
Ich bräuchte hier Hilfe für ein Programm da ich nicht stark im Programmieren bin.
Danke
Mfg
Alex
➜ Wir haben nicht genügend Informationen, um Ihnen zu helfen....
Welche Informationen wären noch Hilfreich für Sie ?
➜ Welcher Sensor? (Link zum Datenblatt)
➜ UNO? ESP32? (5V, 3.3V)
➜ Gibt es zusätzliche technische Spezifikationen, die Sie teilen können, wie Konnektivität oder verwendete Stromversorgung?
Es ist ein Arduino UNO
Eine Platine (siehe Bild) braucht 5V. (das Messgerät gibt uns die 5V für die Spannungsversorgung raus)
Was gemach werden sollte:
Der Sensor wird ersetzt gegen einen Drehgeber. (Das Messgerät hat seine Strecken bislang per Drehgeber bekommen und soll nun per Sensor die Strecke/Entfernung bekommen.)
Der Sensor:
UM_AMS100iSSI_de_50146972 (leuze.com)
Welche Art von Platine (RS-422)?
Falls ja, wie passen Sie sie an SSI an?
Die Platine ist selbst gemacht, sie bekommt die SSI Schnittstelle mit 4 Adern und wandelt die CLK+, CLK-, Data+, Data- um ein jeweils ein Data und Ein CLK Signal, die ich dann auf das Arduino verbinden möchte, für mehr ist die Platine nicht gedacht oder ist dieser Vorgang unrelevant?
Angenommen, Ihre eigene Platine funktioniert und das Bit bei steigendem Taktsignal anbietet, könnten Sie versuchen, die Bits mit einem Code wie diesem zu lesen
const int dataPin = 2; // Eingangspin für die Daten
const int clockPin = 3; // Eingangspin für die CLK
int letzterClockStatus = LOW; // Letzter Status der CLK
void setup() {
pinMode(dataPin, INPUT);
pinMode(clockPin, INPUT);
Serial.begin(115200);
}
void loop() {
int aktuellerClockStatus = digitalRead(clockPin);
if (aktuellerClockStatus == HIGH && letzterClockStatus == LOW) {
int datenwert = digitalRead(dataPin);
Serial.println(datenwert);
}
letzterClockStatus = aktuellerClockStatus;
}
Tut es irgendetwas?
Erst einmal Danke !
Mit was hast du die Darstellung gemacht ?
ich kann dir nicht sagen aktuell ob es funktioniert bzw. hast du mir einen Tipp/Vorschlag wie ich die Funktion testen kann, da ich jetzt vom Arduino noch ne Ausgabe brauch für das Messgerät der einen Takt A und Takt B brauch (Drehgeber Signale)
Keynote / Mac
Vielleicht so etwas?
const byte dataPin = 2; // Eingangspin für Gray-Code-Daten
const byte clockPin = 3; // Eingangspin für den Takt (CLK)
const byte taktAPin = 10; // Ausgangspin für das Takt A-Signal
const byte taktBPin = 11; // Ausgangspin für das Takt B-Signal
int letzterClockStatus = LOW; // Letzter Status der CLK
void setup() {
pinMode(dataPin, INPUT);
pinMode(clockPin, INPUT);
pinMode(taktAPin, OUTPUT);
pinMode(taktBPin, OUTPUT);
Serial.begin(115200);
}
void loop() {
int aktuellerClockStatus = digitalRead(clockPin);
int datenwert = digitalRead(dataPin);
if (aktuellerClockStatus == HIGH && letzterClockStatus == LOW) {
digitalWrite(taktAPin, datenwert);
digitalWrite(taktBPin, (datenwert == LOW) ? HIGH : LOW);
}
letzterClockStatus = aktuellerClockStatus;
}
Hilft dir der Aufbau der Platine weiter
Stand aktuell funktioniert es nicht
Bisher hatte das Messgerät sein Signal von dem Drehgeber bekommen
im Messgerät selber gibt es die Funktion "Geber Test" (wenn ich am Seil vom Drehgeber gezogen habe, hat mir das Messgerät die Strecke des rausgezogenem Seil gezeigt (Das soll nun der optische Sensor machen)
Beim Test zeigt es aber stand aktuell zeigt mir das Messgerät = 0mm an (habe eine Gegenkontrolle vom Sensor selber, dieser zeigt mir den Abstand direkt am Sensor-Bildschirm an.
Kann Ihre individuelle Platine die Entfernung korrekt empfangen? Haben Sie einen Arduino-Code dafür? Wie viele Impulse möchten Sie generieren, um den Schein-Differenzialgeber für 1 cm oder 1 mm zu simulieren?
Ja kann Sie.
Nein leider nicht
Wie meinen Sie es genau? (In mm wäre Perfekt)
Habe ich Ihr Ziel richtig verstanden?
- Sie haben eine Kabelspule.
- Zuvor hatten Sie einen Drehgeber, der mit der Achse der Kabelspule verbunden war.
- Der Ausgang des Drehgebers war mit einem Messgerät verbunden, das die Kabellänge angezeigt hat.
- Sie möchten den Drehgeber durch den AMS107i ersetzen und versuchen, die Impulse des ursprünglichen Encoders durch einen Arduino zu simulieren, der Benachrichtigungen über die zurückgelegte Strecke erhält.
Ist das korrekt?
Falls nicht, bitte erläutern Sie dies genauer.
Soweit richtig
Das Messgerät misst eine Entfernung, bisher Wurde die Entfernung mit einem Seilzugdrehgeber gemessen und dann am Messgerät in mm angezeigt. Das Ziel nun wäre jetzt Dein Seilzugeber zu ersetzen, durch den Sensor der mir genauere Entfernungen anzeigen kann
grob gesagtes Verfahren: Seilzuggeber ersetzen durch einen Optischen Sensor
Das Messgerät ist daher abhängig von der Anzahl der vom Kabel generierten Impulse. Wenn Sie Impulse von Ihrem optischen Sensor generieren, erhalten Sie keine bessere Genauigkeit.
Zeigt Ihr Messgerät nur die Entfernung an, oder steuert es auch ein anderes Gerät?
ein bewegliches teil (linear) wird verbunden mit dem drehgeber. Mit einem Taster (actuator am messgerät) wird ein stopp ausgelöst nach dem stopp gibt mir dann das messgerät aus welche strecke nach betätigen des stopps noch gelaufen ist.