Forum: Mikrocontroller und Digitale Elektronik ATtiny26 PWM mit einstellbaren Frequenz


von Di W. (dwang)


Angehängte Dateien:

Lesenswert?

Hallo ,

Zur Zeit arbeite ich mit einem ATtiny26 und versuche ich ein PWM Signal 
mit einstellbaren Frequenz erzeugen. Ich soll  einen Tiefsetzsteller 
entwerfen, Eingangspannung 12V, die Ausgangsspannung ist 0 bis 12V. 
Schaltplan und Board habe ich mit Software Eagle gemacht. Ich habe eine 
einfachen Code geschreiben um die Platine zu testet, jetzt ist meine 
Hardware alles in Ordnung.

Aber Programmierung klappt leider nicht. Hier brauche ich 2 AD Kanäle, 
ein ist Soll-Wert, der andere ist Ist-Wert.
Eigentlich soll ist auch einen PI Regler entwerfen, aber zuerst möchte 
icht eine andere einfachere Methode bunutzen. Mein Code ist auf 
Assembler.

 Ich habe die Schaltplan hochgelanden,es gibt ein fehler, dass R6 soll 
weg sein.

ich bin eine außlandische Studentin, deswegen mein Deutsch ist nicht so 
gut.Ich hoffe ich habe schon gut erklärt.

Wäre schön, wenn mir jemand einen hilfreichen Tipp geben kann.
Danke und Gruß.

Di

von S. Landolt (Gast)


Lesenswert?

Das Programm ist noch sehr verbesserungswürdig, aber der Hauptfehler 
ist, dass nach dem Starten der AD-Wandlung nicht auf dessen Ende 
gewartet wird:
1
sbi ADCSR,ADSC ;ADC lesen   hier wird die AD-Wandlung gestartet
2
 sbic ADCSR,ADSC
3
rjmp pc-1                 ; warten bis fertig!
4
in  Usoll, ADCH
5
.
6
.
7
.
8
sbi ADCSR,ADSC ;ADC lesen   hier wird die AD-Wandlung gestartet
9
 sbic ADCSR,ADSC
10
rjmp pc-1                 ; warten bis fertig!
11
in  Uist, ADCH

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hi Dwang,
zum Testen könntest Du Dein Programm in einzelne Module zerlegen:

- ADC-Sollwert
- ADC-Istwert
- PWM

Den Tiefsetzsteller könntest Du, sobald die fehlenden Speicherelemente 
und eine Minimallast angeschlossen sind(Lückbetrieb!) mit einer festen 
PWM testen (z.B. 50:50).
Dann kannst Du mit dem Istwert und dem Sollwert ADC weitermachen.

Danach kommt die Regelungsentwicklung.

Cheerio,
 marcus

von holger (Gast)


Lesenswert?

>Zur Zeit arbeite ich mit einem ATtiny26 und versuche ich ein PWM Signal
>mit einstellbaren Frequenz erzeugen.

Wozu soll das gut sein? Normalerweise verändert man bei einer
PWM das Tastverhältnis um irgendwas einzustellen, und nicht die 
Frequenz.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

holger schrieb:
>>Zur Zeit arbeite ich mit einem ATtiny26 und versuche ich ein PWM Signal
>>mit einstellbaren Frequenz erzeugen.
>
> Wozu soll das gut sein? Normalerweise verändert man bei einer
> PWM das Tastverhältnis um irgendwas einzustellen, und nicht die
> Frequenz.

Das ist nicht unüblich. Durch die Anpassung der Frequenz kann man z.B. 
das Tastverhältnis und damit den Ripple lastabhängig optimieren.
Ein (hässlicher) Nebeneffekt ist allerdings die Frequenzvariation des 
Störspektrums.

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

holger schrieb:
>>Zur Zeit arbeite ich mit einem ATtiny26 und versuche ich ein PWM Signal
>>mit einstellbaren Frequenz erzeugen.
>
> Wozu soll das gut sein? Normalerweise verändert man bei einer
> PWM das Tastverhältnis um irgendwas einzustellen, und nicht die
> Frequenz.

Genau so steht es ja auch im Programm, TOP der PWM, also OCR1C, ist auf 
200 festgenagelt, OCR1B wird zwischen minTein (0) und maxTein (200) 
variiert.

von Di W. (dwang)


Angehängte Dateien:

Lesenswert?

Vielen dank für deine Antwort!
Heute habe ich nur ein AD Kanal benutzt, und der Soll-Wert benutze ich 
einen Festwert "adcsoll". Jetzt kann ich ein pwm signal bekommen, aber 
mit verschiedene adcsoll, das PWM Signal andert sich nicht, immer das 
gleiche Tastgrad. ist mein Code falsch?

Grüßen
Di

von S. Landolt (Gast)


Lesenswert?

Das Programm scheint richtig zu sein, mit Ausnahme des Kommentars

> LDI temp1, (1<<ADLAR) | (1<<MUX2) | (1<<MUX0); Auswählen
> von ADC4 und Referenzspannung VCC

Wenn ich Uist an ADC5==PA6 (!) anschließe, funktioniert es bei mir.

von Di W. (dwang)


Lesenswert?

vielen Dank für deine Antwort.
bei dir ist es funktioniert? bei mir ist es leider nicht, mit 
unterschiede Usoll ist das PWM Singal immer gleich. Tastgrad ist 50%.

