-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Gegentakt PWM

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.09.2007
    Beiträge
    20

    Gegentakt PWM

    Anzeige

    Hallo,
    ich versuche schon länger einen Mega8 dazu zu bringen mir an seinen beiden Compare Registern vom Timer1 mir eine gegentakt PWM aus zu geben.Dazu habe ich mir gedacht man kreiert zunächst erstmal den Timer1 so,daß er an Compare1a und Compare1b eine Phasengleiche PWM erzeugt.Um eine gegentakt PWM zu erhalten ( Gegentak PWM=also wenn das eine Compareregister ein HI ausgibt muß das andere Lo sein und umgekehrt) schalte ich immer das jeweils andere Compareregister für die Zeit einfach aus.Beispiel der Ausgabe: Compare1a=LO/HI/LO/HI und Zeitgleich Compare1b=HI/LO/HI/LO.Das habe ich versucht in einen Code zu fassen.Allerdings sagt mir mein Oszi,daß die Nullsetzung der Compareregister nicht richtig funktioniert.Die Rechteckausgabe ist irgendwie "verwischt" bzw unsauber.Nun meine Frage,wo ist in Code der Fehler zu suchen bzw wie macht man das besser?

    viele Grüße

    Code:
    $regfile = "m8def.dat" 
    $crystal = 8000000 
    
    
    Config Portb.1 = Output 
    Config Portb.2 = Output 
    Config Portc.5 = Input 
    
    
    Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , _ 
    Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
    Enable Timer1 
    Start Timer1 
    
    Config Timer0 = Timer , Prescale = 8 
    Enable Timer0 
    On Timer0 Isr_von_timer0 
    Enable Interrupts 
    
    
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc 
    Start Adc 
    
    Dim B As Word 
    Dim Wert As Word 
    Dim Up As Bit 
    Dim Pwm As Byte 
    
    
    
    Do 
    '*** ADC einlesen und auf 8 Bit umrechnen *** 
    
    Wert = Getadc(5) 
    B = Wert / 4 
    
    
    Loop 
    End 
    
    Isr_von_timer0: 
    Timer0 = 192                                                'Zeitbasis 
    
    '*** Compare Register Togglen *** 
    
    Toggle Up 
    
    If Up = 0 Then 
    Pwm1b = 0 
    Pwm1a = Pwm 
    Else 
    Pwm1a = 0 
    Pwm1b = Pwm 
    End If 
    
    '*** PWM Regelung *** 
    
          If B > Pwm Then 
          Pwm = Pwm + 1 
          End If 
    
          If B < Pwm Then 
          Pwm = Pwm - 1 
          End If 
    
    
    Return

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Benutze einfach einen Inverter (Transistor z.B.)

    Gruß Richard

  3. #3
    Gleich vorweg: Bascom ist nicht meine Welt, da kann ich dir nicht helfen. Beschäftige dich mit den Registern TCCR1A, genauer mit den Bits COM1A0/COM1A1 bzw. den selbigen für das Compare Register B. Mit deren Hilfe kannst du auswählen ob der zugehörige Compare Pin bei Comparregister == Zählerregister gesetzt oder rückgesetzt wird.

    Wie man das in Bascom formuliert kann ich nur raten, aber ich würde mal vermuten das es mit etwas wie

    Compare A Pwm = Clear Down , Compare B Pwm = Clear Up

    getan sein sollte. Das würde zumindest in meinen Augen Sinn machen.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ja mit dem Clear down und Clear up legst du fest, wann der Controller schaltet.
    Wenn du Comparea = 50 und Clear up eingestellt hast zählt der Controller von 0-255 und schaltet dann bei 50. Wenn du Clear down eingestellt hast zählt der Controller von 255 runter und schaltet dann bei 50. Und dadurch ergeben sich zwei verschiedene Tastverhältnisse. So kannst du auch deinen Gegentakt PWM erzeugen, indem du Compare A = Clear up und Compare B = Clear down schreibst.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.09.2007
    Beiträge
    20
    Hallo,
    zunächst einmal vielen Dank für eure Antworten! Da bis jetzt alle Antworten dahingehend hindeuten das man ein Signal invertieren sollte möchte ich dazu für alle Antworten stellvertretend auf Kampis Aussage antworten.

    Zitat Zitat von Kampi
    Ja mit dem Clear down und Clear up legst du fest, wann der Controller schaltet.
    Wenn du Comparea = 50 und Clear up eingestellt hast zählt der Controller von 0-255 und schaltet dann bei 50. Wenn du Clear down eingestellt hast zählt der Controller von 255 runter und schaltet dann bei 50. Und dadurch ergeben sich zwei verschiedene Tastverhältnisse. So kannst du auch deinen Gegentakt PWM erzeugen, indem du Compare A = Clear up und Compare B = Clear down schreibst.
    Wie Kampi schon ganz richtig sagte zählt der Controller bei der Einstellung "Up" von 0 bis z.B. 50 und schaltet dann bei 50.Bei der Einstellung "Down" zählt er hingegen von 255 bis 50 herrunter um dann zu schalten.Dabei entstehen dann zwei verschiedene Tastverhältnisse.Dies ist aber nicht erwünscht,ja darf gar nicht sein! Das Tastverhältnis soll immer bei beiden Compareregistern identisch,sprich:gleich groß sein.Ist es z.B. 50 dann soll es bei beiden 50 sein,ist es 100,soll es bei beiden 100 sein.Allerdings soll die Ausgabe zeitlich versetzt sein nämlich immer so,daß wenn das eine ausgegeben wird soll das andere Null sein und umgekehrt so das nie beide gleichzeitig Hi oder Lo sein können.Halt gegentakt PWM.Das hat meiner Meinung nach nichts damit zu tun das man eines der beiden Signale negiert/invertiert .

    viele Grüße

  6. #6
    Ok, das ist dann doch nicht wie von mir vermutet der richtige Timer Modus. Invertieren reicht aber definitiv aus. Es sei denn, ich missverstehe deine Anforderungen.

    Du musst, wie schon gesagt an die COM1A0/COM1A1 Bits ran kommen, wie auch immer das in Bascom geht.

    Auszug aus dem Datenblatt (Bei meinem auf Seite 9:
    Compare Output Mode, Fast PWM:

    COM1A0 = 0
    COM1A1 = 1
    --> Clear OC1A/OC1B on Compare Match, set OC1A/OC1B at
    BOTTOM, (non-inverting mode)

    COM1A0 = 1
    COM1A1 = 1
    --> Set OC1A/OC1B on Compare Match, clear OC1A/OC1B at
    BOTTOM, (inverting mode)

    Klingt doch eigentlich gut, oder? Nun musst du nur noch rausfinden, wie man die passenden Bits setzt. Kann man in Bascom nicht auch direkt auf die Register zugreifen?

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Wie Kampi schon ganz richtig sagte zählt der Controller bei der Einstellung "Up" von 0 bis z.B. 50 und schaltet dann bei 50.Bei der Einstellung "Down" zählt er hingegen von 255 bis 50 herrunter um dann zu schalten.
    Ich bin zwar auch Bascom-Laie, bin aber mit dieser Beschreibung nicht ganz einverstanden. Clear Up/Down sind Parameter für die Phase-Correct-Modi des Timers. Hierbei zählt das Zählregister von null aufwärts bis zum Maxwert und wieder zurück nach null. Dabei wird sowohl beim Hoch- wie auch beim Runterzählen jeweils ein Match-Compare mit dem OCR1x erkannt und der OC1x-Ausgang getogglet. ClearUp/Down legt dabei fest, bei welchem Match der Ausgang Low werden soll. ClearUp schaltet beim Hochzählen auf Low, ClearDown beim Runterzählen. Hier das modifizierte Phase-Correct-Setup, das ich bei der Bee verwendet habe:

    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1

    10Bit drängen sich bei der Sollwertvorgabe mit dem ADC direkt auf;) PWM-Frequenz mit Prescaler=1 wäre übrigens Kontrollertakt/2048

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    [quote="MichaF"]Ok, das ist dann doch nicht wie von mir vermutet der richtige Timer Modus. Invertieren reicht aber definitiv aus.

    Ich frage mich nur warum das nicht einfach mit einer PWM und
    Hardware Inverter ( Nand Gatter z.B.) gemacht wird. Dann wird
    das ganze zwangsläufig genau genug.

    Gruß Richard

  9. #9
    Ist eine Möglichkeit - klar. Aber es ist absolut kein Problem das den Controller erledigen zu lassen, warum also nicht die paar zusätzliche Bauteile sparen wenn das Ergebnis gleichwertig bleibt? Zudem wissen wir nicht, ob Leon3770 nicht eine fixe Hardware vor sich liegen hat. Nicht jeder mag freifliegende Bauteilkonstruktionen auf einer ansonsten recht ansehlichen Platine

    Gruß Micha

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von Leon3770
    Hallo,
    zunächst einmal vielen Dank für eure Antworten! Da bis jetzt alle Antworten dahingehend hindeuten das man ein Signal invertieren sollte möchte ich dazu für alle Antworten stellvertretend auf Kampis Aussage antworten.

    Zitat Zitat von Kampi
    Ja mit dem Clear down und Clear up legst du fest, wann der Controller schaltet.
    Wenn du Comparea = 50 und Clear up eingestellt hast zählt der Controller von 0-255 und schaltet dann bei 50. Wenn du Clear down eingestellt hast zählt der Controller von 255 runter und schaltet dann bei 50. Und dadurch ergeben sich zwei verschiedene Tastverhältnisse. So kannst du auch deinen Gegentakt PWM erzeugen, indem du Compare A = Clear up und Compare B = Clear down schreibst.
    Wie Kampi schon ganz richtig sagte zählt der Controller bei der Einstellung "Up" von 0 bis z.B. 50 und schaltet dann bei 50.Bei der Einstellung "Down" zählt er hingegen von 255 bis 50 herrunter um dann zu schalten.Dabei entstehen dann zwei verschiedene Tastverhältnisse.Dies ist aber nicht erwünscht,ja darf gar nicht sein! Das Tastverhältnis soll immer bei beiden Compareregistern identisch,sprich:gleich groß sein.Ist es z.B. 50 dann soll es bei beiden 50 sein,ist es 100,soll es bei beiden 100 sein.Allerdings soll die Ausgabe zeitlich versetzt sein nämlich immer so,daß wenn das eine ausgegeben wird soll das andere Null sein und umgekehrt so das nie beide gleichzeitig Hi oder Lo sein können.Halt gegentakt PWM.Das hat meiner Meinung nach nichts damit zu tun das man eines der beiden Signale negiert/invertiert .

    viele Grüße
    Oh verzeihung . Dann hab ich wohl den Text falsch interpretiert.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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