-
        

Ergebnis 1 bis 8 von 8

Thema: PWM-Signal erzeugen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164

    PWM-Signal erzeugen

    Anzeige

    Hallo zusammen,

    ich versuche mit einem ATMEGA2561 http://www.atmel.com/Images/doc2549.pdf in Bascom ein PWM-Signal zu erzeugen. An dem ATMEGA habe ich die Pololu Motorsteuerung http://www.pololu.com/catalog/product/755 angeschlossen, klappt leider nicht.

    Zuerst habe ich versucht die Frequenz zu berechnen: (Frequenz des Quartz 16000000/Prescaler 1024)/(2^16Bit*2) = 119 Hz
    Dann habe ich in Bascom die Register des ATMEGA2561 eingestellt auf Fast PWM, Prescaler, usw.
    Tccr1a = &B11000011
    Tccr1b = &B00011101

    Hat jemand vielleicht einen Tipp? Mich interessiert als erstes:
    Habe ich die Frequenz richtig berechnet?
    Habe ich die Register richtig belegt?

    Vielen Dank für die Hilfe im Voraus.

    Grüße

    datatom

    Das Bascom-Programm sieht so aus:
    Code:
    
     ' 
    
    $regfile = "m2561def.dat"
    $hwstack = 82                 '80
    $framesize = 68               ' 64
    $swstack = 68                 '44
    
    
    
    
    $crystal = 16000000           'Quarzfrequenz
    $baud = 19200
    
    
    ' Portbelegung Seite 3 in der ATMEL-DOKU - Pinbelegung siehe Alvidi Doku
    
    
    Config Pinb.5 = Output        ' Pin 22; PB5 für Timer1/ OC1A im FAST PWM-Modus
    
    
    
    
    Config Pinf.0 = Output
    Led0 Alias Portf.0
    Config Pinf.1 = Output
    Led1 Alias Portf.1
    Config Pinf.2 = Output
    Led2 Alias Portf.2
    Config Pinf.3 = Output
    Led3 Alias Portf.3
    
    
    Config Pinc.0 = Output        ' Pin 45; PC0
    Motor1_reset Alias Portc.0
    
    
    Config Pinc.1 = Output        ' Pin 46; PC1
    Motor1_direction Alias Portc.1
    
    
    
    
    Dim I1 As Integer
    Dim I2 As Integer
    Dim Takt_hz As Long
    
    
    Echo Off
    
    
    Led0 = 1                      ' LEDs einschalten
    Led1 = 1
    Led2 = 1
    Led3 = 1
    
    ' reset Motortreiber
    Motor1_reset = 1
    Waitms 500
    
    Motor1_reset = 0
    Waitms 500
    
    Motor1_reset = 1
    
    
    Motor1_direction = 1
    
    
    I1 = 1
    I2 = 50
    
    On Compare1a Timer1_isr
    Tccr1a = &B11000011          
    Tccr1b = &B00011101           '
    Enable Compare1a
    Enable Interrupts
    
    
    Compare1a = 30                ' Frequenz Hz für die Drehgeschwindigkeit
    
    
    Loop
    
    
    End
    
    
    Timer1_isr:
    
    
    I1 = I1 + 1
    
    
    If I1 = 1025 Then
    
    
       'Tccr1b = &B00001000                                      ' Timer/ Counter stopped, no clock source
    
    
    End If
    
    
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Warum so kompliziert? Ein einfaches Config Timer1=Pwm tuts doch auch?
    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Datatom,
    wenn du Fastpwm Modus 15 auswählst, dann ist OCR1A der TOP Wert, bestimmt also die Frequenz, während OCR1B den Umschaltpunkt festlegt. Den PWM kannst du dann an OC1B abgreifen.
    Die Frequenz berechnet sich aus _XTAL/(Prescale*(OCR1A+1)), bei dir also etwa 500Hz.
    Du musst also unbedingt OCR1B festlegen, sonst passiert da nichts.
    Außerdem musst du anstelle von COM1A1:0 nun COM1B1:0 setzen, also so
    Tccr1a = &B00110011
    Tccr1b = &B00011101

    @Thomas E.
    Ich wüsste keinen Weg, wie man mit Bascom direkt den FastPWM Modus setzen könnte.
    Ob Datatom den hier überhaupt braucht, ist natürlich eine andere Frage.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Danke für die Antworten. Ich habe das mit dem Top-Wert und den Umschaltpunkt noch nicht genau verstanden.

    Hier meine Vorstellung:

    Der Topwert ist die Spitze, also der maximale Wert, der beim zählen des Timers erreicht wird.
    Wenn der Timer von Null an hochzählt, ist der Umschaltpunkt der Wert wo von low auf high umgeschaltet wird und bis zum Topwert weitergezählt wird.
    Stimmt das?

    Gibt es eigentlich eine deutschsprachige Erklärung?

    Weiterhin vielen Dank für die Hilfe.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Ja, genau so.
    Bist du eigentlich sicher, dass du eine PWM mit dem Modus 15 brauchst, also eine mit einer genau festgelegten Frequenz? Deine Motorsteuerung sollte doch auch mit normalem PWM gehen, oder?
    Bei Modus 15 kannst du auch nur eine PWM erzeugen, weil du beide OCR1n Register benötigst. Als Alternative ginge noch Modus 14, wo du für die Frequenz das ICR Register verwendest und dann noch beide Ausgänge nutzen kannst.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164
    Also genau genommen weiß ich es nicht ob Modus 15 oder 14? Deswegen schreib ich hier im Forum. Ich möchte einen Motor in verschiedenen Geschwindigkeiten drehen lassen. Ich hatte per CTC einen Schrittmotor per Schrittmotorensteuerung drehen lassen. Da habe ich mir gedacht, das ich von CTC auf FastPWM umstellen muss und schon läuft es. Mir fehlt natürlich das Wissen wie man per PWM einen Motor drehen lässt.

    Kann ich denn mit Modus 14 den PWM-Wert variabel steuern?

    Am besten ist eine gute Erklärung, evtl. ein Tutorial oder eine Buchempfehlung.

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von datatom Beitrag anzeigen
    Am besten ist eine gute Erklärung, evtl. ein Tutorial oder eine Buchempfehlung.
    Da oben, da gibt es so einen Button - da steht RN-Wissen drauf. Da musst du hin.
    Grüße
    Thomas

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo datatom,
    eine deutsche Erklärung für Fast-PWM habe ich nicht zur Hand. Für normales PWM gibt es hier im Forum genügend.
    PWM ist normalerweise an feste Frequenzen gebunden, die sich aus dem Takt des Controllers, dem Prescaler des Timers und der Auflösung der PWM ergeben. Die Frequenzen sind bei normalen PWM Anwendungen auch eher zweitrangig. Es geht vielmehr um das Verhältnis der Ein- und Ausschaltzeiten, die durch Setzen der Register ändern kannst. Das geht bei jeder PWM, sollte also für deine Motoren funktionieren.
    Bei Fast-PWM kann man zusätzlich noch die Frequenz und damit die Auflösung der PWM ändern. Dies ist nur für ganz spezielle Anwendungen notwendig. Wenn du z.B. eine PWM mit einer Aufösung von 100 oder auch 10000 Schritten brauchst, kannst du mit den normalen Modi nicht arbeiten. Die haben immer 8-, 9- oder 10-bit Auflösung, also 256, 512 bzw. 1024 Schritte.
    Hinzu kommt noch, dass Fast-PWM die Puls- und Pausenzeit innerhalb eines Zyklus macht, was de facto zu einer Verdopplung der Frequenz führt. Daher wohl auch der Name Fast-PWM.

Ähnliche Themen

  1. RN-Mega2560 2 kHz-PWM-Signal erzeugen
    Von datatom im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 03.02.2012, 22:53
  2. Antworten: 0
    Letzter Beitrag: 04.07.2007, 17:10
  3. PWM-Signal erzeugen
    Von theodrin im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 11.12.2006, 16:10
  4. PWM Signal erzeugen - Motor steuern
    Von spom im Forum Motoren
    Antworten: 3
    Letzter Beitrag: 07.06.2006, 11:18
  5. PWM-Signal mit Mega32 von 10Hz erzeugen ?
    Von Henrik hessert im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 16.04.2006, 23:54

Berechtigungen

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