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; }
Hi
>Ist der PWM-Mode 5 falsch oder woran liegt es?
Ist der Oszi-Eingang AC oder DC?
MfG Spess
Ich würde sagen, daß die Masse nicht richtig angeschlossen ist. Das sieht aus wie ein überlagertes Netzbrummen. Gruß Andreas
:
Bearbeitet durch User
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ß
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
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.
" 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.