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

Thema: Phasenkorrekt Modus Interrupts

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    In der Bascomhilfe unter On Interrupt findet man diese Liste von möglichen Interrupts:

    INT0, INT1, INT2, INT3, INT4,INT5, TIMER0 ,TIMER1, TIMER2, ADC , EEPROM , CAPTURE1, COMPARE1A, COMPARE1B,COMPARE1.

    Or you can use the AVR name convention:

    OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, ADCC, ERDY and ACI.
    Vermutlich bedeutet On Timer2 den Überlaufinterrupt bei BOTTOM, aber um sicher zu gehen würde ich diesen so initialisieren:

    On OVL2 OVL-ISR

    Für den MatchCompare-Interrupt bei TOP müßte man das OCR2 mit 255 laden und die ISR etwa so einklinken:

    On OC2 MatchCompare-ISR

    (ungetestet und zu langsam)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    (ungetestet und zu langsam)
    Bei mir auch und hab grad 'nen Fehler bei mir entdeckt. Der OC2 Interrupt wird nicht bei TOP ausgelöst, sondern bei Compare match. TOP Interrupt geht im Timer2, glaub ich, nicht. Sollte mir auch etwas mehr Zeit nehmen.

    @Wombatz: Beschreib doch mal genauer, was Du machen möchtest. Denke, das Timer1 geeigneter wäre. Da gibt es aber mindestens 2 Möglichkeiten...

    Gruß
    Searcher
    Geändert von Searcher (01.12.2011 um 10:54 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Also, ich bastel gerade an einer Motoransteuerung für einen Brushless Motor. Gerade versuche ich den Kommutierungszeitpunkt zu ermessen (ADC). Hierzu brauche ich den PhaseCorrectModus, damit der Nulldurchgang einerseits gemessen wird und andererseits der Mittelwert verglichen wird. Da der Nulldurchgang die Hälfte der Ausgangsspannung ist, muss der Wert halbiert und dann mit einem Interrupt ausgelöst werden. Damit schaltet der Controller dann im richtigen Zeitpunkt auf die nächste Spule des Motors.

    Danke der schnellen Antworten

    Ach ja den Timer1 wollte ich für die PWM der Phasenansteuerung nehmen

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hi,
    also ich versuchs nochmal:

    Kann leider nicht beurteilen, ob Du nicht auch Timer2 anstelle Timer1 für die PWM der Phasenansteuerungs nehmen kannst.

    So wie ich das Datenblatt verstehe, ist es mit Timer2 nicht vorgesehen, Interrupts im Phase Correct PWM bei TOP und BOTTOM zu nutzen.

    Für Timer1 geht es nach Tabelle 39, Seite 98 im Datenblatt nur für die Modes 8, 9, 10 und 11.
    Modes 1, 2, 3 scheinen mir keinen Interrupt bei TOP auszulösen.

    Einstellung des Modes 8 :
    CONFIG TIMER1 = TIMER , PRESCALE = x
    SET TCCR1B.WGM13
    SET - noch weitere Einstellungen zB welche Pins als Output genutzt werden sollen
    (hab dazu keine Erfahrung, wie das mit dem CONFIG TIMER Kommando geht. Ich benutze immer SET Anweisungen)

    TOP Wert einstellen im Register ICR1
    ICR1 = x

    Pulsweite einstellen im Register OCR1A oder OCR1B (je nachdem welche PWM Output Pins am µC genutzt werden sollen)

    Interrupts:

    ENABLE ICP1
    ENABLE OVF1

    ON ICP1 ISR_TOP
    ON OVF1 ISR_BOTTOM

    ENABLE INTERRUPTS

    Timer1 ist ja 16 Bit und läßt sich für Deine gewünschte Funktion nicht auf geringere Auflösung umstellen!?
    Timer2 ist 8 bit und könnte für Phasenansteuerung noch gehen ???

    PS: Kann das leider nicht testen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Vielen Dank für deine Hilfe.

    Ich werd das mal so versuchen.

    Gruß Wombatz...

    Sorry nochmal aber es hakt.....

    Ich habe es gerade mal Versucht mit dem Timer1 zwei Interrupts auszulösen. Bei mir geht immer nur einer der Beiden. Zusammen funktionieren die nicht:
    Hier mal der Code:

    Tccr1a = &B00000010 'Bit7+4=keinCompare,Bit3+2=keinForceOutputCompare, Bit1+0=PWMPhaseCorrect
    Tccr1b = &B00010010 'Bit7=NoiseCancelaus,Bit6=FallingEdge,Bit5=Reserve ,Bit4+3=WaveformGenerationMode,Bit2+0=Prescaler/8
    Timsk.toie1 = 1 'Timer Overflow Interrupt (TOP) ein
    Enable Icp1 'Timer Bottom Interrupt ein

    Sreg.7 = 1 'Interrupt global freigeben

    On ovf1 Adc_messung
    On Icp1 Compare_messungen

    '_____________

    Do
    "Mach Sachen"
    Loop
    '____________

    Adc_messung:

    Toggle Portd.6

    Return
    '___________________

    'Compare_messungen:

    Toggle Portd.7

    Return

    Einmal ist Portd.6 (ADC_Messung) 0,00V und wenn ich den anderen Interrupt ausblende, funktionier der???
    Mache ich da was falsch???
    Geändert von Wombatz (01.12.2011 um 18:54 Uhr)

  6. #6
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Hat sich erledigt... Wenn ich ICR1 einen Wert zuweise funktionier das...

    Danke der schnellen Hilfe

    Gruß Wombatz

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Prima. Ich blick gerade nicht durch, welchen Mode Du benutzt. Im Mode 8 wird der ICP1 bei TOP ausgelöst. Der Inhalt von ICR1 ist TOP und bestimmt damit auch die PWM Frequenz.

    Der OVF1 (Overflow) Interrupt wird bei BOTTOM ausgelöst. In Deinem vorletzten Post, den ich grad erst gesehen habe, ist das für mich irgendwie mißverständlich nach Programmcode.

    Timsk.toie1 = 1 'Timer Overflow Interrupt (TOP) ein
    Enable Icp1 'Timer Bottom Interrupt ein
    In den Remarks ist TOP und Bottom vertauscht.


    Egal, Hauptsache es klappt.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. sind ALLE Interrupts wieder ON nach Enable Interrupts?
    Von sBronco im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.07.2011, 14:58
  2. EA DIP204-4 4 bit modus
    Von DBF im Forum Assembler-Programmierung
    Antworten: 4
    Letzter Beitrag: 07.03.2008, 13:16
  3. Idle-Modus
    Von wolleausmallo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 17.04.2007, 09:41
  4. LCD - initialisieren im 4-Bit Modus
    Von henne im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 12.03.2005, 00:26
  5. Bootstrap Modus
    Von lollo im Forum C-Control II
    Antworten: 5
    Letzter Beitrag: 20.01.2005, 15:31

Berechtigungen

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

Labornetzteil AliExpress