Motivation: Alle diese Dinger können nicht hören,
on der „Äther frei“ ist.
So kommen sich mehrere dieser Entfernungsmesser in die Quere und messen Unsinn.
Die übliche Lösung ist es, die HC-SR04 nach einem Zeitschema zu triggern.
Mit dem speziellen Teil geht das nicht, der misst immer.
Und wenn man bei Mobilanwendung nicht noch eine Funk-Synchronisierung
herumschleppen will, wäre ein
CSMA-Ansatz
nicht schlecht.
Idee: Den Mikrocontroller herunterlöten und Senden und Empfang
selbst abwickeln.
Als Ausgangspunkt die billigste Vorlage.
Der vorhandene Arduino hat ja nicht viel zu tun und dafür noch locker Zeit.
Genauigkeit spielt keine große Rolle.
Dazu müsste man den Rest der Schaltung (Piezo-Treiber, Empfänger + Filter)
kennen und passend ansteuern.
Diese Quelle scheint's zu beschreiben,
aber es fehlt an entscheidenden Stellen die Information.
Daher Neuerstellung des Schaltplans und Board-Layout
sowie aussagekräftige Oszillogramme.
Insbesondere bei Fremdbeaufschlagung von Ultraschall.
Die Eagle-Datei ist zur Produktion geeignet aber wer will das schon?
Überraschung! Die beiden Kapseln des HC-SR04 sind unterschiedlich!
Unter der Sendekapsel ist ein Blechboden mit aufgestempeltem „T“ und hat 1,8 nF, 40 kHz Resonanz,
die Empfängerkapsel ist ohne Blech, unbeschriftet und hat 2 nF, 38 kHz Resonanz.
Die beiden Anschluss-Stifte erscheinen polarisiert; einer von beiden
hat einen Isolationsring.
Die Einbaulage kann ich derzeit nicht herleiten.
Der Wandler des JSN-SR04T-2.0 hat 41 kHz Resonanz.
Dabei sinkt die Wechselspannung am 50-Ω-Ausgang des Frequenzgenerators
um 5 % ab, wie bei den anderen beiden Wandlern.
Das deutet auf eine Impedanz von 1 kΩ hin.
Schleierhaft erscheint mir warum die Chinesen nicht auf das Doppel-T-Filter
gekommen sind sondern ein (weitaus flankenunschärferes) Sallen-Key-Filter
eingesetzt haben.
Vermutlich weil engtolerierte Kondensatoren (1 %) zu teuer sind.
Auch die Verwendung zweier Schallwandler ist zumeist unzweckmäßig
beim Einbau.
Als Komparator bietet sich der eingebaute in Mikrocontrollern an.
Damit lässt sich die Anzahl der Verstärkerstufen reduzieren,
und es genügt der 8-polige LM358 statt dem 14-poligen LM324.
Als Piezotreiber sind AVRs treiberstark genug,
um ohne externe Treiber direkt an den Pins die notwendigen Ströme zu schalten.
Der Eingang des Verstärkers wird beim Senden per Mikrocontroller-Ausgang
an Masse geklemmt.
Dasselbe gilt für die (genial gemachte) Komparatorspannung.
Schließlich genügt eine Leitung zum Starten und Messen,
wenn man schon beidseitig Mikrocontroller voraussetzt.
Statt LM358 bietet sich auch der MCP6002 an:
Symmetrisches Ausgangsverhalten, 2,7 MHz GBW statt 1 MHz,
günstiger Preis.
Statt ATtiny25 bietet sich auch ATtiny13 an: Halb so teuer,
gut im schmalen SO8-Gehäuse verfügbar; die Piezoansteuerung
muss dann in Software erfolgen.
Aber: Schlechtere Frequenzkonstanz des internen Oszillators.
Keine 8-polige PIC ist dafür geeignet, weil der MCLR-Anschluss
niemals Ausgang werden kann.
U3 ist reiner Betrug! Von wegen Piezotreiber!
Der Schaltkreis hat intern Verbindung von Pin 11 nach Pin 14
sowie von Pin 10 nach Pin 7.
Vielleicht macht er da allenfalls Spannungsbegrenzung.
Zwischen Pin 3 und Pin 4+6 befindet sich ein invertierender Verstärker.
Dadurch dass der LM324
bzw. LM358 als Komparator nur wenig taugt,
kam ich überhaupt auf die Idee, den in einfachen PICs und ATtinys
eingebauten zu verwenden.
Bei der bei JLCPCB georderten Platine
uem2 wurde die
Schaltung und Dimensionierung auf dem Steckbrett getestet.
Dabei fielen folgende Erwägungen ins Gewicht:
Die Zwei-Piezokapsel-Technologie wurde beibehalten,
weil die Kapseln derartig schmalbandig sind,
dass ein Bedämpfen nach dem Senden partout nicht hinzubekommen war,
jedenfalls nicht für Empfang aus weniger als 25 cm Entfernung.
Die Anordnung der Kapseln mit 26 mm Mittenabstand wurde beibehalten.
(Ich habe mehrfach nachgemessen, es sind nicht 25,4 mm = 1 Zoll!)
Auf ein Bandfilter wurde verzichtet, da die Piezowandler
ohnehin sehr schmalbandig sind.
Er würde zudem einen (teureren, mehr Strom fressenden) OPV mit viel mehr
Verstärkungs-Bandbreite-Produkt erfordern.
Zwei statt drei OPV-Verstärkerstufen lassen den Einsatz des kleineren
Gehäuses (also LM358 stat LM324) zu.
Die abnehmende Grenzfrequenz bei erhöhter Stufenverstärkung
kommt der (ansonsten fehlenden) Bandfilterwirkung entgegen.
Die beiden OPV verstärken die 40 kHz nahezu im Leerlauf mit Faktor 25,
durch das Verstärkungs-Bandbreite-Produkt von 1 MHz.
Hochpasswirkung wird durch sehr kleine Koppelkondensatoren erwirkt,
damit ebenso die Unterdrückung tieffrequenter Störungen,
bspw. von der Speisespannung.
Der Piezoempfänger „sieht“ einen Lastwiderstand von (theoretisch) 0 Ω
und arbeitet so sehr gut als Stromquelle.
Wie in allen Vorüberlegungen wurde der Komparator in den Mikrocontroller
„verschoben“.
Der nichtinvertierende Eingang PB0 wird während des Sendens
zum Ausgang mit Lo-Pegel:
Das entlädt C6 und generiert so anschließend
die exponenzielle Komparatorschwelle,
die den Komparator bei nahen Objekten unempfindlicher macht.
Genauso wie im SR-04, aber mit einem doppelt genutzten Portpin.
Die Verwendung eines Output-Compare im Mikrocontroller
für die Ansteuerung der Sendekapsel erwies sich als Over-Engineering.
Eine software-generierte Impulsfolge erspart die erst ab ATtiny25
verfügbare Peripherieeinheit, und so genügt ein ATtiny11(!) als Controller,
geradezu ein Urgestein von Atmel mit nur 2 MHz.
Ein ATtiny13A ist der derzeitige empfohlene Ersatztyp,
den ich mit 1,2 MHz CPU-Takt laufen lasse.
Alten, billigen, von Chinesen bevorzugt eingesetzten 8-poligen PICs
mangelt es an Treiberstärke und einem eingebauten Komparator.
Der Pegelumsetzer erfordert einen Logic-Level-MOSFET T1
mit besonders kleiner Gate-Spannung.
Über seine Reversdiode arbeitet dieser bidirektional.
An beiden Seiten erfordert dieser Pullups,
die wie üblich im Chip integriert sind.
Bei unnötiger Pegelumsetzung wird dieser
durch einen Null-Ohm-Widerstand gebrückt.
Das Reset-Pin PB5 war zum Bedämpfen der Sendekapsel vorgesehen,
was auch mit PB0 geht, und ist nun frei für die problemlose
Benutzung eines ISP-Programmiergerätes.
Zum Reprogrammieren per
SMD-Programmierklammer
dient der Entkoppelwiderstand R9.
detektiert kurze Lo-Pulse an PB2 von < 10 µs,
um nur PB0 für 300 µs auf Lo-Pegel zu legen.
Das ist nützlich, wenn benachbarteuem2 senden.
detektiert Lo-Pulse an PB2 zum Senden
(8 Schwingungen mit 40 kHz = 8 × 25µs = 200 µs, zuzüglich 100 µs Relaxation).
detektiert Dauer-Lo an PB2 zum wiederholten Senden alle 32 ms.
Dann ist der Empfang allenfalls mit Serienwiderstand bspw. 10 kΩ sichtbar.
Das dient hier zur einfachen Funktionskontrolle und Fehlersuche
mit dem Oszilloskop, erspart einen Funktionsgenerator.
gibt Lo an PB2 aus, wenn Ultraschall empfangen wird,
d.h. der eingebaute Komparator eine Lo-Hi-Flanke ausgibt,
mit einer Nachhaltezeit von 75 µs,
d.h. Einzelschwingungen werden unterdrückt,
der angeschlossene Mikrocontroller kann aber anhand der Länge
auf Stärke und/oder Form des Reflexionsobjekts schließen.
ist nicht kompatibel zum SR-04:
Es genügt eine (bidirektionale) Leitung
wie bei Einpark-Sensoren für's Auto.
Das spart Portpins.
Alles ist Lo-aktiv.
Der Empfang von Ultraschall läuft permanent und ermöglicht so
die Detektion von Fremd-Ultraschall.
Mehrfache Empfangsimpulse können verwendet werden um mehrere,
tiefengestaffelte Objekte zu erkennen.
Die Zeitmessung erfolgt dementsprechend nicht per Pulslänge
sondern per Pulsabstand.
Die genaue Taktfrequenz von IC2 ist ohne Belang,
da die Zeitmessung (wie beim SR-04) vom übergeordneten Controller
erledigt werden muss.