- LiFePO4 Speicher Test         
Ergebnis 11 bis 20 von 25

Thema: Motor PWM 19KHz?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #15
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    "When using a static TOP value there are practically no differences between the two modes of operation."

    Diese Aussage bezieht sich auf den Unterschied von "PWM, Phase and Frequency Correct" und "PWM, Phase Correct".
    Da wir mit ICR1 ein static TOP haben, verhält sich Mode 8 wie Mode 10... also dürfte Mode 8 auch nichts gegenüber Mode 10 verbessern. ok. Aber..

    "The Timer/Counter Overflow Flag (TOV1) is set each time the counter reaches BOTTOM. When
    either OCR1A or ICR1 is used for defining the TOP value, the OC1A or ICF1 Flag is set accordingly
    at the same timer clock cycle as the OCR1x Registers are updated with the double buffer
    value (at TOP). The Interrupt Flags can be used to generate an interrupt each time the counter
    reaches the TOP or BOTTOM value."

    Da Top = ICR1 und Bottom = 0 nicht verändert werden, müsste es so gehen.. nur warum "hüppelt" der Bot dann aber so?
    Ich sehe schon ein das du theoretisch recht hast mit dem TIMER1_OVF_vect, Radbruch... praktisch tuts das aber so nicht.
    Ob das an den noch nicht umgeschriebenen Registern TCCR1A = 0 (s.o.) liegen kann? Ich mach mich mal dran das zu ändern.
    Denn das würde den Zeitgeber Timer1 beeinflussen und so ggf. Störungen in den 100uS Messschleifen verursachen.

    Hier meine Änderungen bisher:
    Init:
    // Initialize Timer 0 - 2ms cycle or 500Hz RTOS
    TCCR0 = (0 << WGM00) | (1 << WGM01)
    | (0 << COM00) | (0 << COM01)
    | (0 << CS02) | (1 << CS01) | (1 << CS00);
    OCR0 = 250; // 500 Hz

    // Initialize Timer1 - PWM and exTimer0 Funktions:
    // PWM, phase correct with ICR1 as top value.
    TCCR1A = (0 << WGM10) | (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
    TCCR1B = (1 << WGM13) | (0 << WGM12) | (1 << CS10); // prescaler /1

    // 20000 Hz = ICR1 400, bzw. pwm von 10000 Hz -> 0,0001 S bzw. 100 μs bei prescaler /1

    ICR1 = 400; // New Phase corret PWM top value, 400 = 10 KHz 100uS
    Dann die ISR für Timer:
    ISR (TIMER0_COMP_vect) in ISR (TIMER1_OVF_vect) geändert. Aufruf alle 100uS

    ISR für den nun freien Timer0:

    #if configUSE_PREEMPTION == 1
    // ISR (TIMER0_COMP_vect, ISR_NAKED)
    ISR (TIMER0_COMP_vect)
    {
    // vPortYieldFromTick();
    // asm volatile ( "reti" );
    }
    #else
    // ISR (TIMER0_COMP_vect, ISR_NAKED)
    ISR (TIMER0_COMP_vect)
    {
    // vTaskIncrementTick();
    }
    #endif // portUSE_PREEMPTION
    Um aktuell Komplikationen zu verhindern ist die nun zum RTOS gehörende ISR (TIMER0_COMP_vect)
    so geändert, das sie als normale ISR ohne ins RTOS zu wechseln 500 mal /sec nichts macht. Da das RTOS
    nicht angesprungen wird liegt es nur als toter Code im Hexfile - es geht also immer noch nur um die RP6Lib.

    Is also alles keine Zauberei... und trotzdem ruckelt der Bot vor sich hin statt normal zu fahren.
    LG Rolf
    Geändert von RolfD (29.08.2012 um 13:52 Uhr)
    Sind Sie auch ambivalent?

Ä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, 13:04
  2. Antworten: 0
    Letzter Beitrag: 15.03.2008, 17:28
  3. 19khz-einstellung für motortreiber l293d auf dem rp6
    Von roboterheld im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 05.10.2007, 17:50

Berechtigungen

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

LiFePO4 Speicher Test