kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz

9.22.8 Aufbau der Lautsprecherschaltung

Grundidee

  • Ein PWM-Ausgang dient dazu, die Tonhöhe sinusförmig vorzugeben, PWM 3.
  • Ein zweiter PWM-Ausgang dient dazu, eine Hüllkurve darum zu legen, PWM 13.
Stromlaufplan zur Lautspredcherschaltung.

Bild 9.22.8-1: Stromlaufplan zur Lautspredcherschaltung.

Laborplatine.

Bild 9.22.8-2: Laborplatine.

#include<avr/interrupt.h>

/*
unsigned char sinus[] = {
                             127,142,158,173,188,201,213,224,234,241,
                             247,251,253,253,251,247,241,234,224,213,
                             201,188,173,158,142,127,111,95,80,65,
                             52,40,29,19,12,6,2,0,0,2,
                             6,12,19,29,40,52,65,80,95,111
                        };
*/                      
unsigned char sinus[] = {127,166,201,229,247,254,247,229,201,166,127,87,52,24,6,0,6,24,52,87};                       
                        
unsigned char zaehler=0;
unsigned char zaehler_langsam=0;

unsigned char TON = 0;

unsigned char TONFOLGE[]={0,4,2,1,3};

ISR(TIMER1_COMPA_vect)
{
//    analogWrite(3,sinus[zaehler]);    
//    zaehler++;
//    zaehler%=20;
      digitalWrite(3,1);
      digitalWrite(3,0);
}

void setup() 
{
    DDRB=255; 
 
    TCCR1B &= ~(1<<WGM13); //Mode 4
    TCCR1B |= (1<<WGM12);
    TCCR1A &= ~(1<<WGM11);
    TCCR1A &= ~(1<<WGM10);
    
    //Vorteilung: 64, dann 250000Hz Zählung:
    TCCR1B &= ~(1<<CS12);
    TCCR1B |= (1<<CS11);
    TCCR1B |= (1<<CS10);    
    
    //Abtastrate: 50000Hz fünfzigtausend mal pro Sekunde.
    OCR1A=250;  

    TIMSK1 |= (1<<OCIE1A); //Mode 4
    sei();  
  
    //Motortreiber sicher ausgeschaltet lassen, da externe Spannung nötig!:
   //LINKER MOTOR
    //A5 als digitaler Ausgang, INPUT 3
    pinMode(23,OUTPUT);  
    //A0 als digitaler Ausgang, INPUT 4
    pinMode(18,OUTPUT);  
    digitalWrite(23,1); //1 eine Richtung
    digitalWrite(18,0); //0
    analogWrite(6,0);

    //RECHTER MOTOR
    //A4 als digitaler Ausgang, INPUT 2
    pinMode(22,OUTPUT);  
    //A1 als digitaler Ausgang, INPUT 1
    pinMode(19,OUTPUT);  
    digitalWrite(22,1); //1 eine Richtung
    digitalWrite(19,0); //0
    analogWrite(5,0);
    
    //Lautsprecher
    pinMode(3,OUTPUT);  
    
}

void loop() 
{

    analogWrite(13,210-(sinus[zaehler_langsam]>>3));    
    OCR1A=TONFOLGE[TON]*20+250-(sinus[zaehler_langsam]>>3);  
    
    zaehler_langsam++;
    if(zaehler_langsam==20)
    {
        zaehler_langsam=0;
        
        TON++;
        TON%=5;
    }    
    delay(100); //100*20==2000 2 Sekunden ist ein Zyklus.
}

Code 9.22.8-1: "Walfischgesänge"