- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 25

Thema: Motor PWM 19KHz?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414

    Motor PWM 19KHz?

    Hallo,
    nach einem tieferen Blick in die Motorsteuerung vom RP6 komme ich ins stutzen...
    Dort wird FastPWM mit Vorteiler 1 und einem ICR1 von 210 aufgesetzt, OCR1xL legt dann das Pulsverhältnis fest.
    Das soll dann eine PWM Frequenz von 19KHz ergeben denn ICR1 legt zusammen mit dem Vorteiler 1 ja die komplette Impulslänge fest.

    Für Dummies wie mich wird das hier: http://www.avrfreaks.net/index.php?n...=78780&start=0 auch noch mal genau beschrieben.

    Code:
    1. Look at table "Waveform Generation Mode Bit Description" in Timer1  section of the datasheet. Pwm mode is chosen with bits WGM13:10. Let us  set mode 14, fast pwm. 
     Code:
    
     TCCR1A.WGM10 = 1 
    TCCR1A.WGM11 = 1 
    TCCR1B.WGM12 = 1 
    TCCR1B.WGM13 = 0 
     
     In the same table you can see TOP=ICRn. We use timer1, so Top will be ICR1. 
     
    2. Set frequency. 
    Timer with no prescaler inrements in every period of the oscillator frequency (20 MHz here).  
    40 kHz is 500 times less than 20 MHz. So we need 500 steps of timer for 1 period of 40 kHz signal. 
     Code:
     ICR1 = 500 
    
     . 
    3. Set duty cycle 25%.  
    See table "Compare Output Mode, Fast PWM". 
    Here we set levels of the output.  
    Use "Clear OCnA/OCnB on Compare Match, set OCnA/OCnB at BOTTOM". 
    Duty cycle is set with output compare register OCR1A. 
     Code:
     TCCR1A.COM1A1 = 1 
    TCCR1A.COM1A0 = 0 
    OCR1A = 125         ( = 25% of ICR1) 
     
     The frequency output is on the pin OC1A. 
     
    4. Set OC1A as output and start timer1. 
     Code:
    
     DDRD.5 = 1 
    TCCR1B.CS10 = 1 
    
      
     
    Function: 
    Timer1 starts counting from 0. OC1A is high. 
    After timer reaches value of OCR1A, OC1A goes low. 
    After timer reaches value of ICR1 (Top), timer resets and OC1A goes high.
    Berechne ich aber die üblichen 8MHz und ICR1 = 210 mit diesem Beispiel, komme ich auf ca. 38 khz .. und nicht 19 Khz.
    Für 19 KHz bzw. 19000 pwm Zyklen/sec müsste ICR1 = 421 haben denn 421x19KHz ergibt 7999000... nicht 210x19KHz

    Meine Frage daher.. ist das Beispiel da falsch, hab ich mich wo verrechnet... oder läuft unsere MotorPWM tatsächlich mit 38KHz statt mit 19 KHz wie in der Docu beschrieben?

    Irgendwie sieht mir das eher nach einer Steuerung zum dimmen von LEDs aus, muss die Frequenz tatsächlich so hoch sein?
    Werden die Motoren dadurch nicht zu Ultraschallquellen? Reichen PWM Frequenzen von 50-400 Hz nicht auch aus? (selbst auf die Gefahr hin, das die Motoren dann "brummen" oder "singen" wie z.B. moderne Eloks es auch tuen)

    Für Motoren mit kleinen Induktivitäten wie unsere braucht man grundsätzlich hohe Frequenzen? Das ist so die Schlußfolgerung, die ich aus diversen Beiträgen rauslese.. dort spricht man aber üblicherweise von 8-16 und max 32 khz.

    Ich wüsste halt gerne, ob man die Motor PWM Taktung runter setzen und dann ggf. durch eine SoftwarePWM laufen lassen kann.
    http://www.mikrocontroller.net/articles/Soft-PWM
    Für so hohe Frequenzen ist das jedoch recht ineffizient.

    LG Rolf
    Geändert von RolfD (15.08.2012 um 15:44 Uhr)
    Sind Sie auch ambivalent?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das ist das Setup des Timers beim RP6:

    Mode 10, Phase Correct mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz

    Hier betreibe ich damit eine Servoansteuerung:
    https://www.roboternetz.de/community...l=1#post447000

    Gruß

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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Hm..

    Zitat Zitat von radbruch Beitrag anzeigen
    8MHz/420=19047,6Hz
    Wieso 420 wenn doch 210 ins Register geschrieben werden? Das genau verstand ich eben nicht... weil 8MHz/210=38095,2Hz

    Aber ich habs...
    Das hat mit Unterschieden im Mode 10 (PWM, Phase Correct) und Mode 14 (Fast PWM) (vergleiche Seite 109 im Dataheet) zu tun.

    Demnach berechnet sich der Wert für das ICR bei FastPWM mit 8MHz/ICR1=Zyklus und bei PWM zu 8MHz/(ICR1*2)=Zyklus.
    So les ich jedenfalls die Formeln auf Seite 100 und 101 im PDF... würde dann auch erklären warum "halber" ICR1 Wert und doch 19 Khz.

    Vielelicht kann noch jemand was zum Thema "Frequenz runter setzen" was sagen?

    Danke und Gruß
    Sind Sie auch ambivalent?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo,

    die Treiberstufen sind so dimensioniert, dass die hohe Frequenz kein Problem darstellt.
    19kHz weil das gerade ausserhalb des menschlichen Hörbereichs liegt.


    > FastPWM

    Wie mic schon sagt und auch in den Kommentaren der Lib steht, ist es phase correct PWM.


    > Ich wüsste halt gerne, ob man die Motor PWM Taktung runter setzen

    Du darfst gerne mit den Motoren Musik machen wenn Du magst
    Das hat auch soweit ich mich erinnere mal wer für den RP6 gemacht, find ich aber auf die schnelle nicht mehr.
    Beim ASURO klingt das jedenfalls so:
    http://www.youtube.com/watch?v=FNPMCI5b8Ys




    > und dann ggf. durch eine SoftwarePWM laufen lassen kann.


    Wozu denn?


    MfG,
    SlyD

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Zu "Frequenz runter setzen": Ein einfacher Ansatz wäre der Prescaler, 19kHz/8 ergibt 2,4kHz und 19kHz/64 sind ca. 300Hz.

    Neuen Prescaler in TCCR1B setzen:
    Code:
    	TCCR1B =  (1 << WGM13) | (0 << WGM12) | (1 << CS11) | (1 << CS10); // prescaler /64, 300Hz
    FAST PWM zählt von bottom zu top, Phase Correct zählt jedoch von bottom zu top zu bottom. Deshalb dauert ein Zyklus doppelt so lange.
    Geändert von radbruch (15.08.2012 um 18:51 Uhr) Grund: "Neuen Prescaler in TCCR1B setzen" eingefügt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Hallo,
    der singende Asuro.. wie süß
    Ich kannte nur das hier http://www.youtube.com/watch?v=yHJOz_y9rZE

    Neee es geht mir darum, wie im FreeRTos Thread beschrieben den Timer1 frei zu kriegen bzw. die Motor-PWM evtl. anders zu generieren...
    Das ist in der RP6 Lib alles schon gut so gelöst... hilft mir aber nur bedingt.

    Das mit dem prescaler 8 versuch ich glaub ich mal. Danke

    Noch ne Frage... kann man im PWM Mode zusätzlich ein Timerinterrupt auslösen lassen wenn die bottom ond/oder top werte erreicht werden? Da könnte ich ja den Tasksheduller dann reinhängen.

    Gruß Rolf
    Sind Sie auch ambivalent?

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    ... kann man ... zusätzlich ein Timerinterrupt auslösen lassen, wenn die bottom ond/oder top werte erreicht werden?
    Na, genau das mache ich hier:
    Code:
       TIMSK |= (1 << TOIE1); 		// Die Timer1 Overflow-ISR zur Servoansteuerung
    (Aus https://www.roboternetz.de/community...l=1#post447000)

    Jedesmal, wenn bottom erreicht ist, wird ein Overflow-Interrupt ausgelöst und die dazugehörige ISR ausgeführt:

    Code:
    ISR (TIMER1_OVF_vect)
    {
    ...
    }


    btw.: https://www.roboternetz.de/community...eeRTos-auf-RP6

    Und das noch:

    https://www.roboternetz.de/community...l=1#post459189
    Geändert von radbruch (15.08.2012 um 20:20 Uhr) Grund: btw
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. RN-Motor I2C Kommunikation klappt, am Motor tut sich nichts
    Von hspecht74 im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 1
    Letzter Beitrag: 24.11.2008, 14:04
  2. Antworten: 0
    Letzter Beitrag: 15.03.2008, 18:28
  3. 19khz-einstellung für motortreiber l293d auf dem rp6
    Von roboterheld im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 05.10.2007, 18:50

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress