wie schon in Diezel`s Thread angesprochen habe ich mich ebenfalls als Anfängerprojekt an einem Motor- und Servotester probiert. Ich habe den File ebenfalls erfolgreich kompiliert aber funktionieren tut es leider trotzdem nicht.
Ich habe leider auch noch keine Idee wie ich die H-Brücke bzw. die softwareseitige Ansteuerung realisieren kann. Wie kann ich das denn realisieren?
Vielleicht wären ja die Bascom-Experten so nett mal über mein kleines Projekt zu schauen? Vielleicht habt ihr ja ein paar Tipps für mich, was ich ändern muss oder ob ich doch besser gleich alles neu machen sollte...
Ich fände es wirklich nett wenn ihr mir helfen könntet. Wie gesagt, das ist mein erstes Projet in Bascom und ich muss mir das halt alles erstmal beibringen.
Viele Grüße Alex
Dateianlage:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
Tester1.bas.txt
aaaalso, zum Servo-Teil: die Konfiguration sollte passen, jedoch dürfen die Werte, die das Servo anfahren soll, nur in einem bestimmten Rahmen liegen. Bei mir haben sich Werte zwischen 40 und 110 als Stabil gezeigt. Bei Dir sind Werte zwischen 0 und 204 möglich.
Dann zur PWM: so eine H-Brücke wird mittels zweier Leitungen angesteuert, jeweils eine pro Drehrichtung. Die Konfiguration sieht dann so aus:
1 2 3
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1024 Compare1a = 255 Compare1b = 255
Du mußt das Programm so auslegen, daß z.B. bei Vollgas vorwärts Compare1a = 0 und Compare1b = 255 ist. Somit steht am Pin OC1A ein Dauersignal an, OC1B ist dann 0. Für Zwischenwerte und die andere Drehrichtung entsprechend. Will Dir jetzt nicht alles so hinschreiben. Sollst, und willst bestimmt auch, etwas dabei lernen.
Vielen Dank für deine Mühe. Du hast recht, alles vorkauen bringt nichts, davon lernt man nicht. Ich habe mir nun einige Gedanken zu dem Thema gemacht.
Ich würde sagen, dass ich erst einmal aus dem ADC-Wert die gewünschte Richtung ermitteln muss. Das heißt alles was beispielsweise im Bereich von 0-254 liegt ließe den Motor nach rechts drehen, von 256-510 nach links. Bei einem Wert von 255 würde sich nichts tun. Kann ich dann den Wert direkt auf einen Ausgang legen? Beispielsweise 150 auf OC1A?
wie schon oben geschrieben: Du brauchst zwei Ausgänge mit PWM zur Steuerung einer H-Brücke. Nicht nur einen. Da mußt Du dich noch schlau machen. Hier wären noch Schaltungsbeispiele, aufgebaut aus einzelnen Transistoren: http://www.mikromodellbauwelt.de/html/fahrtregler.html Versuch mal zu verstehen, was in einer H-Brücke passiert und wie sie geschaltet wird. Google wird dir bestimmt helfen. Wenn das sitzt geht´s gleich viel leichter :-)
Vielen Dank für deinen Tipp. Ich habe mich mit dem Thema H-Brücke beschäftigt, es geht auf jeden Fall leichter wenn man versteht, was man machen will:)
Ich habe mal wieder etwas programmiert, allerdings bekomme ich Fehler beim Compilieren. Ich habe bereits mehrfach versucht die Fehler zu beheben, allerdings leider ohne Erfolg. Ich hänge euch die Datei mal wieder an, es wäre nett wenn ihr einen kurzen Blick drauf werfen könntet und mir sagen würdet, was ich falsch gemacht habe. Mir kommt auf jeden Fall die If-Verschachtelung komisch vor.
Ich habe über einen Beitrag in diesem Forum einen Verweis auf diesen Beitrag gefunden:
2. Die IF Verschachtelung hat einen Syntaktischen Fehler:
If Analogwert_0 < 255 Then Analogwert_0 = Oc1a Elseif Analogwert_0 > 255 Then Analogwert_0 = Oc1b Elseif Analogwert_0 > 510 Then Analogwert_?????????? = 510 End If
sollte wohl so aussehen:
If Analogwert_0 < 255 Then Analogwert_0 = Oc1a Elseif Analogwert_0 > 255 Then Analogwert_0 = Oc1b Elseif Analogwert_0 > 510 Then Analogwert_0 = 510 End If
ich habs grad mal Compilieren lassen, folgende Fehler kommen: - Zeile 43 gefällt ihm "Oc1a" nicht, schreib mal "Compare1a", selbes gilt für "0c1b" => "Compare1b" - die If-Elseif-Abfragen dürfen so nicht geschrieben werden. Einzeilig geht´s nur bei bei einer einfachen If-Abfrage
1 2 3 4 5 6 7
If Analogwert_0 < 255 Then Compare1a = Analogwert_0 Elseif Analogwert_0 > 255 Then Compare1b = Analogwert_0 Elseif Analogwert_0 > 510 Then Analogwert_0 = 510 End If
- dann noch wie von DesignDevil schon geschrieben, die fehlende "0" bei "Analogwert_0" ergänzen
Jetzt wirds fehlerfrei compiliert. Du bist wieder dran.
Gruß Gerhard
Edit: Hab grad noch die Zuweisungen "Analogwert_0 = Oc1a" usw. nach "Compare1a = Analogwert_0" umgedreht
danke für eure Tipps. Ich habe jetzt die Textzeilen eingearbeitet. Des weiteren habe ich den Output-Pin für die LED geändert, da diese auf dem OC1A lag.
Allerdings funktioniert die Schaltung leider nicht wie gewünscht. Die LED blinkt, obwohl der dazugehörige Schalter nicht aktiviert wurde. Wird der Pin der die LED ein/ausschalten soll auf 1 geschaltet leutet diese konstant, allerdings flackert sie teilweise. Ich vermute, dass sie nun einfach nur wesentlich schneller flackert. Das Servo tut keinen Mucks und reagiert auch nicht auf den Poti. Der Motor ruckt immer wieder an, die Dauer des Anruckens wird über den Poti gesteuert. Ich habe auch die von mir zuvor beschriebene H-Brücke in meine Schaltung eingebaut. Allerdings scheint diese auch nicht zu funktionieren, der Motor ändert nicht seine Drehrichtung, doch das sollte sie von der Programmierung her eigentlich tun.
Habt ihr eine Idee woran das liegen kann?
Viele Grüße Alex
Dateianlage:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
Tester1_2.bas.txt
also ich halt mich mal immer noch ein bischen zurück, willst ja was lernen.
1. die Stackwerte fehlen noch
2. zum Servo: der ADC liefert Werte zw. 0 und 1023. Du teilst diese durch 5, bleiben also noch 0 bis 204. Wie ich oben schon beschrieben hab, werden nicht alle Werte vom Servo als gültig erkannt werden. Aber in einem bestimmten Bereich müsste es eigentlich funktionieren.
3. Die PWM für die H-Brücke Du konfigurierst Timer1 für die PWM, schreibst aber "Enable Timer2" und "Start Timer2"
4. Die Verrechnung von Analogwert_0 der ADC liefert von 0 bis 1023, du teilst durch 4, bleiben noch 0 bis 255. Deine If-Abfrage will aber 0 bis 511. Dann mußt Du noch, wenn z.B. "Compare1a = Analogwert_0" gesetzt wird, Compare1b auf 255 setzen.
5. dein Schalter für die LED dort glaube ich, daß ein Pull-Up oder -Down nicht schaden könnte. Je nachdem, wogegen der Schalter zieht. Dein Hardware-Aufbau wäre auch noch interessant. Das Flackern der LED könnte an einer schlechten Spannungsversorgung oder fehlendem Kondensator liegen.