Forum: Mikrocontroller und Digitale Elektronik Sinus PWM mit Atmega 644


von Marco S. (marco658)


Angehängte Dateien:

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;
}

von spess53 (Gast)


Lesenswert?

Hi

>Ist der PWM-Mode 5 falsch oder woran liegt es?

Ist der Oszi-Eingang AC oder DC?

MfG Spess

von Andreas B. (bitverdreher)


Lesenswert?

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

Gruß
Andreas

: Bearbeitet durch User
von Marco S. (marco658)


Lesenswert?

Danke für die Antworten.
Oszi steht auf AC. Mit dem den Netzbrummen probiere ich mal aus. sonst 
noch jemand eine gute Idee?? Verbesserungen zum Programm!!

Gruß

von Dietrich L. (dietrichl)


Lesenswert?

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

von A-Freak (Gast)


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.

von der alte Hanns (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.