- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Welcher AVR besitzt wieviele Timer und wie geht PWM

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Anzeige

    Praxistest und DIY Projekte
    Also gut, ich hab jetzt nichmal etwas rumgesucht und was gefunden, wo Frank schonmal alles erklärt hat.

    Der Code:

    Code:
    Config Pind.4 = Output                                      'Linker Motor PWM 
    Config Pind.5 = Output                                      'Rechter Motor PWM 
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
    Pwm1a = 0 
    Pwm1b = 0 
    Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8
    Dazu hab ich jetzt aber einige Fragen:
    1. Warum sind es gerade Pind.4 und Pind.5, ist das Hardwarebedingt, oder könnte man das noch verändern?
    2. Diese Anweisung ist mir nicht klar:
    Tccr1b = Tccr1b Or &H02 'Prescaler = 8
    3. Ich kann jetzt also:
    Pwm1a = 0
    Pwm1b = 0
    einfach setzten, und zwar unabhängig voneinander.

    Der AT90S2313 besitzt ja nur einen PWM. Muss ich da Timer0 oder 1 verwenden? Und kann ich trotzdem 2 Ports mit einem Timer ansteuern wegen Pwm1a und 1b?

    Bitte um Antoworten [-o<

    MFg Moritz

  2. #12
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hi,

    zu Frage 1:
    Ja ist Hardware bedingt. Erkennt man an der Pin-belegung im Datenblatt
    Hier hilft dir sicher auch folgender Artikel:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=541

    2. Diese Anweisung setzt das Register des AVR, das den Frequenzteiler bestimmt. Die genaue Registerbedeutung findet man auch im Datenblatt. Hier wird Prescaler (Teiler festgelegt. Das bedeutet das die Taktrate des Prozessors geteilt durch 8 für PWM genutzt wird.

    3. Ja mit diesen Aneisungen kann PWM für die beiden PI´s unabhängig festgelegt werden. Je nach eingestelltem Register von 0 bis 255 oder höher.
    Wichtig ist: Durch diese Zuweisung wird nicht die Frequenz verändert sondern nur die länge des High-Pegels pro Periode. Am besten man macht sich eine Skizze um das besser zu verstehen.

    Die Frage zum 2313 kann ich nicht so genau beantworten da ich mit diesem nur ganz wenig gemacht habe. Wenn er nur ein PWM hat, kann er auch nur einen PIN ansteuern.

    Man kann aber mit Hilfe eines Interrupts und Timers auch PWM-Signale erzeugen. Das ist aber ein umfangreicheres Thema.

    Gruß Frank

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Erstmal danke für die Antwort, so langsam versteh ich das.
    Aber ich bin manchmal etwas schwer von Begriff.

    Und zwar nochmal zum Prescaler:
    Mir ist bewusst, dass man einen Zyklus von 255 bzw. 1024 Takten hat. Und entsprechend viele Takte high oder low setzt. Wie lang ist ist aber den nun ein Zyklus? Das hat doch was mit dem Prescaler zu tun, oder. Man verwendet dann vermutlich auch unterschiedliche Prescaler je nachdem was für einen Timer man verwendet.

    MFG Moritz

  4. #14
    Gast
    Lies dir mal die verlinkten Tutorials zum Thema AVR usw. durch, das wirst du viele nützliche Informationen finden. Ansonsten hangelst du dich hier doch nur von einer Frage zur nächsten.
    Für alle, die Englisch können ist die Timerfunktionsweise auch sehr ausführlich im Datenblatt des jeweiligen MC dokumentiert.

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also ich hab mir das Manual mal durchgelesen, wenn ich das richtig vertehe, liegt am Prescaler 4 MHz (Quarzfrequenz) an.
    Diese wird dann je nach Prescaler geteilt. Ergibt die LÄnge eines Zyklus!
    UNd dann nocheinam durch 1024 bzw. 256 je nach Timer geteilt.

    Die LÄnge eines 'Taktes' ist also: 4 Mhz/Presacler (z.B. 8 ).
    256, bzw 1024 davon ist dann ein Zyklus.
    Takt ist kein schöner ausdruck, sorry.

    Wenn ich also will, dass das PWM möglichst oft wiederhohlt wird, nehme ich also ein schnelles Quarz (8 Mhz), einen niedrigen Prescaler (8 ) und den 8 Bit Timer (da weniger 'Takte'):

    8000000/8/256 = Siganlwiederholung = ca 3,9 Khz Oder?

    MFG Moritz

  6. #16
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Die PWM-Frequenz erechnet sich somit
    (Quarzfrequenz / Prescaler) /( 2^Timerbits+1) -2

    Also wenn du 4 Mhz Quarz mit Prescaler (denk die das Wort Teiler für Prescaler) 8 und Timerauflösung von 8 Bit hast. Dann ergibt sich eine PWM-Frequenz von:
    (4000000 / 8 ) / (2^8+1) -2=974 Hz (also Periode 1,03 ms)

    Die Formel sieht etwas kompliziert aus, es ist aber nicht so schwierig wie es aussieht. Die Formel berücksichtigt halt das der gesamte Timer pro Periode vor und zurück gezählt werden muss.

    Man kann die Fomel etwas vereinfachen:
    Bei 8 Bit Auflösung einfach:
    (Qurzfrequenz / Prescaler) / 510

    Bei 9 Bit Auflösung einfach:
    (Qurzfrequenz / Prescaler) / 1022

    Bei 10 Bit Auflösung einfach:
    (Qurzfrequenz / Prescaler) / 2046

    Wenn der Timer nur 8 Bit hat geht natürlich auch nur die 8 Bit Variante.

    Im Grunde ist bei vielen Dingen wie der Motorsteuerung die PWM-Frequenz aber nicht allzu wichtig. Ob Du da 2Khz oder 10Khz nimmst, macht keinen spürbaren Unterschied.
    Entscheident ist wie lange das Signal in einer Periode (ich halte das noch für den besten Begriff) auf High liegt. Und nur diese Zeit wird mit

    Pwm1a = x
    oder
    Pwm1b = x

    bestimmt. Mit X=0 bedeutet das das die ganze Periode kein High Pegel vorhanden ist (Motoren sind aus). Mir X=255 (bei 8 Bit Auflösung) gibts du an das die ganze Periode das Signal auf High sein soll (Motor vollgas).
    Am besten man schaut sich das mal in einem Buch mit paßenden Skizzen an, z.B. von Rowald oder Kühnel!

    Gruß Frank

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Danke jetzt hab ichs kappiert!
    Werde es die Tage dann mal ausprobieren.

    Jetzt noch eine Idee, die vielleicht auch schonmal jemand anderes hatte.
    Wenn ich einen Servo damit ansteuern will, z.B. so:

    1/(4000000/Teiler(16)/510) würde ich auf 20,4 ms kommen.
    Wenn ich es richtig verstanden habe, ist es bei Servos entscheidend, wie lang die IMoulsdauer dann ist, also zwischen x und y ms. damit könnte man den Servo also Stufenweise regulieren, oder hab ich das alles falsch verstanden, und kann nur entweder Voll Vorwärts, oder voll rückwerts?

    MFg Moritz

  8. #18
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Also mit PWM kannst du Servo garnicht ansteuern, das Signal ist zu unterschiedlich.

    Für Servos brauchst du nur den Befehl Servo in Bascom zu nehmen
    Schau mal in der Help nach CONFIG SERVO
    Sowas macht Bascom doch mit links
    Da kannst du jeden beliebigen Port für nehmen, sogar bis zu 10 Servos lassen sich ansteuern. Das hat aber nix mit mit PWM zu tun. PWM ist ja im Grunde nur eine analoge Ausgangsspannung (vereinfacht gesagt).
    Allerdings wenn du den Servo Befehl nutzt, dann darfst du einen Timer nicht mehr nehmen, steht auch in der Help

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Ja danke, dann werd ichs so machen, wäre dann tatsächlich einfacher.
    Danke für die Antworten, ich denke ich habs jetzt kappiert, brauche nur etwas Zeit, um wieder zum testen zu kommen.

    MFg Moritz

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Leute (Bin neu hier
    Tolles Forum

    Habe diesen Beitrag interesiert durchgelesen und verstehe ihn ja auch fast.
    Aber mir ist leider noch nicht ganz klar, warum 2*255 (510)
    (Habe da einen Mega8 und probiere mit Timer1--> PWM)


    Wenn ich z.B. einen wert für Compare1a nehme mit: 10
    (Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1)
    habe ich am Osci einen kurzen High-Impuls am Anfang der Periode nach oben und dann bis zum Ende der Periode ,Low.
    Wenn ich es mit 250 mache:
    Einen langen High und ganz kurz Low.
    Bei 255, immer High.
    Also dürfte es nur bis 255 gehen.
    Wie kommt man aber auf 510 ???

    Die Formel mit Q/Perioden-Breite (8bit)/ Prescaler/510 muss stimmen, weil die Frequenz nach dieser Formel rauskommt..?! (am Pin)
    Aber wo sind die zweiten 255 ?

    m.f.G. Roberto

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad