Hi,
ich hab für meinen Coppter-Controller eine dynamische Regelung
progammiert.
Also es lassen sich eine Anzahl von bis zu 8 Motoren ansteuern/regeln.
Ich würde jetzt gerne einen Betriebsstundenzähler für jeden Motor
erstellen.
Hierzu hätte ich eine konzeptionelle Frage und würde gerne wissen wie
ihr das so macht/machen würdet.
Ich hatte jetzt vor, 8 Variablen (uint32) zu erstellen welche mit Hilfe
des System Timers (msec) im Minutentakt erhöht werden, falls motor x
aktiv.
so in etwa (PSEUDOCODE):
1 | //globales array im eeprom
|
2 | uint32 Betriebsstunden[8];
|
3 | ...
|
4 | Laufzeitmotor(i){
|
5 | //Motor aktiv? Minute vergangen?
|
6 | if(motor[i]==aktiv && minutevergangen()==true)
|
7 |
|
8 | Betriebsstunden[i]++; //+1 Minute
|
9 | else{;}
|
10 | }
|
11 |
|
12 | //Eine Funktion, welche checkt ob eine Minute seit dem letzten Aufruf //vergangen ist ohne zu blockieren... wie würde man das realisieren?
|
13 |
|
14 | bool minutevergangen(){
|
15 | int i=0;
|
16 | i=aktueller_timerwertMSEC-letzter_timerwertMSEC; //macht mir auch bissl kopfzerbrechen, wie und wo die Timerwerte herkommen
|
17 | if(i>60000) // oder 60 wenn der zähler sekunden zählt
|
18 | { return true; }
|
19 | else
|
20 | {return false; }
|
21 | }
|
oder
wäre es besser einen minütigen Interrupt zu erstellen, der die
jeweiligen Motoren-Variablen um eins erhöt falls Motor aktiv?
Ob der Betriebsstundenzähler am Ende um paar Stunden abweicht ist
eigentlich egal.
Ich hoffe ihr versteht was ich meine und könnt mir ein paar hilfreiche
Tipps geben.
Viele Grüße
Sven
Ich verwende einen STM32F103 und einen picmicro. Diese
Betriebsstundenzählung könnte ich auch in den Pic reinbauen, muss also
nicht in den STM32.
Das EEPROM hat aussreichend Schreibzyklen.