-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: PWM auf Treiberstufe

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    22

    PWM auf Treiberstufe

    Anzeige

    Hallo ich habe folgendes Problem und hoffe ihr könnt helfen.

    Ich habe die Aufgabe eine Treiberstufe über zwei PWM Kanäle anzusteuern.

    Die Treiberstufe wird so angesteuert, dass bei PWM_High der obere FET
    angesteuert wird
    und bei PWM_Low der untere FET.

    Siehe Bild Treiber im Anhang

    Mein Problem ist, dass ich die PWMs abwechselnd schalten muss.
    Wenn PWMH = 1 dann muss PWML = 0.

    Besse gesagt ist, dass mein PWM Puls variabel eingestellt wird, d.h.
    während des Betriebs sich ständig ändert.
    Und der PWML immer für die Zeit, die PWMH auf 1 steht, auf 0 stehen
    muss. Wie ist so etwas zu realisieren?

    Mein Problem ist das PWM Signal selbst. Es muss so aussehen:

    Siehe Bild PWM Signal im Anhang

    Wie man sehen kann ist das PWMH auf High währenddessen ist PWML auf
    Low.
    Wenn ich sie beide gleichzeitig auf High setze dann schalte ich Vss auf
    Masse durch. Der PWML zieht den OUT schneller auf Low sobald er auf High
    steht. Deshalb die Zeitversetzten PWM signale. Mein Problem ist, dass
    ich nicht weis wie ich den PWML negieren kann oder so. Ich programmiere
    den µC in C.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken pwm_signal.jpg   treiber_137.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Ich sehe nicht, wie das mit der Hardware-PWM zu realisieren sein sollte.
    Du wirst die PWM per Software erzeugen müssen. Dann ist es relativ leicht, die Anforderungen zu erfüllen.
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Ich würde da auch zu einer Software-PWM raten, wenn es denn wirklich rein softwaremäßig gelöst werden muss (gäbe ja eigentlich auch noch Inverter die man einbauen könnte, um einen Kurzschluss schon hardwaremäßig auszuschließen).
    So viele Treppen und so wenig Zeit!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Hallo,

    Crossposting: http://www.mikrocontroller.net/topic/106794#new

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    22
    Ich nutze die PWM Funktion des Kontrollers. Also Hardwarelösungsansatz.

    Durch den Prescaler kann die Zeit eines Ticks ermittelt werden. Dann
    gibt man nach der Initialisierung der PWM Routine die Anzahl der Ticks
    vor, die das Signal auf High steht. Den rest der Ticks steht das Signal
    auf Low.

    Die Treiberstufe ist ein SA305EX von Apexx.

    Ich würde ungern noch zusätzliche Bauteile, wie NANDS (Inverter), einbauen. Ich dachte eigentlich, dass der Kontroller etwas an Bord hat, um sowas zu realisieren.

    Das Problem ist, dass ich damit eine Regelung aufgebaut habe. Mein
    Stellsignal ändert sich und dementsprechend natürlich auch die Anzahl
    der Ticks, die ich der Routine mitgebe. Mit einem PWM funktioniert das
    wunderbar, doch für die Halbbrücke brauche ich eben zwei PWM Signale wie oben dargestellt. Also ändert sich praktisch stets das Puls Pausen Verhältnis.

    Bei der Software Lösung müsste ich dem Timer immer die Überlaufgrenze neu mitgeben oder? D.h. abhängig von meinem Stellsignal, oder?

    Gruß vladoo

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Ich nutze die PWM Funktion des Kontrollers. Also Hardwarelösungsansatz.
    Mit der Hardware-PWM geht es aber nun mal nicht.
    Und zusätzliche externe Hardware würde auch deutlich aufwendiger werden, als der eine von Felix G vorgeschlagene Inverter.

    Bei der Software Lösung müsste ich dem Timer immer die Überlaufgrenze neu mitgeben oder? D.h. abhängig von meinem Stellsignal, oder?
    Nein, den Timer würde man einfach durchlaufen lassen. Was du dem Stellsignal jeweils anpassen müsstest, wäre der Compare-Wert. Dann bräuchtest du noch den Compare-Interrupt und den Overflow-Interrupt, beide wären aber sehr einfach.

    Overflow-Interrupt:
    PWML auf Low
    (*)
    PWMH auf High

    Compare-Interrupt:
    PWMH auf Low
    (*)
    PWML auf High

    Bei (*) könntest du dann noch nach Bedarf NOPs einfügen, um es an die Schaltzeiten der FETs anzupassen.
    MfG
    Stefan

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    22
    Hi Stefan, danke für deine Antwort.

    Wie funktioniert das ganze? Irgendwie verstehe ich das nicht so ganz.
    Der Timer wird initialisiert und läuft einfach durch.

    Den overflow Interrupt verstehe ich schon irgendwie. Bei einem vorgegebenen Grenzwert bzw. bei überschreitung wird der Interrupt ausgelöst.

    Doch den compare Interrupt verstehe ich irgendwie nicht ganz. Wann wird der ausgelöst? Der Timer1 hat 2 compares A und B. Ist es egal welchen man da nimmt.

    hast du mir vieleicht ein Codeschnipsel dazu, das wäre echt nett.

    Gruß vladoo

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Den overflow Interrupt verstehe ich schon irgendwie. Bei einem vorgegebenen Grenzwert bzw. bei überschreitung wird der Interrupt ausgelöst.
    Jein. Der Grenzwert wird nicht von dir vorgegeben, sondern ist durch die Hardware gegeben (Overflow=Überlauf). Dieser Interrupt wird aufgerufen, wenn der Zähler den maximalen Wert erreicht hat und wieder bei Null anfängt, bei einem 8-Bit-Zähler also bei 255->0 und bei einem 16-Bit-Zähler bei 65535->0.

    Doch den compare Interrupt verstehe ich irgendwie nicht ganz. Wann wird der ausgelöst?
    Wenn der Zähler einen von dir vorgegeben Wert erreicht hat. Er geht dann aber nicht auf 0 zurück (einen solchen Modus gibt es aber auch, nennt sich CTC, Clear Timer on Compare), sondern zählt einfach weiter.

    Der Overflow-Interrupt erzeugt also die Periode der PWM (mit einer festen Länge), und der Compare-Interrupt erzeugt den Pegelwechsel an einer von dir vorgegebenen Stelle innerhalb der Periode.

    Der Timer1 hat 2 compares A und B. Ist es egal welchen man da nimmt.
    Ja.

    hast du mir vieleicht ein Codeschnipsel dazu, das wäre echt nett.
    Den Interrupt-Code habe ich schon aufgeschrieben, das Ändern des Duty-Cycles ist ein einfaches "OCRxx = NeuerWert;", und für die Initialisierung des Timers möchte ich dich doch bitten, selber mal ins Datenblatt zu schauen (ich habe nicht jedes einzelne Konfigurations-Bit im Kopf, außerdem weiß ich gar nicht, um welchen AVR es geht).
    MfG
    Stefan

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    22
    Hallo Stefan.

    Ich nutze den ATMega128. Auf dem Evaluierungsboard C-Control-Pro.
    Programmiert wird in Compat C.

    Ich glaube soweit verstanden. Zwei Fragen hab ich noch.

    1 .Wenn der 16 Bit zähler bis 65535 läuft, wie kann ich dann eine Periode festlegen? Ich will z.B. ne Periode von 100 µs. Wie kann man das einstellen? Wahrscheinlich zwei mal Compare Interrupt oder?

    2. Wie lange braucht der Zähler die 65535 hochzuzählen?

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Wenn der 16 Bit zähler bis 65535 läuft, wie kann ich dann eine Periode festlegen? Ich will z.B. ne Periode von 100 µs. Wie kann man das einstellen? Wahrscheinlich zwei mal Compare Interrupt oder?
    Ja, oder indem du im Overflow-Interrupt den Timer-Wert "vorlädst".

    2. Wie lange braucht der Zähler die 65535 hochzuzählen?
    Diese Frage ist jetzt nicht wirklich dein Ernst, oder?
    Das ist essentielles Basis-Grundlagen-Wissen. Du nimmst dir jetzt das Datenblatt und liest dir den Abschnitt zum Timer einmal komplett durch. Das ist ja wohl das Mindeste, was du mal machen könntest, bevor du Fragen dazu stellst. Und wenn du dir dann diese Frage nicht selber beantworten kannst, kann ich dir auch nicht helfen.
    Die Formulierung "Ich habe die Aufgabe" legt nahe, dass es um eine Hausaufgabe oder was Berufliches geht. Alles werde ich dir daher nicht vorkauen.
    MfG
    Stefan

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •