ATtiny26 PWM mit einstellbaren Frequenz

OP #4646538
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
Angehängte Dateien:
Gast #4646808
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
(Firma: www.harerod.de) Persönliche Seite #4647390
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
Gast #4647406
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.
(Firma: www.harerod.de) Persönliche Seite #4647416
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.
Gast #4647684
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.
OP #4647902
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
Angehängte Dateien:
Gast #4648474
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.
Gast #4649347
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.
OP #4649761
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
Angehängte Dateien:
Gast #4649839
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.
OP #4652164
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.
Gast #4652660
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren