Forum: Mikrocontroller und Digitale Elektronik AT90CAN fasenkorrekte pwm


von Tim R. (herrvorragend)


Lesenswert?

hallo leute,

ich habe ein kleines problem mit einem at90can. dabei möchte ich eine 
pwm realisieren um ein transistor anzusteuern. als erstes habe ich 
diesen post verinnerlicht Beitrag "PWM AT90CAN128 an OCR2 unc OCR0". 
das hat soweit auch funktioniert. mit dem timer0 habe ich mich schon 
beschäftigt jedoch kann man bei dem für eine fasenkorrekte pwm keine 
werte vorgeben zur zählung oder?.
nun bin ich bei timer 1, dieser kann das und ich bin der meinung, dass 
ich ihn wie folgend richtig konfiguriert habe:
TCCR1A = 0b01010111;
TCCR1B = 0b00010010;
aber so funktioniert es nicht. es kommt keine pwm raus. hätte vllt 
jemand eine idee was ich falsch gemacht habe?
meine nächste frage geht im datenblatt auf die COMnA1/COMnB1/
COMnC1 und 0 register. in den tabellen ist nicht gezeigt welches bit des 
registers nun dazu gehörig ist zu welchem modi. in allen tabellenheadern 
stehen alle namen. wäre nett wenn das jemand näher erläutern könnte. 
deshalb habe ich die bits 01 01 01 entsprechend gleich genutzt für COM

danke im voraus

liebe grüße tim

von spess53 (Gast)


Lesenswert?

Hi

>und ich bin der meinung, dass ich ihn wie folgend richtig konfiguriert habe:
>TCCR1A = 0b01010111;
>TCCR1B = 0b00010010;

Meinst du, das jemand Lust hat das zu auseinander zu sortieren?

Tue dir und anderen einen Gefallen und benutze die übliche Schreibweise

TCCR1A = (1<<xyc)|(1<<xyz)...

MfG Spess

von Tim R. (herrvorragend)


Lesenswert?

ok danke für die schnelle antwort. du hast recht das ist nicht fein 
leserlich, mein fehler

ich hoffe das kann man nun besser interpretieren:

TCCR1A = (01 << COM1A1/0) | (01 << COM1B1/0) | (01 << COM1B1/0) | (1 << 
WGM11) | (1 << WGM10);

TCCR1B = (0 << ICNC1) | (0 << ICES1) |(0 << reserved) | (1 << WGM13) | 
(0 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10);

die COM habe ich wie gesagt alle auf 01 gesetzt weil mir eine richtige 
bezeichnung in den datenblättern fehlte oder ich sie nicht gesehen habe. 
ich möchte eine phasecorrect pwm nach tabelle13-3

dake im voraus :)

von spess53 (Gast)


Lesenswert?

Hi

>(01 << COM1A1/0)

Und das frisst dein Compiler?

MfG Spess

von Tim R. (herrvorragend)


Lesenswert?

entschuldige das war ein schnellentwurf. nun aber compilergerecht :)

TCCR1A = (0 << COM1A1) | (1 << COM1A0) | (0 << COM1B1) | (1 << COM1B0) 
|(0 << COM1C1) | (1 << COM1C0) |(1 << WGM11) | (1 << WGM10);

 TCCR1B = (0 << ICNC1) | (0 << ICES1) | (1 << WGM13) | (0 << WGM12) | (0 
<< CS12) | (1 << CS11) | (0 << CS10);

von spess53 (Gast)


Lesenswert?

Hi

Als Erstes: Wozu brauchst du Phase Correct PWM? Für deinen Zweck reicht 
Fast PWM.

>(0 << COM1A1) | (1 << COM1A0)

Ist falsch. Du brauchst COM1n = 10 oder 11. Bevorzugt 10. COM1n = 11 ist 
invertierte PWM.

Und nicht vergessen, die OC-Pins auf Ausgang setzen.

MfG Spess

von Tim R. (herrvorragend)


Lesenswert?

hi,

du hast recht eine fast-pwm reicht wohl. ich habe demnach für fast-pwm 
den COM1n = 10 gesetzt für compare match at top. das klappt soweit auch 
jedoch habe ich einen minimalen puls
TCCR1A = 
(1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(1<<COM1C1)|(0<<COM1C0)| 
(1<<WGM11)|(1<<WGM10));

TCCR1B = (0<<ICNC1)|(0<<ICES1)|(0<<WGM13)|(1<<WGM12)|(0 << 
CS12)|(1<<CS11)|(0<<CS10);

den pin habe ich auf ausgang:
DDRB |= (1 << DDB6);

desweiteren habe ich den zähler für TOP gesetzt  mit
OCR1A = 0x00FF;

und wielange der puls dauern soll
TCNT1 = 0x00FF;

auf dem oszi sind nur winzig kleine pulse zu sehen, wie kann ich die 
pulslänge beeinflussen, dachte dafür ist TCNT zuständig

danke im voraus

von spess53 (Gast)


Lesenswert?

Hi

>auf dem oszi sind nur winzig kleine pulse zu sehen, wie kann ich die
>pulslänge beeinflussen, dachte dafür ist TCNT zuständig

Nein. Von TCNT lässt du die Finger. Deine Impulsbreite wird durch die 
OC-Register bestimmt. Lies mal das im Datenblatt unter 'Modes of 
Operation' nach.

MfG Spess

von Tim R. (herrvorragend)


Lesenswert?

danke spess,

ich bin grad etwas mit OCR1A und OCR1B am drehen wegen der 
pulsbreite...aber die logik der register ist mir noch nicht ganz 
geheuer... da werde ich noch etwas rumtesten ... aber danke schonmal bis 
hierher

edit:
also ich habe OCR1A als TOP wert festgelegt aber dieser hat null 
relevantnis. wenn ic hden auf 0 setze habe ich eine PWM obwohl TOP=0 ja 
ein dauer 0 signal wäre... also ich bin etwas verwirrt was dies 
betrifft, ich hoffe da kann mir jemand nochmal kurz helfen

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.