Anleitung: Erste Schritte mit Orange Pi Zero für Anfänger vom Linux Anfänger.
Ich erhoffe in diesem Tutorial die Schritte zu erwähnen die die Linux Könner gar nicht erwähnen würden, weil für die das selbstverständlich sind.
Orange Pi Zero ist interessant mit seinem unschlagbarem Preis von 8,35€ bei AlieExpress. Viele Programme und Programm Module von Raspberry PI laufen auf dem Board. Folgende Anwendung sehe ich für das Orange Pi Zero vor:
- Zentrale Server für Haus Automatisierung mit IoBroker.
- MQTT Broker (Server).
- WiFi-Internet-Radio für das Bad mit Bewegungsmelder, Verwaltung der Radiosender Liste per Webinterface.
- Webserver mit PHP und MySQL zum Betrieb eigener Homepage (mit Hilfe von DynDns).
- LAN Kabelgebundene I2C Steuerung mit MCP23017 (16 Kanälen IO) pro IC, manche mögen WLAN nicht.
Um das realisieren zu können müsste ich mich mit den ganz neuen Sachen auseinandersetzen und das was ich rausgefunden habe, möchte ich hier in einfachen Schritten zeigen.
Image für SD-Karte herunterladen Armbian Image "Armbian_5.25_Orangepizero_Debian_jessie_default_3.4.113"
Mit dem Tool Win32diskimage unter Windows auf die SD einspielen (Das Tool muss mit Admin Rechten gestartet werden). SD Karte kann 2G…16G sein.
SD-Karte in Orange Pi Zero Kartenslot einstecken und Orange Pi Zero über Micro USB mit einem Ladeadapter mit Strom versorgen. USB-Netzteil soll 1A liefen können. (Bitte nicht von einem Computer USB Port betreiben, weil Orange PI versucht dann die Verbindung über USB mit Computer herzustellen, dabei kommt es zu den Fehlermeldungen.)
Es gibt da 2 Möglichkeiten.
1 Möglichkeit: über Serielle Schnittstelle RS232 TTL (3,3V).
2 Möglichkeit über Netzwerk Kabel und Router.
1) Verbindung über Serielle Schnittstelle
Bitte verwenden Sie ein USB-Seriell Adapter mi 3,3V Pegel.
Anschluss erfolgt an 3 poliger Stiftleiste neben der Ethernet Buchse,
Pin 1 ist am Rand der Platine. GND des Kabels geht zum Pin1 (GND), TxD des Kabels geht zum Pin2 (RxD), RxD des Kabels geht zum Pin3 (TxD).
Alternativ kann 5V Kabel verwendet werden, allerdings soll das TxD Leitung über eine schottky Diode an 3,3V Pin des Orange Pi angeschlossen werden, damit bilden wir einfachen Spannungsbegrenzer der die Spannung auf 3,3+0,3V=3,6V begrenzt.
Als Software für die Linux Terminal empfehle ich das PuTTY
PuTTY einstellen: Connection Typ: Serial, Serial line: COMx (bitte ihre Port Nr. wählen), Speed: 115200.
Vorteil dieser Verbindung ist dass, Sie die Debug Ausgaben und Meldungen des Systems während des Ladevorgangs sehen.
Naschteil: Maus und F1..F10 tasten funktionieren nicht. Statt F1 funktioniert „Alt“+“1“, statt F10 funktioniert „Alt“+“0“
Damit können Sie das WLAN des Orange Pi Zero einstellen ohne ihr Router zu berühren.
2) Orange Pi Zero über das Netzwerkkabel an den Router anschließen.
Auf der Router Konfigurationswebseite suchen Sie in der Liste der DHCP-Clients das OrangePi um die IP Adresse der Orange Pi Zero zu ermitteln. Jetzt kann das PuTTY verwendet werden.
PuTTY einstellen: Connection Typ: SSH, Host Name: IP Adresse der Orange Pi Zero, Port 22
Nach dem die Verbindung aufgebaut wurde, erscheint das Text „login as: „
Während Eingabe des Passwortes wird nichts angezeigt.
Standard Logindaten:
• Benutzer: root
• Passwort: 1234
Nach erfolgreicher Anmeldung werden Sie aufgefordert root Passwort zu wechseln (altes Passwort, neues Passwort, noch mal neues Passwort).Danach werden Sie aufgefordert noch einen Benutzer außer root anzulegen.
Damit ist die erste Einrichtung der Orange Pi Zero abgeschlossen.
Um den Orange Pi Zero über den WiFi mit ihrem Haus Netzwerk zu verbinden, starten Sie das Programm
nmtui
Da ist eigentlich alles selbsterklärend. Bei der Verbindung mit PuTTY über Serielle Schnittstelle, bedienen Sie das Programm mit Tabulator und Pfeil Tasten.
Nachdem sie sich für die Verbindungsweg über WLAN oder LAN entschieden haben und das auch im Orange Pi Zero konfiguriert haben, müssen Sie dafür sorgen dass der Router immer die gleiche IP Adresse dem Orange Pi Zero vergibt. Das lässt sich machen auf der Router Konfigurationswebseite. Suchen Sie in der Liste der DHCP-Clients das Orange Pi aus und kopieren Sie die MAC Adresse in Zwischenablage. Dann gehen Sie bitte zum Menüpunkt "Address Reservation" und machen Sie da einen neuen Eintrag. Danach muss der Router neu gestartet werden. Die IP-Adresse die Sie da eingetragen haben, benutzen Sie bitte bei Einstellungen des PuTTY.
Ein paar Linux Befehle:
Nach dem das Internetverbindung steht, wird empfohlen das System auf neuste Stand zu bringen das geschieht mit den Befehlen:
apt-get update
apt-get upgrade
Dateimanager ähnlich wie Norton Commander (dos) gibt es für Linux und heißt Midnight Commander.
Installation:
apt-get install mc
Starten Sie den Midnight Commander durch Eingabe von mc
Midnight Commander hat auch ein Texteditor der sehr unbequem ist (nach meinem Empfinden). Und ich habe die Möglichkeit gesucht die Texte auf meinem Windows PC entfernt zu editieren.
Die Lösung ist das SFTP. Um SFTP zu nutzen bedarf es keine zusätzliche Software Installation auf dem Orange Pi Zero. Als SFTP Client habe ich Firefox addon „FireFTP“ auf meinem Windows Rechner installiert. Setup geht so: „Ein Benutzerkonto einrichten“->“Grundeinstellungen“ unter Zugangsname die Verbindung irgendwie benennen, Host: Die IP des Orange PI Zero angeben, Benutzername: root und Ihr root Passwort. Bei dem Reiter „Verbindungen“ das SFTP auswählen und Port 22 Angeben.
Mit dem SFTP Client kann man Dateien auf der Orange Pi Zero vom Windows aus hoch- und runterladen und editieren.
Das geht kinderleicht. Orange Pi Zero runterfahren (halt) und ausschalten. SD-Karte in Windows PC einstecken. Image vom SD-Karte mit Win32diskimage erstellen. Fertig!
Die erstellte Image kann später auf die SD-Karte gleicher oder größerer Kapazität eingespielt werden.
Grundsätzlich kann Orange Pi Zero ohne Kühlkörper arbeiten. Aber es gibt dabei Einschränkungen. Wenn CPU zu heiß wird fährt das System automatisch die Taktfrequenz runter. Dies geschieht wenn CPU 70 Grad übersteigt.
Es ist besser Orange Pi Zero mit Kühlkörper zu betreiben.
Unbelastet hat mein Orange Pi Zero mit Kühlkörper 40 Grad.
100% Belastet hat mein Orange Pi Zero mit Kühlkörper 65 Grad.
Sie können übrigens die aktuelle CPU Temperatur aus der Datei „/etc/armbianmonitor/datasources/soctemp „ oder „/sys/class/thermal/thermal_zone1/temp“ auslesen.
Ersten Test des Audioausgangs habe ich mit Kopfhörer und 2x 4,7uF Kondensator durchgeführt. Pluspole der Elko werden an LINEOUTL und LINEOUTR Angeschlossen (sehe pinout). Kopfhörer werden dann in Reihe mit Kondensatoren geschaltet.
In terminal geben wir ein:
speaker-test -twav -c2
Um Wiedergabe zu stoppen brechen wir die Programm Ausführung mit „Strg + C“
Wenn Sie nichts hören kann es daran liegen das lieneout per Software abgeschaltet ist.
Lieneout lasst sich mit Audiokarten Regler alsamixer einschalten.
alsamixer
Navigieren Sie mit Pfeiltasten zu „Audio li“ und aktivieren Sie den in dem Sie „m“-Taste betätigen.
Schlissen Sie eine LED mit einem Vorwiderstand zwischen GND (Pin25) und GPIO 10 (Pin 26) an.
Folgende Befehle schalten das GPIO10 als Ausgang und schalten das LED ein.
echo 10 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio10/direction
echo 1 > /sys/class/gpio/gpio10/value
Mit dem Befehl über Kommandozeile schalten Sie das LED wieder aus.
echo 0 > /sys/class/gpio/gpio10/value
Bash script zum Blinken mit dem LED. Bash-Script beim Linux ist wie eine BAT-Datei im DOS (so habe ich das verstanden).
Erstellen Sie eine Text-Datei „blink.sh“ mit PSPad-Editor (Format UNIX einstellen) mit folgendem Inhalt:
Übertragen Sie die Datei in Verzeichnis root
Rechte der Datei ändern: Ausführen erlauben
chmod g+rwx blink.sh
Datei ausführen
./blink.sh
Script Ausführung stoppen mit „Strg“+“C“
Datei ausführen im Hintergrund
./blink.sh &
Script Ausführung stoppen geht über htop, oder durch Eingabe von kill ProzessNr.
Wenn das Befehl „echo 10 > /sys/class/gpio/export“ bereits ausgeführt wurde, dann komm eine Fehlermeldung „./blink.sh: line 2: echo: write error: Device or resource busy“ Das liegt daran das GPIO 10 bereits erstellt wurde. GPIO 10 kann wieder freigegeben werden mit:
echo 10 > /sys/class/gpio/unexport
Übrigens das Steuern von Roter und Grüner LED geht auf diese Weise nicht. Weil die LEDs werden Bereits vom Betriebssystem verwaltet. Das Steuern von Roter und Grüner geht genauso wie GPIOs über das sysfs
echo 0 > /sys/class/leds/green_led/brightness
echo 1 > /sys/class/leds/green_led/brightness
Das gleiche gilt für Rote LED
Installation:
git clone https://github.com/xpertsavenue/WiringOP-Zero.git
cd WiringOP-Zero
chmod +x ./build
sudo ./build
Test und Aktuelle Zustände anzeigen geht so:
gpio readall
Rote LED an machen:
gpio write 30 1
unsere LED an GND (Pin25) und GPIO 10 (Pin 26) steuern
gpio mode 11 out
gpio write 11 1
gpio write 11 0
Auf einmal ist Pin 26 nicht mehr GPIO 10 sondern GPIO 11.
Heier wird Nummerierung nach „Wiring Pi“ verwendet, wahrscheinlich um kompatibel zum Raspberry Pi zu bleiben.
„Hallo World“ ist langweilig, deswegen schlage ich vor, einfach mit dem rotem LED zu blinken.
Nehmen Sie einen Texteditor (der Unix Format unterstützt)und schreiben Sie direkt den Programmcode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> #include <wiringPi.h> int main (void) { printf ("Orange Pi Zero blinkt mit roter LED\n") ; printf ("Aufhoeren mit Strg+C \n") ; wiringPiSetup () ; pinMode (30, OUTPUT) ; for (;;) { digitalWrite (30, 1) ; // On delay (100) ; // 100 mS digitalWrite (30, 0) ; // Off delay (100) ; } return 0 ; } |
Speichern Sie den Text als „blink.c“ in root Verzeichnis. WiringOP-Zero Bibliothek sollte bereits installiert sein.
Übrigens so können Sie beliebige Datei vom Internet heruntergeladen. Die Datei landet in Home Verzeichnis des aktuellen Nutzer.
Erster Parameter ist unsere Datei mit Programmcode, zweiter Parameter ist der Name der Ausführbaren Datei die wir erhalten wollen, dritter Parameter ist Name der Bibliothek wo der Linker die GPIO-Funktionen findet.
Wenn keine Fehlermeldungen angezeigt wurden, erscheint Datei „blink“ in root Verzeichnis.
Programm Ausführen
./blink
Nächste Schritt wäre dann, ein Taster abzufragen und ein Ereignis auszulösen bei der Betätigung. Ich denke an einen Taster der das System neustartet. Und das Programm sollte noch durch den Autostart gestartet werden.
Ich habe bei Linux 2 Möglichkeiten um Programme automatisch zu starten entdeckt.
Autostart bei Orange Pi mit dem Aufgabenplaner
Taskplaner bei Linux heißt „cron“. Um eine Aufgabe hinzufügen führen Sie das Befehl aus:
crontab -e
Am Ende der Textdatei tragen Sie
@reboot /root/blink &
und noch eine Leerzeile bevor sie die Datei speichern. „@reboot“ Bedeutet- ausführen beim Hochfahren. Das Programm „blink“ wird mit root-Rechten ausgeführt, das kann man mit htop überprüfen.
Autostart mit Init Skripts
Dieser Weg ist etwas komplizierter. Im Verzeichnis "/etc/init.d" soll ein Bash-Script erstellt werden zum Beispiel „Autostart.sh“
Ich bin wieder in die Unix Zeichenkodierung-Falle reingekommen. Wenn man Texte im Windows schreibt soll der Editor auf „Unix“-Format umgeschaltet werden. Sonst kommt immer eine Fehlermeldung
„-bash: /etc/init.d/Autostart.sh: /bin/bash^M: bad interpreter: No such file or directory“
bei dem Versuch die Bash-Datei auszuführen.
Rechte der Datei ändern: Ausführen erlauben
chmod u+x /etc/init.d/Autostart.sh
Danach sollte eine Verknüpfung (Symlink) für diese Datei im Verzeichnis „/etc/rc3.d“ erstellt werden. Dabei soll die Verknüpfung umbenannt werden. Erste Buchstabe soll „S“ sein, danach eine Zahl die Ausführungsreihenfolge angibt, danach beliebiger Text. Ich habe die Verknüpfung „S20Autostart.sh“ genannt.
Nachtrag: Leider meine Einträge im /etc/init.d/ und /etc/rc3.d haben dazu geführt dass Installation von MPD fehlerhaft lief. Erst als ich die Einträge entfernt habe klappte die Installation. Ich vermute das Autostart Einträge noch irgendwo im System registriert sein müssen damit die Installation Routine „apt-get install“ korrekt arbeitet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> #include <wiringPi.h> void myInterrupt (void) { system("reboot"); //system("halt"); } int main (void) { wiringPiSetup () ; pinMode (11, INPUT) ; // PIN 26 als Ausgang konfigurieren pullUpDnControl (11, PUD_UP) ; // PIN 26 mit Pul-Upp versehen wiringPiISR (11, INT_EDGE_FALLING, &myInterrupt) ; // Interrupt Routine definieren while(1) delay (5000) ; // Endlosschleife return 0 ; } |
wget esp8266-server.de/OrangePi/dateien/taster.c -Datei "taster.c" runterladen falls zu faul zu tippen.
gcc taster.c -o taster -lwiringPi -kompilieren
chmod u+x taster -Ausführen erlauben
./taster & - starten
Ich hatte mal erst while(1); geschrieben und mich gewundert das CPU um 10 Grad heißer geworden ist. Htop hat gezeigt das 1 von 4 CPU-Kerne voll ausgelastet ist. Mit delay () Anweisung im Körper der Endlosschleife wurde diese unerwünschte Effekt behoben. Profis in der Programmierung kennen vielleicht bessere Lösung Stichwort heißt daemon Programmierung.
Wir kommen dem Ziel (Internetradio für das Bad) etwas näher. In vielen Internet Radio Projekten mit Raspberry Pi wird MPD (Music Player Daemon) verwendet.
MPD ist ein Software-Sound-Player für Linux, mit dem sich Musik in verschiedenen Formaten abspielen lässt.
Installation:
apt-get install mpd mpc
Einstellungen: Öffnen Sie die Datei „/etc/mpd.conf“und suchen Sie nach dem ersten Eintrag „audio_output“ Ändern Sie den so wie es hier steht:
type "alsa"
name "My ALSA Device"
device "hw:0,0"
mixer_type "software"
suchen Sie nach dem Eintrag „volume_normalization“ und aktivieren Sie es:
volume_normalization "yes"
Ohne Volume normalization waren manche Radiosender zu leise. Nach dem die Datei „mpd.conf“ gespeichert wurde muss mpd –Dienst neu gestartet werden.
/etc/init.d/mpd restart
Jetzt wollen Wir dem ersten Webradio spielen lassen:
mpc add http://sender.eldoradio.de:8000/128.mp3
mpc play 1
Ich hoffe, man kann jetzt etwas in den Kopfhörern hören.
Wenn Lautsterke zu gering ist überprüfen Sie den ersten Schiebebalken im alsamixer und setzen Sie den auf Maximum.
mpc stop -Wiedergabe stoppen
mpc volume 60 -Lautstärke auf 60% setzen
Übrugens Liste alle mpc-Befehle lässt sich so anzeigen man mpc
Fehlermeldungen von Music Player Daemon finden Sie im Log-Datei „/var/log/mpd/mpd.log“
Ich war sehr überrascht, was für tollen Sound lieferte mir das Orange Pi Zero an den Kopfhörern, die nach dem obigen Schaltplan angeschlossen waren. Ich habe nicht erwartet dass ein Line-Ausgang einen normalen Kopfhörer treiben kann ohne Bass zu verlieren.
In manchen Schaltplänen aus Internet werden, die Widerstände die in Reihe zum Kopfhörer geschaltet sind, mit Wert von 200 Ohm oder sogar 30K angegeben. Da werden die Kopfhörer sehr leise.
Richtig sind 30 Ohm weil der ohmsche Widerstand der normalen Kopfhörer auch 30 Ohm beträgt. So findet eine Leistungsanpassung in der Schaltung statt (Maximale Strom bei Maximaler Spannung).
apt-get update
apt-get upgrade
apt-get install apache2 php5 libapache2-mod-php5
/etc/init.d/apache2 restart - Webserver neu starten
Wenn alles gut geklappt hat, sollte beim Aufruf der Orange Pi Zero IPs im Webbrowser, eine Begrüßungswebseite des Apache Webservers angezeigt werden.
Verzeichnis mit Web-Inhalt ist /var/www/html
Folgende Schritte installieren einfachsten MPD-Webinterface der mit PHP funktioniert.
wget https://github.com/sn0opy/MPD-Webinterface/archive/master.zip - ZIP-Datei runterladen
unzip master.zip - ZIP-Datei entpacken
mv MPD-Webinterface-master /var/www/html/radio - Komplettes Verzeichnis verschieben und umbenennen
rm master.zip - ZIP-Datei löschen
Zum aufrufen des MPD-Webinterfaces bitte http://_IP_des_OrangePi_/radio/ im Internetbrowser eingeben.
Dieses MPD-Webinterface ermöglicht das Eintragen des neuen Stream –Links zu der Liste der Internet Radiosendern, so wie das Prüfen ob die abgespielt werden. Das Interface ist ziemlich mager und die Lautstärkeregler hat keine untere und obere Begrenzung. Das ist aber einziges fertiges MPD-Webinterface der auf Anhieb funktioniert hat.
Ich wollte den Rad nicht neu erfinden und habe nach dem fertigen C-Codebeispiel oder Programm für Rotary Encoder gesucht. Leider, wie es oft passiert, habe ich nichts Passendes gefunden, entweder war das Programm nicht verständlich für mich oder, hat ohne Interrupt gearbeitet. Die Polling Methode darf hier nicht angewendet werden, denn das führt zu hohe CPU Auslastung.
Der Drehencoder hat zwei Ausgänge: Ausgang A und Ausgang B die erzeugen bei Drehung Impulse. Bei der Drehung nach rechts (im Uhrzeigersinn) kommt erst Impuls am Ausgang A und dann am Ausgang B.
Beim Drehen nach links (gegen Uhrzeigersinn) kommt erst Impuls am Ausgang B und dann am Ausgang A.
Im nachfolgenden Programm werden Interrupts von beiden Ausgängen A und B ausgewertet. Ich habe mich für abfallende Flanke entschieden.
Wenn an A ein Interrupt passiert und dabei B das High Pegel hat, dann ist es wahrscheinlich der erste Impuls bei der Drehung nach rechts. Das vermerken wir in die Variable "rechtslauf". Wenn nachfolgend ein Interrupt an B passiert und dabei das A Ausgang Low Pegel hat, dann ist die Rechtsdrehung bestätigt. Bei einer Linksdrehung passiert eigentlich gleiche nur alles spiegelverkehrt.
Erst kommt Impuls am Eingang B (A Pegel dabei ist High). Das vermerken wir in die Variable "linkslauf". Dann kommt Impuls am Eingang A (B Pegel Low). Jetzt ist Linksdrehung bestätigt.
Das Prellen der Kontakte kann zwar Interrupts auslösen, aber keine Links- oder Rechtsdrehung erzeugten. Denn dafür müssen die Kontakte am Ausgang A und Ausgang B gleichzeitig prellen und das passiert nicht, weil die Impulse nacheinander erzeugt werden und das ist durch mechanischen Aufbau des Drehgebers festgelegt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <stdio.h> #include <wiringPi.h> #define Taster 6 // Pin 22 Orange Pi Zero #define EncoderA 10 // Pin 24 Orange Pi Zero #define EncoderB 11 // Pin 26 Orange Pi Zero int Value=50; int rechtslauf=0; int linkslauf=0; void TasterInterrupt (void) { printf("Taster\n"); delay (100) ; } void EncoderAInterrupt (void) { rechtslauf=digitalRead(EncoderB); // A=0 und B=1 Erste Impuls bei Rechtslauf if(!rechtslauf && linkslauf) // A=0 und B=0 Zweite Impuls bei Linkslauf { Value--; printf("Lautstaerke %i \n", Value); } linkslauf=0; // Zustand vom Ersten Impuls loeschen } void EncoderBInterrupt (void) { linkslauf= digitalRead(EncoderA); // B=0 und A=1 Erste Impuls bei Linkslauf if(!linkslauf && rechtslauf) // B=0 und A=0 Zweite Impuls bei Rechtslauf { Value++; printf("Lautstaerke %i \n", Value); } rechtslauf=0; // Zustand vom Ersten Impuls loeschen } int main (void) { wiringPiSetup () ; pinMode (Taster, INPUT); // PIN als Ausgang konfigurieren pullUpDnControl (Taster, PUD_UP); // PIN mit Pul-Upp versehen pinMode (EncoderA, INPUT); // PIN als Ausgang konfigurieren pullUpDnControl (EncoderA, PUD_UP); // PIN mit Pul-Upp versehen pinMode (EncoderB, INPUT); // PIN als Ausgang konfigurieren pullUpDnControl (EncoderB, PUD_UP); // PIN mit Pul-Upp versehen wiringPiISR (Taster, INT_EDGE_FALLING, &TasterInterrupt) ; // Interrupt Routine definieren wiringPiISR (EncoderA, INT_EDGE_FALLING, &EncoderAInterrupt); // Interrupt Routine definieren wiringPiISR (EncoderB, INT_EDGE_FALLING, &EncoderBInterrupt); // Interrupt Routine definieren printf("Lautstaerke %i \n", Value); while(1) delay (5000); // Endlosschleife return 0 ; } |
wget esp8266-server.de/OrangePi/dateien/taster.c -Datei "taster.c" runterladen
gcc -o rotary rotary.c –lwiringPi - C Programm kompilieren
./rotary - Programm ausführen
Sehr günstig und klein. 5 Stück für 0,84€ bei Aliexpress gekauft.
Als erstes habe ich die Platinehen mit einem dicken Kondensator nachgerüstet. Den mein elektrotechnisches Gefühl hat einfach geschrien „Du kannst nicht die Schaltung die 6 Watt (6W/5V=1,2A)im im Impulsbetrieb aufnimmt, betreiben ohne einen Pufferkondensator“.
Ich habe den SMD Kondensator 470uF 6,3V genommen. Kapazität und/oder Spannung dürfen auch grösser gewählt werden.
Da meine bestellte 3W-Lautsprechern noch unterwegs sind, habe ich ein 120W Auto-Lautsprecher angeschlossen. Und es passierte ein Wunder: 3W Verstärker hat 120W Lautsprecher betrieben. Und der Bass war auch ordentlich, was ich gar nicht erwartet habe. (Wahrscheinlich handelt es sich bei der Angabe von 120W um PMPO Wert, was das ist, lesen Sie bei Wikipedia unter Thema Musikleistung)
Das Rauschen ohne Nutzsignal war auch sehr gering.
Ich bin begeistert vom PAM8403 D-Klass Verstärker.
Ich finde es auch toll das beim einschalten kein Knacken hörbar ist. Lediglich hört man etwas beim ausschalten.
Beim Versuch den PAM8403 an das Orange Pi Zero anzuschließen bin ich an ein Problem gestoßen.
Wenn PAM8403 Verstärker und Orange Pi Zero vom 2 unterschiedlichen 5V Netzteilen betrieben werden, funktioniert alles super. Sobald ich beide Teile vom gleichen Netzteil betreibe kommt starkes Rauschen und Kniestern im Hintergrund.
Eigentlich ist es auch OK 2 Netzteile zu benutzen. Eins für Verstärker 5V mit Stromstärke 1,5A. Und eins für Orange Pi Zero (Max Stromaufnahme 1,2A) 5V 1,5A. Die 5V USB Schaltnetzteile unbelasteten Zustand verbrauchen kaum Strom.
Als erstes müsste ich feststellen dass die 5V Spannung am Orange Pi Zero sehr unsauber ist. Das kann man sogar ohne Oszilloskop feststellen in dem man ein Piezo-Schallwandler (Piepser) an die 5V und GND irgendwo an der Platine anschließt. Normale weise hört man nur ein knacken beim anschließen und dann nix mehr. Hier kann man das Pfeifen und Knacken hören. Das ist der Wechselspannungsanteil der Versorgungspannung. Der wird durch wechselnde Belastung und Spannungsabfall an Steckern und Zuleitungen verursacht.
Ich habe versuche mit Labornetzteil gemacht, 5V an Stecker Leiste direkt eingespeist. Nichts hat wirklich geholfen.
Die Lösung für das Problem ist ein Große Pufferkondensator direkt am Orange Pi Zero. Der Kondensator hatte die Werte 3300uF 6,3V und stammt von einem Mainboard eines PCs oder von einem 5V Netzteil. Diese Maßnahme hat zwar das Rauschen am PAM8403 verringert aber nicht abgeschafft.
Zweite Maßnahme zu Unterdrückung des Rauschens, ist ein Tiefpass Filter an Audioausgang. Der soll verhindern dass die Hochfrequenzen vom Orange Pi Zero zum PAM8403 durchgehen. Die Hochfrequenzen sind zwar nicht hörbar, können aber mit der PWM Frequenz 350kHz des PAM8403 sich vermischen und so die Störgeräusche im Hörbaren Bereich erzeugen.
Dritte Maßnahme Stromversorgung mit Spulen zu entkoppeln. Ich hatte 47uH 1A zu Hand.
Mit dem Anschluss des PAM8403 Verstärker nach diesem Schaltplan könnte ich das Rauschen sehr gut minimieren.
Das Grund- Rauschen des Verstärkers ist auch noch dabei, ist aber nach dem Abstand von 20cm vom Lautsprecher nicht mehr wahrnehmbar. Das kann man aber auch verbessern in dem man den PAM8403 Verstärker ausschaltet während das Internetradio aus ist.
Das PAM8403 IC hat ein Shutdown Eingang. Das ist der Pin 12. Leider ist der SHDN (Shutdown) Pin auf meiner Platine nicht ausgeführt. Eine kleine Modifikation des PAM8403 –Modules: Pin 12 mit Lötkolben erhitzen und vorsichtig mit dem Skalpell anheben, eine Litze anlöten und mit Heißkleber fixieren. Jetzt kann das Shutdown Eingang des PAM8403 –Modules an ein GPIO der Orange PI angeschlossen werden.