Sinus PWM mit Atmega 644

OP #3328717
Lesenswert?
• ▲
▼
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:
Gast #3330459
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
"

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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.