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

Thema: Mit Arduino 180° Phasenverschobenen Impuls erzeugen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Klebwax Beitrag anzeigen
    Was aber genau genommen nur bei 50% Dutycycle einer Phasenverschiebung von 180° entspricht. Bei allen anderen Werten müsste man das Signal um 2µs (eine halbe Periode bei 250kHz) verschieben.
    Ja, ich hatte bei der Frage sofort ein invertiertes Signal im Kopf .

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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Searcher Beitrag anzeigen
    Ja, ich hatte bei der Frage sofort ein invertiertes Signal im Kopf
    Mein erster Gedanke war, bei einem Puls gibt es keine Phase und damit auch keine Verschiebung. Von PWM ist erst später die Rede. Ich vermute mal, die 180° sind Quatsch und das invertierte Signal ist in Wirklichkeit gemeint.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.09.2009
    Beiträge
    96
    Hallo,
    danke für die Antworten ich meine 180° Phasenverschiebung und nicht Invertierung.
    Wollte es mit dem Phase-Correct PWM Mode machen aber leider geht das nicht so,
    weil das Register mit dem ich die Frequenz einstelle das gleiche ist mit dem ich den einen Impuls machen möchte:
    "Note that in this mode, only output B can be used for PWM; OCRA cannot be used both as the top value and the PWM compare value."
    (http://www.righto.com/2009/07/secret...duino-pwm.html)

    Dachte ich könnte vllt einfach einen Interrupt auslösen wenn ich die obere Grenze erreiche und einen Pin toggeln.
    Ist zwar nicht optimal aber besser als beide pulse in Software zu erzeugen.

    Leider funktioniert mein Programm nicht, da ich nicht in die isr rein komme.
    kann mir jemand meinen Fehler sagen?

    Code:
    // A sketch that creates an 250 kHz 6-bit resolution PWM with varying duty cycle
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(3, OUTPUT); // Output pin for OCR2B
      pinMode(2, OUTPUT);
    
      // Set up the 250 kHz output
      TCCR2A = bit(COM2A1) | bit(COM2B1) | bit(WGM21) | bit(WGM20);
      TCCR2B = bit(WGM22) | bit(CS20);
      TIMSK2 |= (1 << OCIE2A); // enable timer compare interrupt
      OCR2A = 63; 
      OCR2B = 0;
      sei();//allow interrupts
    }
    
    ISR(Timer2_COMPA_vect) // timer compare interrupt service routine
    {
      PORTD |= 0x4;
      PORTD &= ~0x4;
    }
    
    void loop()
    {
    
    }
    Geändert von alex91 (15.11.2018 um 09:08 Uhr)
    Rechtschreibfehler dürft ihr euch behalten

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Vielleicht generiert man von einem PWM-Ausgang zwei Signale. Das erste Signal wird einfach weitergereicht und, für den zweiten Ausgang, in einer digitalen Stufe um eine gewisse Zeit verzögert (wegen der 180°) und kann dann dort abgegriffen werden. Man müsste das PWM-Signal an dem zweiten Ausgang des Atmega zeitversetzt starten - geht das überhaupt?

    Vielleicht auch andere Aussagen dazu lesen: https://forum.arduino.cc/index.php?topic=224085.0

    MfG

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Es gab mal ein ähnliches Problem.

    Hier der Code:
    Code:
    const byte PWMUhv = 3;       // Spannung für Treiber
    const byte PWMUdesat = 11;   // Spannung für Desat
     
    
    void initTimer2PWM()
    {
      TCCR2B= _BV(CS21);  //prescaler8=3,9KHz; CS22=0; CS21=1; CS20=0; Timer2
      TCCR2A= _BV(WGM21) | _BV(WGM20) | _BV(COM2A1) | _BV(COM2B1)| _BV(COM2A0)| _BV(COM2B0);  
      OCR2B= 128;   //Duty 50% für Pin 3
    }
    
    void setup()
    {
        pinMode(PWMUhv, OUTPUT);         // PWMUhv als Ausgang deklariert
        pinMode(PWMUdesat, OUTPUT);      // PWMUdesat als Ausgang deklariert
        initTimer2PWM();
    }
    
    
    int nacheilung = 0;
    void loop()
    {
         OCR2A= 128 + nacheilung;
         delay(200);
         nacheilung++;
         if(nacheilung>100) nacheilung = 0;
    }
    Und zwar von hier: https://forum.arduino.cc/index.php?P...opic=366453.15

    MfG
    Moppi

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von alex91 Beitrag anzeigen
    Dachte ich könnte vllt einfach einen Interrupt auslösen wenn ich die obere Grenze erreiche und einen Pin toggeln.
    Ist zwar nicht optimal aber besser als beide pulse in Software zu erzeugen.
    Wenn die 250kHz von oben richtig sind, wirst du weder mit Soft-PWM noch mit einem Interrupt etwas reißen. Das ist alles viel zu langsam.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 28.04.2013, 20:45
  2. Impuls magnet
    Von Razzorhead im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 25.02.2010, 23:42
  3. Impuls 1ms auswerten
    Von cas im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 12.03.2009, 17:24
  4. Impuls LED schaltung
    Von Rockford im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 30.03.2007, 14:41
  5. Impuls
    Von sebi87 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.06.2006, 17:15

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress