Auf der Suche nach etwas kräftigeren Treibern für die BaseStation von DCC++ bin ich auf das Motor Shield der Firma Cytron gestoßen.
Das Gerät hat zwei Endstufen die jeweils 10 A stemmen, die Verdrahtung der Arduino Anschlüsse wird mit Steckbrücken erledigt und die Endstufen sind mit Sense Widerständen ausgestattet. Darüber hinaus wird im Auslieferungszustand des Shield bereits eine über einen StepDown Wandler erzeugte Spannung von 5 V an den Arduino geliefert, man muss nicht daran denken, irgendwelche Steckbrücken oder Leiterbahnen aufzutrennen. Bliebe noch zu erwähnen, dass die Leiterplatte sehr sauber hergestellt wurde, qualitativ hochwertig. Eigentlich ein rundum sorglos Paket, könnte man meinen.
Leider sind die Sense Widerstände nur für die interne Schutzschaltung vorgesehen, es erfolgt keine Auskopplung in Richtung der Arduino Analogeingänge. Zudem sind die Widerstände mit 2 mΩ ausgesprochen klein, am original Aduino Motorshield arbeiten wir mit 150 mΩ. Zusätzlich ist der Spannung über den Widerständen eine ordentlich störende Hochfrequenz überlagert. Aber da für eine Auskopplung der Strommessung ohnehin ein Verstärker vorgesehen werden muss, kann der OpAmp auch gleich als Tiefpass ausgelegt werden.
Überschlägig komme ich für die Erkennung des ACK Impulses (nach DCC Norm 60 mA für 6 ms) auf eine notwendige Verstärkung von 10000, wenn ich ein ähnliches Potential wie beim original Arduino Motor Shield erreichen will. Das ist zweistufig machbar, aber einstufig wäre besser, weil einfacher. Man wird sehen.
Die Konfiguration des Shield über die Steckbrücken klappt einwandfrei, eine saubere Lösung, gefällt mir sehr gut. Jetzt muss also die Rückmeldung angegangen werden…
Ich habe eine kleine Platine entworfen, die auf die vorhandenen Steckbrücken aufgesteckt werden kann, verbunden ist nur 5V, GND und die beiden Analogeingänge A0 und A1 des Arduino. Zwei Leitungen von den heißen Enden der Sense Widerstände zu den Eingängen der Schaltung müssen an den vorgesehenen Stellen angelötet werden.
Als OpAmp kommt ein LM358 im DIP Gehäuse zum Einsatz, alle passiven Bauteile sind SMD Teile auf der Oberseite, die Stecker zum Arduino werden von unten eingelötet. Die beiden Stufen des LM358 sind ohne Änderung erst einmal zweistufig verschaltet, können aber über eine vorgesehene Trennstelle als jeweils einzelne Stufen für Kanal A und Kanal B verwendet werden. Hier das Schaltbild und das Layout:
(Click auf das Bild für volle Auflösung)
In natura stellt sich das Board so zur Schau:
Im Bild sind bereits die Kondensatoren C1 und C3 entfernt, beide Verstärkerstufen sind dadurch nur noch Tiefpässe 1. Ordnung. Weiterhin sind die Stufen getrennt, die Schaltung werkelt als zwei einstufige Verstärker mit jeweils vorgeschaltetem Tiefpass.
Die Sense Widerstände werden mit Drähten kontaktiert.
Die fertige BaseStation:
Der einstufige Tiefpass/Verstärker mit einer Verstärkung von ca. 300 lässt das schon besser aussehen und die Rückmeldungen vom Decoder werden einwandfrei erkannt.
Nach dem Verstärker hat der Impuls eine Höhe von ca. 500 mVss.
Der auf dem Shield verwendete H-Brücken Controller DRV8701E von Texas Instruments hat einen Ausgang SO, der das Signal seines Sense-Eingangs um Faktor 20 verstärkt ausgibt. Cytron hat diesen Ausgang nicht verwendet und die testweise Adaption des Pins mittels Kupferlackdraht war mit Hobbymitteln nicht einfach aber machbar.
Hier zwei Aufnahmen mit einem Mikroskop nach der Operation. Der Chip misst 4 x 4 mm.
Der Test ergab, dass die Verwendung dieses SO Signals keine Verbesserung gegenüber der direkten Messung am Sense Widerstand bringt, diese Operation kann man sich also sparen.
Nachdem klar war, dass der Verstärker einstufig realisiert werden kann, habe ich das Schaltbild und das Board noch ein bisschen aufgeräumt und eine weitere Version erstellt.
(Click auf das Bild für volle Auflösung)
Auch hier die realisierte Schaltung...
... und auf dem Shield montiert