Hallo,
ich steuere mit einem Arduino Nano (akutell auf einem Breadboard) ein
MCP41100 Digitalpotenziometer zur Lautstärkeregelung an. Das
funktioniert prinzipiell auch ganz gut, die geringe Auflösung (8 bit)
ist kein Problem. Leider habe ich aber ein Pfeifen im Audiosignal. Da
das Poti über ein Volumenpedal gesteuert wird, muss es leider dauerhaft
mit dem Nano kommunizieren.
Ich habe das Poti über 100nF abgepuffert, die Spannungsversorgung der
gesamten Schaltung ist ebenfalls gepuffert. Es gibt eine gemeinsame
Masse.
Ich kenne mich noch nicht so gut mit digitalen Schaltungen aus, daher
wäre ich für Tips dankbar, wie ich mich dem Problem nähern könnte. Ich
möchte das gerne fixen, bevor ich mich an das finale Design, Layout etc.
mache.
Vielen Dank,
Maz
Schick' nur einmalig Daten an den MCP41100, wenn das Pfeifen weg ist,
dann kann's sein, dass falsch kommuniziert wird. Oder die Datensignale
übersprechen auf einer Zuleitung. Oder die Kontakte auf dem Breadboard
schwächeln.
MWS schrieb:> Schick' nur einmalig Daten an den MCP41100, wenn das Pfeifen weg ist,> dann kann's sein, dass falsch kommuniziert wird. Oder die Datensignale> übersprechen auf einer Zuleitung. Oder die Kontakte auf dem Breadboard> schwächeln.
Erledigt, habe die Routine "digitalpotwrite" (s.u.) nur einmal aus dem
setup()-Teil des Programms aufgerufen - das Pfeifen ist weg. Leider muss
ich ja dauernd mit dem Poti kommunizieren, daher nützt mir das nicht so
viel.
1
intdigitalPotWrite(intpin,intvalue)
2
{
3
digitalWrite(pin,LOW);//When Slave is LOW, the MCP listens to the master
4
SPI.transfer(0x11);
5
SPI.transfer(value);
6
digitalWrite(pin,HIGH);//When Slave is HIGH, the MCP does not listen to the master
7
}
Übersprechen: Ja, kann sein, wenn ich die Kabel vom Arduino in die Nähe
der (nicht abgeschirmten) Audio-Kabel bringe, geht das Pfeiffen ZURÜCK
(ich hätte vermutet, es würde mehr). Soll ich für die Audio-Leitung mal
abgeschirmte Kabel verwenden? Wenn das was nützt, würde ich dann im
späteren Design auf der Platine kurze Verbindungen zum Digitalpoti
vorsehen und diese orthogonal zu den digitalen Leitungen führen).
Gibt's weitere Maßnahmen (Filtern oder dergleichen?).
Maz F. schrieb:> Leider muss> ich ja dauernd mit dem Poti kommunizieren
Warum?
Wieviel tausend mal pro sec. ändert sich "value"?
edit:
B.t.W. Was tut
"SPI.transfer(0x11);"
Wenn nicht mehrere SPI Slaves angeschlossen sind, dann würde ich zum
Testen den CE in Ruhe lassen, also nur einmal auf Low und nur noch Daten
rüberschieben. Oder jeweils ein kleines Delay nach und vor dem Wechsel
setzen.
Maz F. schrieb:> Wenn das was nützt, würde ich dann im> späteren Design auf der Platine kurze Verbindungen zum Digitalpoti> vorsehen und diese orthogonal zu den digitalen Leitungen führen).
In einem guten Design sind digitale und (empfindliche) analoge Signale
strikt getrennt.
Das MCP41100 macht es dir da auch sehr einfach, denn der Digitalteil und
der Analogteil sind auf jeweils gegenüberliegenden IC Seiten angeordnet.
So kann man das IC genau auf der Grenze zwischen Digital- und Analogteil
plazieren.
Freiliegende, ungeschirmte Digitalsignale sind zu vermeiden.
Entweder benutzt man hier geschirmte Kabel, oder Flachbandkabel, bei dem
jede 2. Ader mit GND verbunden ist.
Auf dem PCB führt man die digitalen Signale idealerweise über einer GND
Plane. Das hat schirmende Wirkung.
Am einfachsten lässt sich das mit einem 4-Lagen PCB verwirklichen.
Reduzieren der Flankensteilheit der Digitalsignale auf das Nötigste kann
ebenfalls sehr effektiv sein (Serienwiderstand 33..1000 Ohm).
Ausserdem: unbedingt GND Schleifen vermeiden. Eine nicht unterbrochene
GND Plane ist bei hochwertigen Designs der einfachste Weg.
Ausser man kennt sich wirklich gut aus mit sternförmigen Layouts...
> Gibt's weitere Maßnahmen (Filtern oder dergleichen?).
Wenn die Störung mal im Audioteil ist, ist guter Rat teuer.
Nachträgliches Filtern ist wenig effektiv.
Besser die Ursache der Einstreuung verhindern.
Das Pfeifen kommt wohl nicht vom SPI-Clock, wenn überhaupt vom
Übersprechen des CS. Dessen Flanken könnte man noch problemlos
verlangsamen. Allerdings könnte es auch von sich andauernd ändernden
Volume-Werten kommen. Schon mal probiert, immer dieselben Werte zu
senden?
den Slave auf LOW zu lassen hat leider nichts genützt, das Poti nimmt
dann die Änderungen nicht an (oder ich habe etwas nicht verstanden). Das
Heruntersetzen der Frequenz auf 50Hz war aber ein sehr guter Tip (kam
oben ja gleich zwei mal - danke dafür). Ich versuche jetzt noch die
Flanken zu verlangsamen (Serienwiderstand), damit es noch besser wird.
Und dann werde ich versuchen, bei einem Wechsel des Volumens die
Zwischenwerte zu durchlaufen, um das "Kratzen" des Potis bei argen
Sprüngen zu minimieren.
Maz F. schrieb:> um das "Kratzen" des Potis
Bist du dir sicher, das die Potis optimal für dich sind?
Die sind ja linear.
Als Lautstärkeregler wird auch gern der log Type genommen.
Ich meine mich erinnern zu können, das hier schon über für Audio
geeignete Potis diskutiert wurde.
Die Dinger schalten dann im 'Nulldurchgang' und Muten auch beim Schalten
...
Irgend sio etwas.
Und für die AD-Wandlung deines Pedal-Signals würde sich ein lineares
Poti (im Pedal) glaube ich besser eignen ...
blubber schrieb:> Maz F. schrieb:>> um das "Kratzen" des Potis>> Bist du dir sicher, das die Potis optimal für dich sind?> Die sind ja linear.> Als Lautstärkeregler wird auch gern der log Type genommen.>> Ich meine mich erinnern zu können, das hier schon über für Audio> geeignete Potis diskutiert wurde.> Die Dinger schalten dann im 'Nulldurchgang' und Muten auch beim Schalten> ...> Irgend sio etwas.>> Und für die AD-Wandlung deines Pedal-Signals würde sich ein lineares> Poti (im Pedal) glaube ich besser eignen ...
Vielen Dank - bin mir nicht sicher mit den Potis, aber die hatte ich
herumliegen und sie sind eigentlich überall zu bekommen.
Am Ende möchte ich verschiedene 100k Poti-Kennlinien damit simulieren
(log, linear, reverse linear, ICAR), da damit letztendlich nicht nur das
Volumen, sondern auch andere Effekte gesteuert werden sollen, die evtl.
ander Kennlinien benötigen. Die Auflösung wird auch vor diesem
Hintergrund kein Problem sein, da in der Schaltung drei Digitalpotis
kaskadiert werden (...16 bit). ^(vgl.
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&sqi=2&ved=0ahUKEwii-f_uyIPNAhUHJsAKHcQSA6wQFggkMAA&url=http%3A%2F%2Fwww.analog.com%2Fmedia%2Fen%2Ftechnical-documentation%2Fapplication-notes%2FAN-582.pdf&usg=AFQjCNH7lFJZkgSJDBZ1nxZE6_e1Ml5AAQ&bvm=bv.123325700,d.bGs&cad=rja)
Das Expression-Pedal zur Steuerung verwendet bereits ein lineares Poti,
die Auflösung des Arduino (10 bit) ist bereits ganz ok, evtl. versuche
ich noch auf 12 oder 14 bit (vgl. Midi) durch oversampling oder einen
externen DAC zu kommen.
Ich bin sehr interessiert an diesen Potis mit Nulldurchgang/zero
crossing detection/clickless switching. Habe welche von Maxim gesehen,
aber keine vernünftigen Bezugsquellen gefunden. Bin für jeden Hinweis
dankbar, gerne auch 2-channel oder 4-channel, wo man so etwas (auch von
anderen Herstellern) in D beziehen kann.