Guten tag allerseits
hab mal wieder ne bastlerei ausgefasst
es geht um ein hubsystem mit 3 motoren, die per pulsweite gefahren
werden,
motoren drehen max 3000rpm und müssen im anfahr und bremsbetrieb auf
drehzahl nur geprüft werden, denn bis dato funktioniert dieses hubsystem
einigermassen
ich habe mittels einem atmega 2560 auf dem mega board bereits was
programmiert (arduino software)
Ich mache einen timer mit 16 bit im ctc mode zum auslöser einer
interrupt -> also zeitfenster...mit oszi dann genaues zeitfenster von
0,05sec eingestellt
da die drehzahl niedrig ist, ist dann mittels externem interrupt das
hochzählen zu ungenau, weil ja beim bremsen teilweise für 2-3sec mit
unter 500rpm gefahren wird....
zeitfenster klein, frequenz niedrig, hochzählen sinnlos....habe da
messfehler von bis zu +/-40%
Leider ist auf dem Mega Board nicht alles ausgeführt an möglichen
anschlüssen....also, timer0 ist reserviert für system, timer1 verwendet
schon ne andere sache, timer2 hat nur 8 bit und keinen ICR
timer 3,4,5 wären toll, aber die ICPs sind nicht alle zugänglich am
Board
wieder einmal für nen Elektrotechniker etwas zu wenig Wissen
hat wer eine idee?
falls ich noch unzureichend infos da gelassen hab, bitte nicht
lynchen....hab mal eben schnell bestand aufgenommen hier
Was du gerade merkst, das ist das die beiden Messmethode
* fixes Zeitfenster, zählen der Pulse in diesem Zeitfenster
* variables Zeitfenster durch die zu messenden Pulse, fixen schnellen
Basistakt
zueinander 'reziprokes' Verhalten haben.
soll heissen: wo die eine Methode ungenau wird, wird die andere genauer.
Und umgekehrt.
Wenn du an ICP nicht rankommst, dann musst du eben dein Capturing
'händisch' machen. Deine jetzige Messmethode liefert dir ja zumindest
einen groben Wert. Wenn du anhand dieses Wertes erkennst, dass du dich
im ungenauen Bereich bewegst, dann stellst du die Strategie um: Dein
Timer liefert dir nicht mehr das Zeitfenster von 0.05s sondern du
konfigurierst um auf ordentlich Speed. Dafür fungiert der externe
Interrupt nicht mehr als 'Antrieb' für den Zähler sondern als Marke für
das Zeitfenster, in dem du den Timer laufen lässt. Der Zählerstand im
Timer verrät dir dann, wie lange dieses Zeitfenster war.
-> Beide Messmethoden implementieren und bei Bedarf umschalten. Ob
Bedarf ist oder nicht erkennst du am jeweiligen Zahlenwert des
Messergebnisses.
Ich fasse zusammen: 3 Motoren auf Drehzahl prüfen. Du hast dir eine
Systemclock mit 20Hz gebaut. Du zählst die Pulse in den 50µs und
berechnest dann die Drehzahl draus. Bei Langsamen Drehzahlen macht man
es Anders rum man Zählt die Zeit zw. 2 Takten.
Du Zählst also in deiner System Uhr 3 Variablen (8 Bit breit(geht bis
0,08 Hz runter)) hoch bis der Interrupt kommt kopierst den Wert der
passenden Variable in um und setzt das Original auf 0, somit hast du
dann die Zeitmessung von vorne begonnen. Und für die Höheren Frequenzen
nimmst du deine Alte methode.
MfG
ich
}
a es geht darum, dass nach jeder 10.fahrt die hubvorrichtung resettet
werden muss, weil ja nicht immer gut ausbalanciert auf-ab gefahren wird
was hält ihr davon?
bin eben nicht sicher, ob ich da mit dem pin18 (int3) mit der
einstellung selbiges, wie mit dem icp bewirke
das ganze müsst ich für 3 motoren machen...
Die funktionen dann in der loop aufrufen
brauch ich diese flags auch? Also, die indikatoren, ob was zu tun ist,
oder nicht?
ANSCHLUSS AN DIGITAL PIN 18 passt?
Ich würde mir das ganze so per Vorteiler einrichten, dass ich die
Overflows nicht berücksichtigen brauche.
Denn erstens brauch ich die Drehzahl nicht auf Tausendstel U/Min genau.
Und zweitens ist diese Drehzahl sowieso nur für den Bruchteil einer
Sekunde gültig. Schliesslich beschleunigen bzw. bremsen die Motoren ja
gerade, was die Aussagekraft einer maximal genauen Drehzahl auf 47
Nachkommastellen dann doch etwas limitiert. Zumindest die Kommastellen
45 und 46 sind dann ein klein bischen zweifelhaft wenn einige Physiker
recht haben und die Zeit auch gequantelt ist :-)
Hallo,
wie wird die Hubvorrichtung geresettet?
weil wenn das nur ein in Refposition fahren ist, würde ich den
Taster/Schalter mit der die Vorrichtung betätigt wird nehmen und dann
einfach Zählen. wenn Bei 10 dann ab in Refposition und fertig.
MfG
ich
gartler p. schrieb:> }> a es geht darum, dass nach jeder 10.fahrt die hubvorrichtung resettet> werden muss, weil ja nicht immer gut ausbalanciert auf-ab gefahren wird
Ich seh hier keinen Zusammenhang mit einer unbedingt notwendigen
Drehzahlmessung.
Die hubvorrichtung muss momentan per hand resettet werden, denn nach 10
fahrten stoppt sie einfach und dann muss man brutal mit 1 schalter für
alle 3 motoren nach unten gefahren werden...das kann dann sein, dass 2
motoren unten sind, einer noch nicht ganz...die 2 haben sozusagen schon
kurzschluss, einer fährt
unsaubere lösung
und anschlagtaster kann man hier aus platzgründen nicht adaptieren
und wenn man bedenkt, dass es 14m fahrhöhe sind....naja, die asm sind
nicht exakt gleich schnell....eh klar
aber was kann man zu meiner codelösung anmerken?
hab kompiliert...paar Variablenfehler hab ich schon korrigiert
aber generell
brauch ich die ICPs für diese art der interrupts oder kann ich
alternativ die pins selber so abfragen?
gartler p. schrieb:> Die hubvorrichtung muss momentan per hand resettet werden, denn nach 10> fahrten stoppt sie einfach und dann muss man brutal mit 1 schalter für> alle 3 motoren nach unten gefahren werden...das kann dann sein, dass 2> motoren unten sind, einer noch nicht ganz...die 2 haben sozusagen schon> kurzschluss, einer fährt>> unsaubere lösung
Ich seh immer noch nicht, wozu man da jetzt die Drehzahl brauchen würde.
Das läuft doch, wenn ich es richtig verstanden habe, darauf hinaus,
Motorstillstand zu detektieren. Oder wie definiert sich 'eine Fahrt'?
Motorstillstand ist aber leicht. Wenn in einem bestimmten Zeitintervall
vom Motor kein einziger 'Ich drehe noch'-Puls kommt, dann steht er wohl.
Ob der im Maximum mit 2800U/min oder mit 2750U/min dreht, ist mir da
doch völlig Banane.
> aber was kann man zu meiner codelösung anmerken?
Ja. Schön kopiert.
> brauch ich die ICPs für diese art der interrupts oder kann ich> alternativ die pins selber so abfragen?
Du kannst auch selber abfragen. Ist halt alles nur eine Frage, wie genau
es sein muss. Und genau das stelle ich erst mal in den Raum.
Wie genau es sein muss:
Bei 10 fahrten je nach last steht das teil sichtbar schief...3cm bei der
schiene gemesssen
da hier einige 100kg bewegt werden, mitunter stahlwalzen, kann man sich
vorstellen, dass das gefährlich werden kann
die uralten motoren da sind auch n risiko
investiert werden soll nix mehr, kein geld für umbauten ist da
inkrementalgeber und fu wären sonst toll
ich will nur, dass bei der fahrt nach unten die drehzahl überwacht wird,
eine korrektur wird dann nach jeder fahrt selbständig vorgenommen ..und
nur bei leerfahrten
will ausserdem ein paar daten mitschreiben lassen, dann sehen wir mal
weiter
gut kopiert...des passt schon
ich muss diese routine in meinen kopf kriegen und verarbeiten
wie spreche ich die pins denn so an?
oder ist bereits alles richtig konfiguriert?
wie gesagt, die icps sind nicht zugänglich
Was willst du mit den Drehzahlen aller Motoren anfangen?
Willst Du daraus dann die absoluten Positionen ermitteln und dann ggf.
einen Motor nachstellen?
Das wird nicht gehen, denn die berechnete Position wird mit der Zeit
immer stärker von der realen abweichen.
Grundsätzlich anderer Ansatz:
Einen Beschleunigungssensor an der Plattform befestigen. Wenn diese
still steht, kann die Richtung der Erdbeschleunigung gemessen werden.
Daraus kann man die absolute Schieflage ermitteln und einen Motor
nachstellen - bis alles wieder gerade ist.
Thomas Z. schrieb:> Grundsätzlich anderer Ansatz:> Einen Beschleunigungssensor an der Plattform befestigen. Wenn diese> still steht, kann die Richtung der Erdbeschleunigung gemessen werden.> Daraus kann man die absolute Schieflage ermitteln und einen Motor> nachstellen - bis alles wieder gerade ist.
Das halte ich für eine vernünftige Idee. Dem TO gehts doch eigentlich
nicht um Drehzahlen oder ähnliches. Er will, daß die Platform nicht
schief hängt. Also sollte man genau das messen und in Ordnung bringen.
Zur Not einfach ein "altes" Smartphone mit Doppelklebeband an die
Platform und ne App geschrieben.
MfG Klaus
Das mit platform schief geht sogar einfacher, weil am motor bereits
anzeigen für stromverbrauch sind....bei dem gewicht sieht man sogar
schon bei solchen abweichungen einen unterschied, wenn man sie vorher
abliest und vergleicht
ich wollte auch nicht in fahrt die motoren aus und einschalten...das ist
bei solch alten motoren nicht gerade die feine art
aber
inzwischen hab ich nach eeewigen einstellversuchen die richtigen
registereinstellungen gefunden
cli();
GICR=(1 <<INT1);
MCUCR=(1 <<ISC11);
TCCR1B=(1 <<CS10);
TIMSK=(1<<TICIE1)|(1 <<TOIE1);
sei();
Dann eine ISR(INT1_vect)
und eine ISR(TIMER1_OVF_vect)
Aber kann mir einer sagen, warum gegenüber dem ICP ein kleiner
messfehler besteht?