von S. Landolt (Gast)


Lesenswert?

Usoll? In f.asm gibt es kein Usoll.

Zu meinem Vorgehen: ich übernehme das zuletzt gezeigte Programm (f.asm), 
assembliere es mit avrasm2 und bringe das Resultat in den ATtiny26. Am 
Ausgang OC1B==PB3 ist ein RC-Glied angeschlossen, von diesem wird auf 
ADC5==PA6 rückgekoppelt. Direkt an PB3 hängt ein Oszilloskop, an PA6 ein 
Zeigermultimeter.
  Wenn ich nun in f.asm den Parameter adcsoll ändere, so folgt das 
Multimeter sehr schön dieser Änderung, und auch das Oszillogramm sieht 
entsprechend aus, der Tastgrad variiert, aber die Tendenz stimmt.

von Di W. (dwang)


Angehängte Dateien:

Lesenswert?

Hier(f.asm)  Usoll ist adcsoll, leider dieser Code bei mir geht nicht.

Heute habe ich einen PI Regler geschrieben, Kp und Ki habe ich 1 
benutzt, ich habe kein Ahnung,wie die Umwandlung von Dezimal in 
Binärsystem ist. Am Ausgang ist das Ausgangspanung immer 12V, Tastgrad 
100%.

ich habe gar keine Erfahrungen über Mikrocontroller und 
Assemblerprogrammierung.Sorry für die dummen fragen.

vielen Dank!


DI

von S. Landolt (Gast)


Lesenswert?

Ich verstehe nicht, weshalb bei Ihnen das f.asm nicht läuft; mir 
scheint, dass Programmversionen durcheinander gebracht werden und im 
ATtiny26 nicht das aktuelle Programm läuft.
Vorschlag: lassen Sie dieses Einfachst-PWM-Programm laufen, wenn das 
klappt, sehen wir weiter:
1
.include"tn26def.inc"
2
; sysCK = 1 MHz
3
.def    tmp0            = r16
4
.cseg
5
.org    0
6
    sbi     DDRB,3                                      ; OC1B
7
    ldi     tmp0,(1<<COM1B0)|(1<<PWM1B)                 ; PWM -> OC1B
8
    out     TCCR1A,tmp0
9
    ldi     tmp0,(1<<CS11)                              ; sysCK/8
10
    out     TCCR1B,tmp0
11
    ldi     tmp0,255
12
    out     OCR1C,tmp0
13
    ldi     tmp0,32
14
main_loop:
15
    out     OCR1B,tmp0
16
    ldi     YL,15
17
wait:                                                   ; 4 s @ 1 MHz
18
      sbiw  XL,1
19
     brne   wait
20
     dec    YL
21
    brne    wait
22
    subi    tmp0,-64
23
  rjmp      main_loop
Wenn sich Ihr ATtiny26 im Auslieferungszustand befindet, dann läuft er 
mit einem Systemtakt von 1.0 MHz, damit müsste alle 4 s der Tastgrad 
weitergeschaltet werden von 1/8..3/8..5/8..7/8.

von Norbert T. (atos)


Lesenswert?

Also zunächst fehlt bei den DEFS in pi.asm die Definition des "uber", 
das Programm kann somit nicht fehlerfrei kompiliert werden. Es fehlt: 
.DEF uber=r20

Grüße

Norbert

: Bearbeitet durch User
von Di W. (dwang)


Lesenswert?

Heute bin ich wieder im Labor, gerade habe ich das 
Einfachst-PWM-Programm, das Sie geschrieben haben,bei mir benutzt. Das 
bei mir Laüft sehr schön.Ich glaube, mein problem ist AD wandler. Mit PI 
regler ist das Ergebnis nicht stabil, wenn ich den Sollwert(die Spannung 
auf dem Schieberegler)einstelle,  ist am Ausgang das Ausgangspanung 
immer 12V. Wahrscheinlich ist mein PI regler fasch.

von S. Landolt (Gast)


Lesenswert?

Vorab: meine Kenntnisse in Regeltechnik sind sehr gering, eigentlich 
sollte jemand anders weiterhelfen.

Sollte aber der Programmteil "pi regler" nicht ungefähr wie folgt 
aussehen, bezogen auf die zuletzt gezeigte Version 'pi.asm':
1
;pi regler
2
3
  cp    Usoll,Uist
4
  brlo  negativ
5
positiv:
6
   sub  Usoll,Uist
7
   mov  e,Usoll
8
   add  esum,e
9
   brcc pc+2          ; Überlauf?
10
    sub esum,e
11
   mov  Tein,esum
12
  rjmp  main
13
14
negativ:
15
   sub   Uist,Usoll
16
   mov   e,Uist
17
   sub   esum,e
18
   brcc  pc+2         ; Überlauf? (eigentlich "Unterlauf")
19
    add  esum,e
20
   mov   Tein,esum
21
  rjmp   main

von S. Landolt (Gast)


Lesenswert?

oder eher:
1
positiv:
2
..
3
   brcc pc+2           ; Überlauf?
4
    ldi esum,maxTein
5
..
6
negativ:
7
..
8
   brcc  pc+2          ; Überlauf? (eigentlich "Unterlauf")
9
    ldi esum,minTein
10
..

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.