Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Motoren bewegen sich nicht #5

Closed
ratzl opened this issue May 18, 2021 · 10 comments
Closed

Motoren bewegen sich nicht #5

ratzl opened this issue May 18, 2021 · 10 comments

Comments

@ratzl
Copy link

ratzl commented May 18, 2021

Hallo,

ich habe die Platine nachgebaut und bin gerade bei der Inbetriebnahme.

Die beiden Sensorboards sind noch nicht angeschlossen.

Wenn ich im Webinterface auf AutoOFF schalte und die Schieber bewege reagieren die Motoren nicht.

Ich habe auch schon das Signal vom Rotor angeschaut, die Frequenz ist 27khz anstatt 22khz.

Was mache ich falsch?

Viele Grüße
Matthias

@AK-Homberger
Copy link
Owner

AK-Homberger commented May 18, 2021

Hallo Matthias,

ohne die Sensor-Boards habe ich das noch nie ausprobiert. Nach kurzer Sichtung des Codes sollte es aber gehen (Aber ohne absolute Gewähr).

Der Rotor sollte sich bei "Auto:Off" mit dem Rotor-Schiber bewegen lassen.

Der Linearmotor aber nicht. Dadurch das er kein Lagesignal hat, hat er keine Referenz und "Motor Error" ist zu hoch.

Wie hast du denn die Frequenz gemessen? Das Signal wird durch Zählen der der Microsekunden erzeugt:

void write0() { // write a '0' bit toneburst
for (int i = 1; i <= 22; i++) { // 1 ms of 22 kHz (22 cycles)
digitalWrite(datapin, HIGH);
delayMicroseconds(16);
digitalWrite(datapin, LOW);
delayMicroseconds(17);
}
delayMicroseconds(500); // 0.5 ms of silence
}

Wenn die Frequenz nicht stimmt, kann das eigentlich nur dadurch kommen, dass das Timing des ESP8266 gestört ist. Eventuell durch das Fehlen der Sensoren.

Du kannst den Rotor-Code ja einmal in einem kleinen eigenen Sketch laufen lassen.

Viele Grüße
Andreas

@ratzl
Copy link
Author

ratzl commented May 19, 2021

Hallo Andreas,

Ich habe das Signal mit einem Oszi gemessen.

Der Code den du gepostet hast, erzeugt doch aber eher einen Toneburst mit einer Frequenz von ca. 1(16us+17us) = 30303 Hz und einer Dauer von 22x(16us+17us)= 7.26ms ?

Sobald die Sensoren da sind werde ich noch mal berichten

Grüße
Matthias

@AK-Homberger
Copy link
Owner

Deine Berechnung ist so nicht OK. Schau dir am Besten mal die verlinkte Diseqc-Spezifikation an (Datei: simple_tone_burst_detec.pdf im ZIP-File). Dann wird es bestimmt klarer.

@ratzl
Copy link
Author

ratzl commented May 19, 2021

Hier das Signal

SCR01

@ratzl
Copy link
Author

ratzl commented May 19, 2021

Erstes Bild war im Leerlauf
Folgende Bilder mit angeschlossenem Motor

SCR02
SCR03

@AK-Homberger
Copy link
Owner

Ich hab mir den Code nochmal angesehen. Die Quelle (Solartracker) lief auf einem langsameren Arduino. Für den schnelleren ESP8266 sind die Zeiten (16/17 Mikrosekunden) zu kurz. Erhöhe die mal schrittweise bis es passt (ca. 20 bis 25).

Und danke für den Hinweis. Es hat zwar bei mir trotzdem funktioniert. Mit 27.55 kHz Ist das aber doch etwas weit aus der Spezifikation.

Kanst du mir die finalen Werte senden. Mein Hameg kann leider keine automatische Frequenzanzeige.

Ich werde das Programm und die Dokumentation dann entsprechend anpassen.

@ratzl
Copy link
Author

ratzl commented May 19, 2021

Habe jetzt mal den Code so angepasst wie ich das verstehe, jetzt kann ich den Motor bewegen.
Ich habe auch nicht den exakt gleichen Motor verwendet wie in deinem Link(der ist nämlich nicht mehr verfügbar) Ich vermute dein Motor kommt auch mit 27khz zurecht.

Hier meine Änderung:

void write0() { // write a '0' bit toneburst
for (int i = 1; i <= 22; i++) { // 1 ms of 22 kHz (22 cycles)
digitalWrite(datapin, HIGH);
delayMicroseconds(22);
digitalWrite(datapin, LOW);
delayMicroseconds(23);
}
delayMicroseconds(500); // 0.5 ms of silence
}

void write1() { // write a '1' bit toneburst
for (int i = 1; i <= 11; i++) { // 0.5 ms of 22 kHz (11 cycles)
digitalWrite(datapin, HIGH);
delayMicroseconds(22);
digitalWrite(datapin, LOW);
delayMicroseconds(23);
}
delayMicroseconds(1000); // 1 ms of silence
}
1/45us = 22222khz, und davon 22 Zyklen ergeben 1ms, bzw. 11 Zyklen = 0,5ms

@ratzl
Copy link
Author

ratzl commented May 19, 2021

die 22 bzw. 23 ergeben dann gemessen am Oszi 20,7 khz, das liegt innerhalb der Spec

@AK-Homberger
Copy link
Owner

Ich setze dann beide auf 22. Das sollte noch etwas näher dran sein. Funktioniert jetzt der Motor?

@ratzl
Copy link
Author

ratzl commented May 19, 2021

Ja der Rotor dreht, jetzt warte ich noch auf die Sensoren.

Vielen Dank ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants