Sinus PWM mit Atmega 644

OP #3328717
Hallo Zusammen,
ich komme nicht wirklich weiter. Ich soll in der Schule einen AC-Motor 
(12V) über einen sinusgeneriertes PWM-Signal ansteuern. Habe hier schon 
eine gutes Programm, aber habe mal an meinen Ausgang des µController ein 
Oszilloskop gehangen und so sieht das Bild (siehe Anhang) aus. Jemand ne 
idee? Ist der PWM-Mode 5 falsch oder woran liegt es?? Wieso habe ich 
zwei Kurven.
Gruß Marco danke für Hilfe

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <inttypes.h>

#define F_CPU 16000000UL  // Quarz mit 16.000.000 Mhz
#define TIMERRELOAD 256  // Nachladewert des Timers 255
#define AUFLOESUNG 65536 // 16-Bit Counter 65535

const uint8_t sinustabelle[256] PROGMEM = 
{127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178 
,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223 
,225,227,229,231,233,234,236,238,239,240,242,243,244,245,247,248,249,249 
,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252 
,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231 
,229,227,225,223,221,219,217,215,212,210,208,205,203,200,198,195,192,190 
,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136 
,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,76, 
73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20, 
18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4 
,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,4 
6,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,1 
11,115,118,121,124};

volatile union {uint16_t u16; uint8_t u8[2];} counter; //0 ist Low, 1 
ist High Byte
volatile uint16_t offset;

void frequenz_setzen(uint8_t Ausgabefrequenz)
{ // 614 Takte mit -Os
 offset = ((F_CPU/2 + Ausgabefrequenz  TIMERRELOAD  AUFLOESUNG) / 
F_CPU); // F_CPU/2 ist fürs Runden
}

int main(void)
{
 OSCCAL = 0xAE; //Kalibrieren des Internen RC OSC
 TCCR1A = (1<<COM1A1) | (1<<WGM10); //Clear OC0A on Compare Match & Fast 
PWM Mode 5
 TCCR1B = (1<<WGM12) | (1<<CS10); //CPU-Takt & Fast PWM Mode 5
 TIMSK1 = (1<<TOIE1); //Timer 1 Overflow interrupt an
 DDRB = (1<<PB5); //PB5 (OC1A) als Ausgang
 frequenz_setzen(50);
 sei();

 while(1);

 return 0;
}

ISR(TIMER1_OVF_vect)
{
 OCR1A = pgm_read_byte(&sinustabelle[counter.u8[1]]);
 counter.u16 += offset;
 return;
}
Angehängte Dateien:
#3329936
Marco St. schrieb:
> Oszi steht auf AC.

Dann schalte auf DC!
Bei AC verschiebt sich der Nullpunkt ja auch abhängig vom Mittelwert und 
ergibt diesen Effekt. Die Amplitude des entstehenden überlagerten Sinus 
hängt allerdings von der Zeitkonstanten bei AC ab.

Wenn der Effekt bei DC auch noch da ist, ist es eine andere Ursache.

Gruß Dietrich
Gast #3330459
Du hast das Ausgangsfilter vergessen!

Schalte mal einen Tiefpaß an den µC-Ausgang, R so um die 10k und den C 
berechnen daß die Grenzfrequenz ca. 2* höher als deine höchste 
Sinusfrequenz ist.

Du wirst nun einen sauberen Sinus sehen.

Und das Osziloskop natürlich auf DC-Kopplung stellen.
Gast #3330499
"

Ich würde sagen, daß die Masse nicht richtig angeschlossen ist.
Das sieht aus wie ein überlagertes Netzbrummen.

Gruß
Andreas


20.09.2013 12:53: Bearbeitet durch User

"

Vielleicht passe ich ja wirklich nicht mehr in die Zeit, aber was, 
bitte, musste bei diesen beiden Kurzsätzen nachbearbeitet werden, und 
das auch noch in derselben Minute?
Bei nur geringfügig 'komplexeren' Beiträgen sieht man manchmal 2 oder 
gar 3 Nachbearbeitungen, was soll das?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.