Calliope Mini und das Mikrofon

           
Elektronik-Labor   Projekte   Microbit 


Der Calliope besitzt ein Mikrofon. Es handelt sich um ein MEMS-Mikrofon, also ein ganz aktuelles Bauteil. Es kann über einen analogen Eingang ausgelesen werden.



In der JavaScript-Darstellung:

let micwert = 0
basic.forever(() => {
    micwert = pins.analogReadPin(AnalogPin.MIC)
    serial.writeNumber(micwert)
    serial.writeLine("")
})

Man sieht nun eine mittlere Spannung (517), aber fast keine Reaktion auf Schall. Man muss schon erheblichen Krach machen, damit sich etwas ändert. Dann erreicht man einen Unterschied von einem oder zwei Bit. Nur wenn man direkt auf das Mikrofon klopft, entsteht ein deutliches Signal.



Auf der Platine sieht man nahe am Mikrofon einen kleinen Operationsverstärker im Gehäuse SOT-23-5. Mit einer Nadel habe ich da ein kleines Signal eingespeist und am Ausgang mit dem Oszi gemessen. Ergebnis: Die Verstärkung ist entweder zweifach oder einfach, je nachdem wohin ich den Eingang lege.


Ein Blick durch die Lupe offenbart die Schaltung.  Und mein Multimeter kann einigermaßen zuverlässig die Bauteile auch im eingebauten Zustand messen (löten darf ich ja nicht...). Der OPV wurde offenbar als Inverter mit der Verstärkung 1 eingesetzt.  Ich hoffe nicht, dass das eine geplante Entscheidung war, die dem Lärm der Grundschulkinder Rechnung trägt. Eher vermute ich, dass es ein Ergebnis der Teamarbeit ist. Einer hat schon mal der Prinzip gezeichnet, ein anderer wollte noch die richtige Verstärkung herausfinden, kam aber dann nicht mehr dazu. 

Ist aber kein Problem, die Verstärkung kann ohne Änderung der Platine angepasst werden. Ich schlage einen Verstärkungsfaktor von 100 vor. Man könnte R1 = 1 k und R2 = 100 k wählen, aber dann wäre die untere Grenzfrequenz 1,6 kHz. Besser ist es vielleicht, R1 bei 10 k zu lassen und R2 auf 1 M zu ändern, dann läge die untere Grenzfrequenz wie jetzt auch bei 160 Hz. Man müsste mal testen, ob der verwendete OPV dafür geeignet ist, oder ob er dann zu viel Offset hat. Wer schon einen eigenen Callope und damit die Lizenz zum Löten hat, kann es ja mal testen.


Schaltplan-Details

Inzwischen habe ich ja den Schaltplan des Calliope gefunden, und er bestätigt weitgehend die Messungen am Mikrofonverstärker. Da zeichnet sich übrigens ein Weg ab, wie man die Verstärkung minimalinvasiv erhöhen kann. Es sollte reichen, R40 (= R1 in meiner Skizze) mit einem Drähtchen zu überbrücken. Das Mikrofon hat einen Innenwiderstand von rund 100 Ohm. So kommt man auch auf eine 100-fache Verstärkung, allerdings auf Kosten der unteren Grenzfrequenz. Besser wäre es also, R41 durch 1 MOhm zu ersetzen. 

Ein weiteres Detail fällt ins Auge. Ich hatte zwar auf der Platine schon einen Kondensator zwischen OPV-Ausgang und GND gesehen, hatte aber vermutet, dass er sehr klein ist. Im Schaltplan ist er dagegen mit 100 nF angegeben. Das ist ungewöhnlich, die meisten OPVs darf man nicht stark kapazitiv belasten. Bei höheren Frequenzen stellt der Kondensator eine geringe Impedanz dar, die den OPV zu einer starken Strom-Aussteuerung zwingt. Sobald die Ausgangsströme in ihre Sättigung gehen, wird der Strom rechteckförmig und die Ausgangsspannung dreieckförmig. Dieses Verhalten konnte auch nachgewiesen werden, indem am invertierenden Eingang ein Signal vom NF-Generator eingespeist wurde. Durch Parallelschalten eines weiteren Kondensators mit 100 nF  wurde bei sehr hohen Frequenzen die Amplitude halbiert. Damit ist klar, dass tatsächlich 100 nF bestückt wurde.

Man sieht sozusagen, wie der OPV sich quälen muss, den Kondensator umzuladen. Bei einer geringeren Frequenz wird dagegen noch ein fast sauberer Sinus übertragen. 

Erstaunlich ist, dass der OPV noch bis etwa 20 kHz gegen den Kondensator von 100 nF ankommt. Kurz nachgerechnet, der kapazitive Widerstand bei 20 kHz beträgt 80 Ohm. Offensichtlich kommt der MCP6001 damit noch klar. Trotzdem, der Kondensator sollte nicht bestückt werden. Falls das ein Kampf gegen vagabundierende HF war, dürfte ein kleiner Kondensator von 1 nF reichen.



Minimal-Umbau des Verstärkers



Hier ein Testaufbau für eine kalibrierte Messung der Empfindlichkeit. Der kleine Lautsprecher liegt direkt auf dem Calliope und wird mit meinem Sinusgenerator mit 1 kHz angesteuert. Einfach mit voller Aussteuerung, aber das Gerät ist eigentlich nicht für die Ansteuerung eines Lautsprechers gemacht und hat einen Innenwiderstand von 600 Ohm. Im Endergebnis kommt so etwas ähnliches wie Zimmerlautstärke heraus, allerdings gut reproduzierbar.



Man sieht die fehlende Verstärkung. Direkt am Lautsprecher reicht die gemessene Amplitude nur 10 LSB von der Mitte.

Inzwischen habe ich doch noch die Erlaubnis zum Löten. Aber ich darf kein Bauteil entfernen. Es bleibt nur, R40 zu überbrücken, denn das lässt sich leicht wieder rückgängig machen. Man sieht allerdings, dass die Löterei bei diesen kleinen Bauteilen nicht einfach ist. Die Lötspitze ist da schon deutlich dicker als der Widerstand.




Minimalumbau mit Überbrückung eines Widerstands R40.


#

Schon besser, bis etwa 30 LSB bei 1 kHz. Allerdings liegt jetzt die untere Grenzfrequenz sehr hoch bei ca. 16 kHz. Aber das Mikro reagiert schon besser auf Umweltgeräusche. Besser als nichts.


Nachbau mit dem Micro:bit von RainerR




Hier wurde der Micro:bit zusammen mit einem MEMS-Mikrofon von Adafruit verwendet. Der Vorverstärker hat einen LM358 und ist dimensioniert wie oben vorgeschlagen. Die Verstärkung beträgt also 100. Das Ergebnis überzeugt. Mit dem Testlautsprecher droht schon Übersteuerung, deshalb musste der Pegel reduziert werden. Das Signal reicht jetzt praktisch für eine volle Aussteuerung des AD-Wandlers. Und auch die Reaktion auf normale Umweltgeräusche ist sehr deutlich. Der Versuch zeigt, so geht es auch mit dem Calliope.





Calliope Mic-Umbau mit 1 MOhm



Heureka! Heute kam mein Calliope an! Es handelt sich um eine Platine der neuesten Generation, was man an einer kleinen Korrektur auf der Rückseite erkennt. Eine Leiterbahn wurde mit dem Bohrer durchtrennt. Calliope berichtete davon.



Nur der Mikrofonverstärker ist geblieben wie bisher. Aber jetzt darf gelötet werden!



Also erstmal 10 kOhm und 100 nF auslöten. Die Bauteile sind so klein, dass sie sich im Lötzinn der Lötspitze verstecken können.



Einen SMD-Widerstand mit 1 MOhm (1004)  hatte ich nur in "normaler" Größe, weil er im Sparrow eingebaut wird. Er passte dann nur seitlich hochkant und diagonal auf die Platine. Bei der Löterei ist auch der zweite 10-k-Widersatnd warm geworden und etwas verrutscht. Das zu korrigieren traue ich mich nicht, denn ich bin froh, dass die Verbindungen stehen. Und ein Test zeigt, es funktioniert genau wie gewünscht!

Hier das Krachometer für lebhafte Grundschulkinder:

let leds = 0
let krach = 0
let micwert = 0
let min = 0
let max = 0
basic.forever(() => {
max = 0
min = 1023
for (let index = 0; index <= 500; index++) {
micwert = pins.analogReadPin(AnalogPin.MIC)
if (max < micwert) {
max = micwert
}
if (min > micwert) {
min = micwert
}
}
krach = max - min
if (krach < 10) {
leds = 0
}
if (krach > 10) {
leds = 1
}
if (krach > 20) {
leds = 2
}
if (krach > 40) {
leds = 3
}
if (krach > 80) {
leds = 4
}
if (krach > 160) {
leds = 5
}
if (krach > 320) {
leds = 6
}
if (krach > 640) {
leds = 7
}
basic.showNumber(leds)
})


In einer Schleife mit 500 Messungen werden die Minima und Maxima der Mikrofonsignale gesucht. Die Differenz Max-Min ist die Spitze-Spitze-Amplitude. Durch Vergleiche mit jeweils doppelten Grenzwerten wird daraus eine logarithmische Skala mit 6-dB-Stufen. Dieser Level wird in der LED-Anzeige ausgegeben. Der Anzeigeumfang beträgt also mehr als 40 dB

Wenn jemand den Calliope ohne Umbau verwenden will, sollte er die Schwellen verkleinern, 1,2,4,8,16. Insgesamt werden trotzdem erst 20 dB höhere Lärmpegel sichtbar, weil die zusätzliche Verstärkung mit 40 dB angesetzt wurde.


Krachometer-2 mit LED-Zeiger



Video:  https://youtu.be/PDaeMrlKl4U

let leds = 0
let krach = 0
let micwert = 0
let min = 0
let max = 0
basic.forever(() => {
max = 0
min = 1023
for (let index = 0; index <= 500; index++) {
micwert = pins.analogReadPin(AnalogPin.MIC)
if (max < micwert) {
max = micwert
}
if (min > micwert) {
min = micwert
}
}
krach = max - min
if (krach < 10) {
leds = 0
}
if (krach > 10) {
leds = 1
}
if (krach > 20) {
leds = 2
}
if (krach > 40) {
leds = 3
}
if (krach > 80) {
leds = 4
}
if (krach > 160) {
leds = 5
}
if (krach > 320) {
leds = 6
}
if (krach > 640) {
leds = 7
}
if (leds == 0) {
basic.showLeds(`
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
`)
}
if (leds == 1) {
basic.showLeds(`
. . . . .
. . . . .
. . . . .
. . . . .
. . # . .
`)
}
if (leds == 2) {
basic.showLeds(`
. . . . .
. . . . .
. . . . .
. . # . .
. # # # .
`)
}
if (leds == 3) {
basic.showLeds(`
. . . . .
. . . . .
. . # . .
. # # # .
# # # # #
`)
}
if (leds == 4) {
basic.showLeds(`
. . . . .
. . # . .
. # # # .
# # # # #
# # # # #
`)
}
if (leds == 5) {
basic.showLeds(`
. . # . .
. # # # .
# # # # #
# # # # #
# # # # #
`)
}
if (leds == 6) {
basic.showLeds(`
. # # # .
# # # # #
# # # # #
# # # # #
# # # # #
`)
}
if (leds == 7) {
basic.showLeds(`
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
`)
}
})






Elektronik-Labor   Projekte   Microbit