PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was macht ein Atmega48 in einem Fahrtenregler



W-Lan Kabel
14.09.2009, 09:22
Hallo,

ich habe grade einen alten Fahrtenregler gefunden und mal aufgemacht.
Da sah ich einen Atmel Atmega 48 20AU 0621, und frag mich grade was der da zu tun hat.

Weiß das jemand?

021aet04
14.09.2009, 10:43
Der wertet vermutlich die Signale vom Empfänger aus und steuert den Motor.

W-Lan Kabel
14.09.2009, 11:15
Er macht also aus
PWM + Akkustrom (ungeregelt)
II
V
Geregelten Motorstrom
?

021aet04
14.09.2009, 11:20
Ja das sollte so sein. Vielleicht hat er noch mehrere Funktionen (Motorstromüberwachung, Temparatur der Endstufen,....)

W-Lan Kabel
14.09.2009, 11:48
ah danke.

Wie kann ich einen Empfänger (3 Kanäle und Stromanschluss) auswerten?
kann der RP6 oder Die CCpro M128 drei PWM signal lesen und danach
einen servo (alleine geht das) und die beiden Motoren vom RP6 proportional steuern?

ich hab das mal in einem youtubevideo gesehen aber da sieht man nicht wo die dort zwei Kanäle angeschlossen sind und ob das auch mit drei geht.

Also wo sind die 3mal 3 kabel anzuschließen und wie liest man die aus?
Den strom für den Empfänger gibt ja der 5volt spannungsregeler vom Rp6 aus, den kann man ja benutzen.

vielen Dank

021aet04
14.09.2009, 11:55
Beim Servokabel (3polig) sind 2 Anschlüsse für Versorgung (+U, GND) und einmal (PWM-)Signal. Bei einem Fahrtenregler hast du noch 2 (dicke) Anschlüsse für den Motor, da der Motor eine höhere Leistung besitzt. Ansteuern kann man mit jedem µC. Wie willst du das mit den 3 PWM Signalen machen? Ein guter Tipp ist das RN-MotCtrl. Das hat 2 Servoeingänge für die 2 Motoren, damit man z.B. ein Kettenfahrzeug steuern kann.

W-Lan Kabel
14.09.2009, 12:42
ich möchte mit meiner RC fernbedienung den RP6 steuern aber eben nicht nur kette 1 und 2 sondern auch noch einen servo.
ich will also drei Kanäle vom Empfänger auslesen und diese infos nutzen einen servo und die beiden ketten zu steuern.

dazu wollte ich wissen wie ich das anzuschliesen hab also Empfäger und RP6 bzw CCPro M128 miteinander. Und wie ich die drei eigehenden PWM signale im Programm einlese.

wkrug
14.09.2009, 15:17
Und wie ich die drei eigehenden PWM signale im Programm einlese.

Ich lass dazu immer den TIMER1 des ATMEGA Controllers frei laufen, lese dann bei einer steigenden Flanke des Servosignals ( ICP, INT0 und INT1 ) diesen Timer aus und speichere den Wert ab.
Dann wird das Sensing des entsprechenden Interrupts auf "fallende Flanke" eingestellt.

Kommt dieser Interrupt dann, wird der Timerwert der "steigenden Flanke" vom aktuellen Timer Wert abgezogen. Wenn man dazu unsigned Variablen verwendet funktioniert das sogar bei einem Timer Überlauf.

Somit erhält man die Information über die aktuell anliegende Pulslänge.

Wenn Du einen 8MHz Quarz und einen Prescaler von 8 für den Timer verwendest, bekommst Du die Werte direkt in µs.
Da das TCNT Register des Timers nicht verändert wird, kannst Du einen Timer für alle 3 Servoeingänge verwenden.

Nach der Berechnung der Impulslänge wird diese in einer Variablen abgespeichert, das Sensing für den nächsten Impuls wieder auf steigende Flanke gestellt und eventuell ein Flag gesetzt, das dem Hauptprogramm mitteilt, das ein neuer Servoimpuls auf Kanal-x zur Auswertung eingetroffen ist.

Die Interruptroutinen sollten - wie üblich - möglichst kurz und natürlich ohne delay Befehle sein.
Die Bewertung und Auswertung kann man ja in aller Ruhe im Hauptprogramm machen.

Ich hab sowas mit 2 Kanälen schon gemacht - funktioniert problemlos.

Virus
15.09.2009, 09:56
Kann der Timer auch drei lesen?
und wo müssen die Leitungen vom empfänger angeschlossen werden?

Die Stromversorgung ist klar ( GND und +5 Volt)
Aber dann kommen ja drei leitungen aus dem dem empfänger,
ich nehme an GND, +5 Volt und PWM?

Reicht es nicht nur PWM zu verwenden?
Und das kommt dann an die SCL, IT1 und SDA?

wkrug
15.09.2009, 10:11
Kann der Timer auch drei lesen?
und wo müssen die Leitungen vom empfänger angeschlossen werden?

Der Timer liest ja die Daten nicht, sondern er liefert nur die Zeitbasis für die Messung.
Die eigentliche Messung findet in den Interruptroutinen ( z.B. ICP, INT0, INT1 ) statt.

Ich würde dafür den ICP Eingang mit zugehörigem Interrupt, sowie den INT0 und den INT1 Eingang mit den dazugehörigen Interruptroutinen verwenden.

Deine Eingänge wären also dann ICP, INT0 und INT1.
ICP hat zusätzlich noch den Vorteil, das der Wert des Timers in einem ICP Register im Controller gespeichert wird und von dort nur abgeholt werden muß.

Prinzipiell kannst Du diese Methode für so viele Kanäle verwenden, wie du flankengetriggerte Eingänge hast. Theoretisch wäre also auch die Verwendung der Pin Change Interrupts möglich, ist allerdings aufwändiger als die INT's

Virus
15.09.2009, 10:24
Und was schlließt man an ICP, INT0 und INT1 an?

PWM oder?

wkrug
15.09.2009, 16:38
Und was schlließt man an ICP, INT0 und INT1 an?
Ich denke, die 3 gewünschten Kanäle von deinem Fernsteuerempfänger, deren Impulse Du auswerten willst ?!

Aus Diesen 3 Informationen kannst Du dann die Servoimpulse oder sonstwas generieren, die dein Roboter für die Ansteuerung der Motoren braucht.

Den Timer 1 kannst Du dann auch noch zusätzlich zur Generierung der Servoimpulse verwenden, falls dein Roboter die braucht.
Das geht sehr schön mit einem Comparematch Interrupt.

Virus
15.09.2009, 20:50
vielen dank

jetzt sollte es klappen