Zweck meiner H-Brücke ist derzeit nur der BASCOM Kurs von Gerhard (Diezel)! Als Motor dient ein altes Servo ohne Elektronik!
Nach 2 abgebrannten H-Brücken mussten wir uns mehr mit dem Thema beschäftigen als wir Ürsprünglich wollten! Bei unseren ersten Versuchen steuerten wir die Transistoren NPN & PNP zugleich an, dies war aber ein Fehler, denn wenn man sich die Transitoren in ihre Grundbauteile aufschlüsselt dann erkennt man, dass über die Dioden ein satter Kurzschluß entsteht.
IMG_1038.JPG - Bild entfernt (keine Rechte)
Die Verschaltung hatten wir uns bei Xenton aus Beitrag "#68 RE: Forums-Bascom-Kurs" abgeschaut!
Unsere Lösung ist jetzt das wir die PNP (Pin 4 & 8) Transistoren aus dem µC ansteuern und die NPN (Pin 1 & 3) von den Geschalteten Motorausgängen versorgt werden! Die NPN werden jeweils mit 10kOhm gegen Masse gezogen um das korekte Durchschalten zu ermöglichen.
Würde ja gern die Umschaltung mit "Softanlauf" machen, nur fehlt mir noch ein bisschen das Know How wie!! Aber ich Denke du wirst uns sicherlich noch ein paar tipps geben wie ich so was errreiche!! Mir würde ein Denk Anstoß in die Richtung gut tun! Zur Zeit habe ich nur eine wage Idee wie ich die PWM einbinde! Theoretisch müsste ich die PWM (Clear Up) hoch fahren und eingeschaltet lassen und beim Richtungswechsel Clear down vor Clear Up setzen! Dann müsste es doch so laufen sanfter Anlauf und richtungs wechsel! Bin ich da richtig
Werde sobald ich ein wenig mehr Luft habe mal einen Versuch starten!
Nein, Du benutzt die Begriffe in einem falschen Zusammenhang. Clear Up oder Down wird benutzt, um den PWM-Ausgang an die gegebene Situation anzupassen. Im Normalfall wird man Clear Up verwenden. Folge ist, daß wenn der PWM-Wert gleich 0 ist, daß der Ausgang dauerhaft Low bleibt. Das wäre das Richtige, wenn z.B. ein Motor getrieben werden soll. In unserem Kursbeispiel verwenden wir Clear Down, weil unsere LED eine invertierte Ansteuerung braucht. Zur Erinnerung: die LEDs auf dem STK500 hängen mit der Anode direkt an Plus, die Kathode ist mit dem Atmega verbunden (den Transistor denken wir uns jetzt mal weg). Jetzt ist´s so, daß wenn der Ausgang des µC auf High geschaltet ist, daß kein Strom fließen kann, da die LED mit dem anderen Pol ja auch an Vcc hängt. Um die LED leuchten zu lassen, müssen wir den Ausgang Low schalten. Und genau darum die invertierte Ansteuerung, darum Clear Down.
Was Du wohl mit Clear Up/Down meinst, ist das Auf- und Abdimmen der LED. Dem Programm selbst, ist´s aber total egal, ob da hinten dran eine LED dranhängt oder ein Motor. Du kannst den Programmteil zum Aufdimmen der LED auch zum Hochdrehen eines Motors verwenden. Das langsame runterfahren der LED würd ich mir sparen. Der Motor wird von alleine langsamer, wenn er keinen Saft mehr bekommt. Einfach ne kurze Wartezeit rein, das sollte reichen.
Arbeite meine Texte durch, vertstehe das, was ich dort reingeschrieben hab und dann kannst Du die Ansteuerung der H-Brücke mit 2 LEDs durchspielen. Da geht dann auch nicht gleich was kaputt.
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
@Gerhard Danke noch mal für den Denkanstoß! Habe Clear Up/Down wirklich falsch verstanden! Bei meiner H-Brücke benötige ich wie bei den Led`s Clear Down! Ist schon mal einfacher für mich!
Habe jetzt ein kleines Programm zum Drehzahl (PWM) Stufenlos hoch und runterfahren! H-Brücke hängt an PB1 und PB2 Nur beim Richtungswechsel stehe ich an! Erst mal meine funktionierendes Programm:
'*** Ein/Ausgänge deklarieren ************************************************** S1 Alias Pind.6 S2 Alias Pind.5 S3 Alias Pind.7 S4 Alias Pind.4
'*** Variablen definieren ****************************************************** Dim Zaehler As Word 'Word weil Werte zwischen 0 und 1023 möglich Dim Pwmold As Integer Dim Pwma As Integer Dim Pwmb As Integer
'*** Timer konfigurieren ******************************************************* Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
'erstmal noch beide Ausgänge AUS
Pwm1a = 0 'PWM-Kanal A des Timer1 Vergleiswert zuweisen Pwm1b = 0 'PWM-Kanal B des Timer1 Vergleiswert zuweisen Pwma = 0 'Pwma Startwert = 0 zuweisen
If S1 = 0 Then Pwma = Pwma + 1 ' S1 Drehzahl erhöhen If Pwma > 1023 Then Pwma = 1023 If S2 = 0 Then Pwma = Pwma - 1 ' S2 Drehzahl verringern If Pwma < 0 Then Pwma = 0 If S3 = 0 Then Pwma = 0 ' S3 Stop Waitms 20 Pwm1a = Pwma If Pwma <> Pwmold Then Print Pwma Pwmold = Pwma End If
Loop
End
Habe im Elektor Verlag noch ein hübsche Anleitung gefunden die Taster in einer Subroutine abzufragen! Werde mich noch darüber hermachen wenn ich weiß wie ich die Umschaltung Link/Rechts machen kann
Gruß Michael
Dateianlage:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
H.Brücke.txt
Du machst also eine 10-Bit-PWM. Ich finde, daß dies viel zu fein ist. 8-Bit reichen vollkommen, sind dann auch 2x256=512 Stufen. Am einfachsten ist es, wenn Du Dir eine Hilfsvariable im Programm einführst. Diese kann dann mit den Tastern von 0 - 511 verändert werden. Sie deckt also den Bereich für beide PWMs ab, Vorwärts und Rückwärts. Denk dran, die Variable als Word zu definieren. Die einzelnen Werte dieser Hilfsvariable bedeuten für Deine PWM dann folgendes: Wert 0 -> vollgas Rückwärts Wert 255 -> Stop Wert 511 -> vollgas Vorwärts
Im Programm mußt Du dann die PWM-Werte entsprechend der Variable setzen: Variable > 255 -> PWM1a = Variable - 255 ; PWM1b = 0 Variable < 255 -> PWm1a = 0 ; PWM1b = 255 - Variable Variable = 0 -> PWM1a = 0 ; PWM1b = 0
Hoffe Du kannst meine Gedanken so nachvollziehen.
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
Erst mal Danke für deine Hilfe! Habe schon angefangen damit zu kämpfen!
Habe ich dich richtig verstanden: 1 Variable als Word, 1 Taste Wert von 0-511, 1 Taste Wert von 511-0 255 ist dabei mein "Null" Wert! Die Werte PWM1a & PWM1b von 0-254 & 256-511 zuweisen.
'*** Ein/Ausgänge deklarieren ************************************************** S1 Alias Pind.6 S2 Alias Pind.5 S3 Alias Pind.7 S4 Alias Pind.4
'*** Variablen definieren ****************************************************** Dim Pwm_wert As Word 'Word weil Werte zwischen 0 und 1023 möglich Dim Pwmold As Word
'*** Timer konfigurieren ******************************************************* Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
'erstmal noch beide Ausgänge AUS Pwm1a = 0 'PWM-Kanal A des Timer1 Vergleiswert zuweisen Pwm1b = 0 'PWM-Kanal B des Timer1 Vergleiswert zuweisen Pwm_wert = 255
Dein Listing ist super, alles klappt habe lediglich in Zeile 46 Pwm1a = Pwm_wert - 256 etwas abgeändert! Grund dafür war das die Led im Wert 511 nur klimmt und nicht voll angesteuert wurde!
Danke für das Listing
Wie fügst du die Listing im Text mit Zeilen Nummern ein??
ZitatWie fügst du die Listing im Text mit Zeilen Nummern ein??
Du klickst auf Antworten. Im nächsten Fenster sind rechts oben die Code-Buttons, z.B. für Fettschrift, Kursiv, Unterstrichen und gleich das nächste, mit den <>-Pfeilen, ist genau die Funktion, mit der Code so dargestellt wird.
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog