B.7  Aufgaben aus Kapitel 7

1.
Welche kleinste Amplitudenstufe lässt sich mit dem integrierten D/A-Wandler realisieren? Welchem Signal-Störabstand entspricht dies?
Gemäß Datenblatt des MSP430F1612 hat der DAC12 12 Bit Auflösung. Somit ist die kleinste auflösbare Spannung Uref4095 = 0,6mV bei der 2.5V- Referenz. Als weitere Information ist im Datenblatt aber auch ein Linearitätsfehler von typischerweise ± 2 Bit angegeben. Damit beträgt der effektive Störabstand nur noch 1,76 + 10 6,02, also ungefähr 60dB.

 
 

2.
Entwerfe einen vollautomatischen Tester, um die Kennlinie eines Bipolartransistors aufzunehmen. Dazu soll der Basisstrom über den D/A-Wandler vorgegeben werden und der Kollektorstrom mit dem A/D-Wandler gemessen werden. Welche externe Beschaltung braucht man noch?


PIC
Bild B.3.: Schaltbild eines möglichen Transistortesters.


Den Baustein INA138 benötigen wir, um den Kollektorstrom potentialfrei messen zu können. Die Werte von R4 und R2 müssen an die Betriebsparameter des getesteten Transistors angepasst werden. Der Basisstrom ist näherungsweise (UDAC-0.6V )∕R2. Der Kollektorstrom ist V ADC∕R4∕R1 5k. Mit diesen Informationen kann die Betriebskennlinie des Transistors bestimmt werden.

 
 

3.
Schreibe ein Programm, das mit einem digitalen I/O-Port einen Sigma-Delta-D/A-Wandler realisiert. Welche Abtastfrequenzen lassen sich erreichen? Entwerfe dazu auch den nötigen analogen Ausgangsfilter.
const int UREF = 10; 
 
int main(void) 
{ 
 P1DIR = BIT1;           // P1.1 als Ausgang 
 P1SEL = 0x00;           // normale I/O-Funktion 
 
 da_wert = 10;           // hier Wert eingeben 
 while(1) 
 { 
   if (integrator >0) 
   { 
    P1OUT |= BIT1; 
    s=UREF; 
   } 
   else 
   { 
     P1OUT &= ~BIT1; 
     s=-UREF; 
   } 
   integrator = integrator + da_wert - s; 
 } 
}
Der Entwurf des Ausgangsfilters hängt sowohl von der beabsichtigten Auflösung als auch vom gewünschten Frequenzbereich ab. Nehmen wir eine Oversampling-Frequenz von 10kHz an, eine maximale Nutzfrequenz von 50Hz und 8 Bit Auflösung, so berechnen wir das Filter wie folgt: Die Grenzfrequenz ist 50Hz. Die nötige Dämpfung (Restwelligkeit) bei 5kHz (halbe Ausgabefrequenz) ist ca. 50dB. Daraus folgt ein Filter 2. Ordnung (20dB/Dekade * 2 Dekaden * Ordnung > 50dB). Beachte, dass am Ausgang ein Gleichwert von 0.5 Vcc überlagert ist, der gegebenenfalls auch noch entfernt werden muss.

 
 

4.
Schreibe ein Programm, das eine Servoregelung eines Gleichstrommotors realisiert. Als Sensor steht eine analoge Spannung von 0..1V für die Position von 0..360o zur Verfügung. Als Leistungsendstufe haben wir eine H-Brücke mit den Ansteuersignalen L/R und PWM.
#include  <msp430x16x.h> 
int winkel,pwmAusgabe; 
int sollposition; 
const int KR = 100; 
 
#pragma vector=ADC12_VECTOR 
__interrupt void ADC12_measure (void) 
{ 
  winkel = ADC12MEM0 + 1;   // A/D-Wert speichern 
  ADC12CTL0 |= ADC12SC;     // Konvertierung erneut starten 
} 
#pragma vector=TIMERA0_VECTOR 
__interrupt void TIMERA_ISR (void) 
{ 
  // einfacher P-Regler für Position 
  pwmAusgabe = (sollposition - winkel)* KR; 
  if (pwmAusgabe > 0) 
  { 
   P1OUT  = BIT1;           // rechts herum 
   TBCCR1 = pwmAusgabe;     // PWM-Ausgabe 
  } 
  else 
  { 
   P1OUT  = 0;              // links herum 
   TBCCR1 = -pwmAusgabe;    // PWM-Ausgabe 
  } 
} 
 
void main(void) { 
  WDTCTL = WDTPW + WDTHOLD; // Watchdog ausschalten 
 
  P1DIR = BIT1;             // L/R an Pin1.1 
 
  BCSCTL1&=~XTS;            // wähle LF 
  _BIC_SR(OSCOFF);          // Start LFXT1 
  TACTL   = TASSEL_1;       // wähle ACLK 
  TACTL  |= MC_1;           // Up-Mode 
  TACCTL0 = CCIE;           // Interrupt-Enable Cap/Comp 
  TACCR0  = 4095;           // Initialisierung 
 
  // PWM-Port initialisieren: Ausgänge TB1,TB0 
  P4DIR   = BIT1+BIT0; 
  P4SEL   = BIT1+BIT0; 
  // - SMCLK / 2 als PWM-Frequenz (= 500 kHz) 
  // - Wenn TBCCR0 erreicht wurde, wird TB0 getoggelt 
  //   und TB1 gesetzt 
  // - Wenn TBCCR1 erreicht wurde, dann Reset von TB1 
  TBCTL   = TBSSEL_2|ID_1; 
  TBCCTL0 = OUTMOD_4; 
  TBCCTL1 = OUTMOD_7; 
  TBCCR0  = 4095;           // 12-Bit-PWM 
  TBCCR1  = 0; 
  TBCTL  |= MC_1;           // Timer starten, Up-Mode 
 
  P6SEL=0x01;               // P6.0 als A/D-Eingang 
 
  ADC12CTL0 = ~ENC;         // Initialisierung des ADC12 
  ADC12CTL0 = ADC12ON + SHT0_15 + REFON + REF2_5V; 
  ADC12CTL1 = SSEL0 + SHP;  // Pulse-Sample-Mode benutzen 
                            // ACLK verwenden 
  ADC12MCTL0 = SREF_1;      // VREF+ und AVSS als Referenz 
  ADC12IE = 0x01;           // Interrupt ADC12 aktivieren 
  ADC12CTL0 |= ENC;         // ADC12 starten 
 
  _enable_interrupts ();    // Interrupts global aktivieren 
  ADC12CTL0 |= ADC12SC;     // Konvertierung starten 
 
  while(1) {} 
}
5.
Welche PWM-Frequenz muss ein Class-D-Audioverstärker mindestens haben, der 16 Bit Auflösung hat?
Ein Audiosignal hat typischerweise eine Bandbreite von 20kHz, so dass die PWM-Frequenz bei 2 20kHz 216 2,6GHz liegt