Siemens Frequenzumrichter Sinamics_v20


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Arduino, 74HC595 und PWM

In der einfachsten Ausführung benötigt das Schieberegister drei Signale von außerhalb, um richtig zu funktionieren. Es sind die Anschlüsse SHCP, DS und STCP. Mit ihnen ist es möglich, gewünschte Bit-Kombination in das Register zu schreiben und sie dann sichtbar zu machen. Die Voraussetzung dafür ist, dass der vierte Anschluss, OE Enable (Pin 13), mit Masse verbunden ist. Dieser Eingang gibt die Ausgänge des Bausteins frei. In dem Versuch wird dieser Eingang mit einem PWM-Signal verbunden. Mit dem Signal wird dann die Helligkeit der Leuchtdioden, die an die Ausgänge des Schieberegisters angeschlossen sind, reguliert. Die Pin-Belegung von 74HC595:

Anschluss 74HC595

Anschlusse 74HC595

In dem Beispiel werden zwei Schieberegister eingesetzt. Insgesamt kann man so 16 Dioden ansteuern. Beide Register sind in Reihe geschaltet. Das bedeutet, dass der Ausgang SQH‘ (Pin 9) des ersten Registers mit dem Eingang DS (Pin 14) des zweiten Registers verbunden ist. Bei der Konstellation ist zu beachten, dass beim Laden von weiteren Daten in das erste Schieberegister, die alten Daten automatisch in das zweite Register verschoben werden. An die Schaltung könnten problemlos weitere Schieberegister angeschlossen werden.

Die Versorgungsspannung eines Schieberegisters (hier SN74HC595) darf die Grenze von 6 VDC nicht übersteigen. Bei der Berechnung der Widerstände soll darauf geachtet werden, dass die gesamte Leistung des SN74HC595 bei 500 mW liegt.

Schaltplan

schaltplan


Testschaltung


Programm

Die Steuerung und Datenübertragung wird vom Arduino verwaltet. Das Schreiben der Werte in die Schieberegister erfolgt im Programm schrittweise. Zuerst geht SHCP auf Low, auf DS wird gewünschter Wert gelegt (0 oder 1), mit SHCP = HIGH wird der Wert in das Register übernommen. Diese Programmschritte kann man mit dem Befehl ShiftOut() ersetzen.
Die Dioden werden im Laufe des Programms in unterschiedlichen Konstellationen ein- und ausgeschaltet. Dabei wird dem PWM-Signal jedes Mal ein anderer Wert (HIGH-Anteil) zugewiesen. Dadurch leuchten die Dioden stets mit einer anderen Helligkeit.

// ****************************************************************************
// Diodenspiele mit PWM
// ****************************************************************************
int SH_CP_Pin = 40;                               // 74HC595 Pin 11 Shift Clock
int ST_CP_Pin = 42;                               // 74HC595 Pin 12 Latch Clock
int DS_Pin = 44;                                  // 74HC595 Pin 14 Data
int Enable_Pin = 8;                               // 74HC595 Pin 13 Enable (PWM)
int Bit_Nr, Pwm_Wert, i, j, k;
int Zufallszahl;

int Bit_Folge[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
void setup() {
  pinMode(ST_CP_Pin, OUTPUT);
  pinMode(SH_CP_Pin, OUTPUT);
  pinMode(DS_Pin, OUTPUT);
}

void Senden(int PWM) {
  digitalWrite(ST_CP_Pin, LOW);
  for (Bit_Nr=15; Bit_Nr > -1; Bit_Nr--) {
     digitalWrite(SH_CP_Pin, LOW);            
     digitalWrite(DS_Pin, Bit_Folge[Bit_Nr]);       
     digitalWrite(SH_CP_Pin, HIGH);            
  }
  digitalWrite(ST_CP_Pin, HIGH);
  analogWrite(Enable_Pin, PWM);
}
 
void loop () {
  // MUSTER 1 ***********************************************
  for (i = 0; i < 15; i++) { Bit_Folge [i] = 1; }
    for (j = 1; j < 2; j++) {
      for (k = 255; k > 179; k--) { 
        Senden(k); 
        delay(30);
      }
      for (k = 180; k < 256; k++) { 
        Senden(k); 
        delay(30);
      }
      delay(600);
    }
    
  // MUSTER 2 ***********************************************  
  for (j = 0; j < 8; j++) { 
    for (i = 0; i < 15; i++) { Bit_Folge [i] = 0; };
    k = 15 - j;
    Bit_Folge [j] = 1; 
    Bit_Folge [k] = 1;
    Pwm_Wert = j * 36;
    Senden(Pwm_Wert); 
    delay(200);      
  }
  delay (600);   

  // MUSTER 3 ***********************************************  
  for (i = 1; i < 11; i++) {
    for (j = 0; j < 15; j++) { Bit_Folge [j] = 0; };
      for (k = 0; k < 7; k++) { 
        Zufallszahl = random(15);
        Bit_Folge [Zufallszahl] = 1;  
      }
    Zufallszahl = random(8,15);
    Pwm_Wert = 105 + (Zufallszahl * 10);
    Senden(Pwm_Wert);
    delay (600);   
  }
  // MUSTER 4 ***********************************************  
  for (i = 1; i < 51; i++) {
    for (j = 0; j < 15; j++) { Bit_Folge [j] = 0; };
      Zufallszahl = random(15);
      Bit_Folge [Zufallszahl] = 1;  
      Zufallszahl = random(8,15);
      Pwm_Wert = 105 + (Zufallszahl * 10);
      Senden(Pwm_Wert);
      delay (100);   
  }  
}        

Kurzvideo


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz