Hallo Zusammen,
irgendwie fehlt es mir gerade an ein bisschen Logik und ich hoffe mir
könnte jemand von euch helfen.
Ich Zähle über den Pin Change Interrupt bei meinem ATMega324PA positive
und negative Flanken von einem Motor.
Dreht sich der Motor nach Links -> Werte zählen Aufwärts
Dreht sich der Motor nach Rechts -> Werte zählen Abwärts.
Bei mir gibt es jedoch keine Möglichkeit die Endschalter abzufragen, da
diese nicht mit dem µC verbunden sind.
Durch den PCINT gibt es immer ein paar takte Zähltolleranz, das heißt es
kann auch sein, wenn der Motor nach Rechts gelaufen ist und auf
Endposition steht -> Wert ist ein bisschen über 0.
Nun suche ich eine Möglichkeit über meinen Timer abzufragen, ob das
Signal zum Verfahren des Motors anliegt, sich aber eine gewisse Zeit
keine Pulse verändert haben. -> Motorposition = 0.
1 |
|
2 | ISR(PCINT0_vect) //Motor 1
|
3 | {
|
4 | if (digitalRead(M1_AUF) == HIGH)
|
5 | {
|
6 | M1_ist_position++; //Counting Motorpulses upwards when the EMK get poled from + to - and from - to +
|
7 | }
|
8 | if (digitalRead(M1_AB) == HIGH)
|
9 | {
|
10 | M1_ist_position--; //Counting Motorpulses downwards when the EMK get poled from + to - and from - to +
|
11 | }
|
12 | if (M1_ist_position <= 0) //Turn the Value to Zero when there is an Underflow
|
13 | {
|
14 | M1_ist_position = 0;
|
15 | }
|
16 | }
|
Somit könnte ich ja irgendwie abfragen:
if (digitalRead(M1_AB) == HIGH) && Änderungen der Pulse in einer
gewissen Zeit < als es sollte)
{
M1_ist_position=0;
}
Nur fehlt mir irgendwie die Logik für "Änderungen der Pulse in einer
gewissen Zeit < als es sollte).
Kann ich einfach eine Variable nehmen und den jetzigen Wert des Motors
in die Variable speichern
und eine neue Variable nehmen und den Wert des Motors nach x Zeit
einspeichern,
beide Variablen vergleichen und falls die Differenz zu gering ist -> Es
hat zu wenig Pulse stattgefunden -> M1_ist_position=0?
Wie würdet ihr das Ganze vergleichen?
Wäre Froh über ein paar Ansätze ;)