|
Bitte beachte die Copyrighthinweise.
Compare-Capture
1 Aufgabenstellung
· Initialisierung des Timers 2, Zählfrequenz ca. 4kHz,
· Initialisierung des AD-Converters,
· Initialisierung der Compare-Capture Unit (CCU), Compare-Mode 0,
· Sollwertvorgabe (z.B. Dreieck) und
· Aufbau einer geschlossenen, pulsweitenmodulierten Regelschleife mittels des 80C537.
2 Initialisierung
2.1 Allgemeines
Die Microcontrollerplatine wurde an UB = 5V (mit Multimeter P2 überprüft) angeschlossen.
Die Verbindung erfolgte über die serielle Schnittstelle 1 mittels des Programms MT (MonTerm). Bedienung: F1 Ende, F2 Öffnen, g0 für Programmstart GO ab Adresse 0.
2.2 Testprogramm
· Am Anfang des Programms werden die Interruptvektoren, u.a. für Timer 2, definiert.
·
Danach erfolgt die Initialisierung des ADCs:
über ADCON1 wird Kanal 0 (Port 7.0) ausgewählt,
über ADCON0 wird Einzelwandlung und keine ext. Triggerung
eingestellt.
·
Initialisierung des Timers2:
Die Register und die Reloadregister werden auf FF00h gesetzt somit
erfolgt der Überlauf nach 256 Zählschritten.
T2CON: interner Oszillator, Compare-Mode 0, Autoreload, Zähltakt fOSZ/12.
Zählfrequenz: CPUClk/12 = 1MHz, 1MHz/256 = 3,9kHz.
Eine Realisierung mit dem Timer 1 ist nicht möglich, da dieser nicht
mit der CCU zusammenarbeitet.
·
Initialisierung der CCU:
Die Register CCx1 werden auf FF10h gesetzt somit tritt ein compare
match nach 10 Zählschritten von TMR2 auf.
Mit CCEN werden alle Compare-Capture mit Ausnahme von CC1 gesperrt. Der
Modus von CC1 wurde bereits in T2CON auf Modus 0 eingestellt.
·
Interrupt/Ende
Danach werden die Interrupts freigegeben und das Hauptprogramm wartet in
einer Endlosschleife auf den TMR2 Interrupt.
·
TMR2 Interruptserviceroutine:
Zusätzlich zum Compare-Capture wurde an Port 4 ein Rechteck
ausgegeben.
La06a.asm
;*********************************************************************
; Editor: Florian Rosenauer @ HTBLA Karlstein, Austria-3830 Waidhofen
; Datum: 23/Okt/1997 Klasse/Gruppe/Kat.Nr : V-EA/-/--
;*********************************************************************
; Sprache : ASM für 80C537
; Programm Nr. : Labor 06 - Compare Capture
; Version : 0.5
; Kurzbeschreibung : TMR2 Intrpt. Test + konstantes Tastverhaeltnis
;*********************************************************************
#include 537.inc
a .equ $e0 ; Akku
.org $0000
ljmp $0100 ; Sprung über Interupts
.org $002B ; TMR2 Int
ljmp TMR2INT
.org $0100
init ; -- Initialisierung --
; - ADC -
mov $DC,#$00 ; ADCON1 (MX3 bis MX0) auf 0 ->Port P7.0
mov $D8,#$00 ; ADCON0 ->kein ext.Trig, Einzelwandlung
; - TMR2 -
mov TH2,#$FF
mov TL2,#$00
mov CRCH,#$FF
mov CRCL,#$00
mov T2CON,#%00010001 ; int.osc.,cmpmde0,mode0-autorel.;fosz/12
; - CCU -
mov CCH1,#$FF
mov CCL1,#$10
mov CCEN,#%00001000
setb ET2 ; enable TMR2 Int.
setb EAL ; enable all Int.
loop ljmp loop ; Ende Hauptprogramm
TMR2INT inc P4
reti
.end
Nachdem in MONTERM mittels g0 |:-) das Programm gestartet worden war, konnten folgenden Signale beobachtet werden:
An Port 4.0 wurde ein Rechtecksignal mit 36ms (27,7kHz) Periodendauer gemessen.
An Port 1.1 wurde ein PWM (pulsweitenmoduliertes) Rechtecksignal mit T = 250ms (4,0kHz) und einem toff = 20ms (n = (250-20)/250 = 92%) gemessen. Durch eine Variation des CCL1-Wertes konnte das Tastverhältnis geändert werden.
3 Regelkreis
3.1 Schaltung
Der Abgriff von UB = 5V und Masse erfolgte jeweils an den Netzteilklemmen.
Prinzip der CCU
Das PWM-Signal auf P1.1 wird über eine B-Endstufe auf einen Tiefpass mit
fg = =106Hz
ausgegeben und über einen AD-Wandler per Software mit dem Sollwert verglichen. Die Software soll nun das Tastverhältnis so steuern, dass ein vorgegebenes Signal nachgebildet wird.
Zuerst wurde softwaremäßig ein konstanter Sollwert vorgegeben.
3.2 Programm
Das erste Programm wurde innerhalb der Interruptroutine erweitert, sodass eine Regelung stattfinden sollte.
La06b.asm
;*********************************************************************
; Editor: Florian Rosenauer @ HTBLA Karlstein, Austria-3830 Waidhofen
; Datum: 23/Okt/1997 Klasse/Gruppe/Kat.Nr : V-EA/-/--
;*********************************************************************
; Sprache : ASM für 80C537
; Programm Nr. : Labor 06 - Compare Capture
; Version : 0.6
; Kurzbeschreibung : CCU mit Regelung
;*********************************************************************
#include 537.inc
a .equ $e0 ; Akku
.org $0000
ljmp $0100 ; Sprung über Interupts
.org $002B ; TMR2 Int
ljmp TMR2INT
.org $0100
init ; -- Initialisierung --
; - ADC -
mov $DC,#$00 ; ADCON1 (MX3 bis MX0) auf 0 ->Port P7.0
mov $D8,#$00 ; ADCON0 ->kein ext.Trig, Einzelwandlung
; - TMR2 -
mov TH2,#$FF
mov TL2,#$00
mov CRCH,#$FF
mov CRCL,#$00
mov T2CON,#%00010001 ; int.osc.,cmpmde0,mode0-autorel.;fosz/12
; - CCU -
mov CCH1,#$FF
mov CCL1,#$80
mov CCEN,#%00001000
setb ET2 ; enable TMR2 Int.
setb EAL ; enable all Int.
loop ljmp loop ; Ende Hauptprogramm
TMR2INT clr TF2 ; Uberlaufflag TF2 loeschen
inc P4 ; nur test
mov DAPR,#$00 ; DAPR ->Spannung 0-5V, Start der Wandlung
wait jb BSY,wait ; Ende Wandlung ADC abwarten
mov A,#$80 ; Vorgabewert
mov $00,ADDAT
cjne A,$00,s2 ; setzt carry, falls r0 groesser als A (r0)
reti ; falls equal!
s2 jc incCC
mov A,CCL1
jz ende
dec CCL1 ; falls CRCx -> f aendert sich
jz ende
incCC mov A,CCL1
subb A,#$FF
jz ende
inc CCL1
ende reti
.end
3.3 Flussdiagramm der Interruptroutine
Am Port 1.1 war jedoch nur ein Signal mit konstanter Frequenz, aber ständig im kompletten Bereich variierenden Tastverhältnis zu erkennen.
Aus Zeitgründen konnte das Programm nicht fertiggestellt werden.
4 Interpretation der Messergebnisse
Die Initialisierung war in Ordnung, es konnte ein pulsweitenmoduliertes Signal erzeugt werden. Die Frequenz war mit 4,0kHz etwas über dem berechneten Wert von 3,9kHz. Dies könnte an einem ungenauen Quarz aber auch an der Messung mit dem Oszilloskop liegen. Für die eingestellten 10 Schritte (ca. 10ms) war toff = 20ms etwas zu lange. Dies könnte daran liegen, dass P1.1 schneller zurückgesetzt als gesetzt wird.
Die Regelschleife zeigte nur ein ständig ein von null auf max. (oder umgekehrt?) ansteigendes (fallendes) Tastverhältnis an. Es wird offensichtlich CCL1 ständig erhöht oder erniedrigt. Zwei Programmfehler sind sicherlich ein jz statt eines ljmp vor dem Label incCC sowie eine fehlerhafte Implementierung der Zero Überprüfung. Eine genauere Überprüfung des aktuellen Programms ist deshalb sinnlos.
[1] 8051 m-Controller Praktikum Keim, Schnell; Franzis-Verlag
[2] MC-Tools 5 Handbuch des 80C517 und 80C517A; Feger, Reith, Hardware u. Software Verlags OHG