Archiv verlassen und diese Seite im Standarddesign anzeigen : Steuerung von 2 Motoren
Hi,
bin schon seit längerem hier angemeldet und hab hier auch oft sehr nützliche Informationen gefunden, die mich stets weiter brachten, doch nun hab auch ich eine Frage, und zwar bau ich zur Zeit an einem Kettenfahrzeug.
Gesteuert wird der Roboter per Joystick, die Daten per Funk an den Roboter gesendet und dort gelangen diese Daten an den µC ( AT89C51ED2 ). Die Daten werden seriell empfangen und nun zu meinem eigentlichen Problem, und zwar wollte ich wissen, wie ich diese Daten am besten verarbeite? Es kommen ja nacheinander pro Motor acht Bits an, danach dann nacheinander die acht Bits für den zweiten Motor.
Soll ich das jeweilige Byte pro Motor erst einmal auf den Speicher legen und danach die Zahl als PWM abrufen und dann an den Motor senden oder wäre es besser irgendetwas vor den µC zu setzen, der die acht Bits von dem seriellen Funk erst einmal zu einem Byte zusammenfügt und diese mir dann an den µC schickt. Weil dann wäre es ja kein Problem dieses Byte sofort als PWM auszugeben (soweit hab ich das Programm bis jetzt auch, allerdings ist, wie beschrieben, das eigentliche Problem, dass ich die Daten seriell empfang und nicht parallel).
Würde mich über einige Tipps freuen :-)
PS: Falls irgendetwas unklar sein sollte, weil ich mich so kurz oder ungenau ausgedrückt hab, fragt einfach nach ;-)
Hallo dother
Ehrlich gesagt verstehe ich dein Problem nicht ganz.
Du hast eine serielle Funkverbindung. Diese ist an dem UART des Controllers angeschlossen?
Dann brauchst du dich doch überhaupt nicht darum zu kümmern wie die Daten in den Controller geraten sind.
Wurde ein Byte vollständig empfangen löst der UART einen Interupt aus und du kannst die Daten parallel weiterverarbeiten.
Das mit dem Uart interrupt ist sicher eine gute Lösung und sehr einfach.
Ich habe früher selber eine serielle übertragung Programmiert und bin der Meinung es ist besser erst die Bytes zu empfangen und dann an die Ausgänge liefern. Aber das war bei mir damals nur Assamblertechnisch die beste Lösung.
Aber eine Frage für mein Projekt:
Wie steuerst du die Motoren an (FET?) Und wie enststörst du die Motoren? Bzw. Hast du dehn uC von der Motorschaltung entkoppelt. Ein Schaltplan würde mich interessieren.
mfg Matthias
erstmal danke für die schnelle Antworten.
hab zwar schon mal was von Uart gelesen, aber zu dem Zeitpunkt brachte mir das noch nichts bzw. ich hab mich auch nicht weiter mit dem befasst. Allerdings hab ich mich grad kurz erkundigt und so wie's aussieht ist das wirklich eine einfache Sache :-) muss jetzt halt noch schauen, wie ich das mit dem Uart zum Laufen bekomm (muss halt das Datenblatt nochmals durchlesen). Aber seh ich das soweit richtig, dass ich sozusagen nur einen einzigen Eingang brauch, dort kommen die 8 Bits rein, im µC erstellt er damit ein Byte? Und klappt das dann auch, wenn erst das Byte für den linken und dann das Byte für den rechten Motor kommt? (soweit ich das verstanden hab, gibt es mehrere Uarts, aber ich weiß nicht, ob man die über einen Eingangspin regeln kann). Hab mich halt mal auf der Seite informiert: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART
vielleicht gibts hier ja auch gleich jmd. der weiß, wie ich das im Assembler programmier (hab noch nicht soooo viel Ahnung davon, bring mir das erst seit ein paar Monaten selber bei (neben der Schule) und von solchen speziellen Sachen hab ich wie gesagt noch nichts gehört)
auf jeden Fall dir Sandro vielen Dank nochmals
@srem ich geb dir demnächst einen Schaltplan, ist eigentlich relativ simpel aufgebaut und ich hoffe, dass das auch so funktioniert, wie ich mir das vorstell ;-)
Zuerst mal der AT89C51ED2 ist kein AVR! Er stammt zwar auch von Atmel, ist aber eine Weiterentwicklung des 8051 mit sehr vielen Extras und beschleunigtem Prozessorkern.
Dieser Controller hat nur einen UART.
Dieser hat zwei Pins. Einen zum senden und einen zum empfangen.
Der UART ist praktisch das gleiche wie der COM-Port an deinem PC. Allerdings arbeitet er mit TTL- anstat mit RS232-Pegeln wie der PC.
Du mußt ihn auf eine bestimmte Baudrate einstellen mit der er arbeiten soll. Denn die Übertragung erfolgt asynchron. Das heist das keine Taktleitung vorhanden ist.
Desshalb muß auf beiden Seiten die gleicher Baudrate eingestellt sein. Im asynchronen Modus arbeitet er auch nicht nur mit 8-Bit. Es gibt auch immer ein Start- und ein Stopbit.
Aber im Prinzip ist es so wie du gesagt hast. Er empfängt seriell Daten ohne das der Controller etwas dazu tun muß. Und du kannst sie dann parallel auslesen.
Um den UART zu konfigurieren mußt du auf recht viele Register zugreifen.
Er kann nämlich in mehreren Modi arbeiten und braucht noch einen Tackt der die Übertragungsrate vorgibt. Diese wird von einem Timer im Controller erzeugt.
Hier hab ich erst mal nen kleinen Kurs zum einlesen. http://www.erikbuchmann.de/
Auf dieser seite findest du auch einen Codegenerator der dir beim einrichten hilft. Einfach Quarzfrequenz eingeben. Auswählen was du davon haben willst. Und er erzeugt dir fertigen Assemblercode.
edit: Jetzt hab ich ganz vergessen zu fragen was du für ein Funkmodul verwenden willst. Eigentlich alle die ich kenne haben nämlich einen seriellen Ausgang. Sind also praktisch dafür vorgesehen am UART angeschlossen zu werden.
thx der schalplan würd mich echt interessieren
meine mail ist srem111@web.de
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.