H-Brücke für Elektromagnet & Messwerte per I2C übertragen

Hallo zusammen !

ich wollte hier wieder mal nach etwas "Inspiration" suchen (: .....

Und zwar muss ich die Polarität eines Elektromagneten mit 24V und max. 1,6A umkehren.....

Ich bin beim Suchen schon auf die beiden Artiekel gekommen:

http://www.arduino-tutorial.de/2010/06/motorsteuerung-mit-einer-mos-fet-brucke/

http://www.arduino-tutorial.de/2010/06/motorsteuerung-mit-einem-h-bridge-ic/

Allerdings brauche ich nur eien H-Brücke für einen Motor bzw in dem Fall Magneten....bis 1,6A

Und ich habe bei meinem µC leider nur ein Pin zur verfügung....
deswegen der Gedanke, mit dem einen Pin (HIGH oder LOW) ein ATTiny anzusteuern und mit diesem dann die H-Brücke zu steuern ?

(Ich hab noch nie was mit H-Brücken gemacht !)

Und ich habe bei meinem µC leider nur ein Pin zur verfügung...

Und damit willst du + / - / 0 schalten?

Den Arduino - Pin könntest du auf OUTPUT HIGH / OUTPUT LOW / INPUT ( High Impedanz) schalten.

Weiss jetzt aber nicht, wofür der Attiny gut sein soll, wenn es um die H-Brücke geht. Brauchst doch max. einen Treiber-Transistor ( Inverter ) für den 2. Eingangs-Pin?

Warum nimmst du durchgehend den Attiny, es ist doch nicht die erste Konfiguration (so wie ich das mitbekommen habe), bei dem die Anzahl der GPIOs zu gering war.

Wie Michael schon schrieb, wie willst du damit 3 Zustände erreichen?
Du wirst da 2 Pins für benötigen. Einmal für das Aktivieren der Treiber (ENABLE) sowie die Richtung. Weniger ist mir nicht bekannt.

Ich habe jetzt nur gelesen "Polarität umkehren".
Das sind zwei Zustände.

Es gibt H-Brücken, die mit IN1, IN2 angesteuert, werden, dafür brauchts 2 Pins (Minimum).
Es gibt aber auch welche, die mit PWM und DIREKTION angesteuert werden (z.B. LMD18200 von Ti) da könnte es auch mit einem Pin gehen.

Und dann gibt es noch jede Menge Module, die mit I2C angesteuert werden können. z.B. hier.

Aber zuerst solltest du die Frage klären: Num Umpolen? oder auch Ausschalten?

Elektromagnet mit H-Brücke ist schon sehr exotisch…
Wozu?

Wie wäre es mit einer Feder, dann ist schon mal 1 Position Stromfrei/Selbstrückstellend.

1 FET
1 Diode
2 Widerstand

Fettich!

Vielen Dank für die Antworten !

Ich brauche leider eine Umpolung und 0

Der E-Magnet steuert ein Rückflussteiler(Flüssigkeitsteiler oder Gasteiler) an....

Flüssigkeitsteiler:
Ein kleinen Trichter, an dem ein Magnet sitzt und über diesen Magnet, wird mit Hilfe des E-Magneten entwerder auf Rückfluss oder Ablauf gestellt ......
Ich vermute mal, wenn der E-Magnet auf 0 steht, baumelt dieser Trichter einfach rum (;
Ne Feder oder ähnliches nachrüsten ist leider nicht drin, da die Dinger fertig verbaut sind (;

Gasteiler:
Ein (ich nenn es mal) Stopfen, der durch den E-Magneten angezogen wird, oder (wenn der E-Magnet Spannungslos ist) aufsitzt.
Hierfür wird Spannung und 0 gebraucht.

Es wird aber nur der Gasteiler oder Flüssigkeitsteiler betrieben, was nun angeschlossen ist, soll dann entweder über ein Menü eingestellt werden oder über ein Umschalter, je nach Lösung.......

Und an den ATTiny dachte ich um die H-Brück anzusteuern (quasi als Ausgangserweiterung)....

Der µC gibt über den einen Pin entweder HIGH oder LOW an den ATTiny und der ATTiny schaltet dann die Pins bzw die Mosfets oder die H-Brücke....

HIGH = + / -
LOW = - / +

oder

HIGH = + / -
LOW = 0

der nächste Haken an der Sache ist, das die Polarität in einem bestimmten Interval(einigermaßen Genau) 0,1 -100s umgekehrt werden muss....

Ich hatte für dieses Intervalproblem in einem anderen Threat schon (mit euer Hilfe (: ) eine sehr gute Lösung gefunden....
leider war mir da die genaue Funktionsweise noch nicht bekannt bzw ich bin von etwas anderem ausgegangen bzw wurde falsch informiert, da ich das Gerät nicht hier hab......

Naja, wie auch immer......
Ich kenne mich mit H-Brücken nicht aus, aber wenn ich mir das hier zB ansehe:
http://www.arduino-tutorial.de/2010/06/motorsteuerung-mit-einer-mos-fet-brucke

Fänd ichs logisch einem ATTiny über den einen Pin einen Impuls (entweder HIGH oder LOW) zu geben und von diesem dann die Mosfets usw ansteuern zu lassen.......

Und entweder wird dann im ATTiny über ein Umschalter eingestellt, obs jetzt Gas oder Flüssigkeitsteiler ist oder es wird dem ATTiny über I2C mitgeteilt....

Diese I2C H-Brücken sehe ich mir jetzt mal an ! Danke !

Aber wie gesagt, ich habe keine Ahnung und bin für Vor und Ratschläge offen ! (:

Was auch denkbar wäre, die 5 Temperaturfühler von einem ATTiny84 auslesen zu lassen und die Messwerte per I2C an den ATMega schicken zu lassen........ dadurch hätte ich 5 Pins mehr frei !

oder das gleiche mit den LEDs, dadurch hätte ich sogar 8 Pins mehr frei...

Wenn du nur die Richtung umschalten willst, wäre es auch möglich vom Arduino den Direction Pin eines fertigen Treibers anzusteuern.

Da dann i.d.R. noch ein PWM Signal für den Treiber gebraucht wird, könnte man aus einem NE555 einen Taktgenerator bauen der immer läuft.

Was auch denkbar wäre, die 5 Temperaturfühler von einem ATTiny84 auslesen zu lassen und die Messwerte per I2C an den ATMega schicken zu lassen........ dadurch hätte ich 5 Pins mehr frei !

Auch eine gute Idee

Oder Attiny + fertiger Treiber (die gibt es für ein paar Euros!). Da gibt es viele Optionen

OK.

also das mit den Temperatursensoren klingt für mich bisher am logischsten, da ich überlege die später ehe umzurüsten, auf pt1000 über i2c.......

Dann hätte ich genügen Pins am ATMega frei........

Jetzt brauche ich nur noch ein "Treiber" (oder wie heißen die?)......

sowas wie das L293D ........

nur für 24V, 2A, ein Motor, kein PWM, Polumkehrung+0

Jetzt bist du schon bei 2A! Erst waren es 1,6A. Was ist es nun? 1,7A Dauerstrom gibt es noch sehr billig. Der MAX14870 könnte 1,7A Dauerstrom.

Mehr geht natürlich auch, aber die kosten dann auch schnell etwas mehr (z.B. MC33926). Wobei sich das nicht nach einem Projekt anhört wo es auf ein paar Euro ankommt.

PWM kann man auch auf High lassen. Dann läuft er halt mit voller Geschwindigkeit, wobei das auch bedeutet dass man keine Schaltverluste hat. Also nicht unbedingt schlecht.

magictrips:
… I2C … oder das gleiche mit den LEDs, dadurch hätte ich sogar 8 Pins mehr frei…

MCP23008 8-bit I/O Expander oder MCP23017 (16 I/O)

Die MCPs, vorallem die 17er sind sehr zu empfehlen. Würde hier persönlich aber von I2C absehen und auf die SPI Variante zurückgreifen. Kann schneller arbeiten (~ 10MHz) als es der SPI Bus hergibt. Wird hardwaretechnisch im Vergleich zu I2C unterstützt.

Aber um aufs Thema zurückzukommen, solltest du etwas detaillierte Informationen rausrücken. Was darf es kosten, welcher Strom fließt hier nun wirklich. Datenblatt etc. Was kannst du löten? PTH/DIP (RM2,54) und SMD (1,27) sind noch einfach zu löten. Danach sollte man schon etwas mehr Übung haben. Moderne H-Brückentreiber werden selten noch in einen der beiden Varianten angeboten. Hast du mal bei TI die DRV88xx Reihe angeschaut?

Muss ja nicht selbst gebaut sein. Ich habe nur sie Chips erwähnt, aber die Platinen gibt es auch fertig.

Aber zu erfahren was es kosten darf wäre nicht schlecht. Dann muss man nicht unbedingt groß suchen.

Vielen Dank für die Antworten !
Und Sorry für die Verwirrung 1,6A ! maximal ! (; (steht jedenfalls in der Anleitung zu dem anderen Steuergerät)..... Ein Datenblatt gibts leider nicht und viele Infos auch nicht.....

Habe nur ein normalen Lötkolben hier, deswegen kein SMD oder ähnliches......sonst würde ich einfach den größeren ATMega nehmen (;

Was die Kosten angeht, wenns geht so günstig wie möglich (;
Diese Mosfet-Schaltung da wird wahrscheinlich nicht mehr als 10-20€ kosten ?
Allerdings scheint man den IRF9Z30 und den IRFZ40 nicht so leicht zu bekommen ?

@agmue
stimmt, diese Portexpander gibts ja auch noch.....
haben die denn irgendein Vorteil gegenüber einem ATTiny ?
Vorteil des ATTinys momentan ist, das ich den hier hab, das ich den mit der Arduino IDE programmeiren kann und das ich weiß, wies funktioniert und die Einarbeitungszeit gespart hab.....

@sschulewolter
Das stimmt, SPI wäre wahrscheinlich besser, aber I2C ist schon vorhanden bzw damit komm ich kla (;

Der macht 1,7A:

Für 20€ bekommst du auch das:

Der macht 3A (wobei da ein Kühlkörper empfohlen wird). Also noch Reserven

Lass dich da nicht von den vielen Pins abschrecken. Der hat Jumper um einige zu Brücken. Dann nimmt man entweder IN1 und IN2 zur Ansteuerung. Und man legt IN1/IN2 auf unterschiedliche Pegel und schaltet die Richtung mit INV um. Also sind ohne PWM nur 1 oder 2 Pins nötig.

haben die denn irgendein Vorteil gegenüber einem ATTiny ?

Viel leichter anzusteuern, da man keine zwei Programme braucht! Einfach Daten auf den Bus schreiben und fertig.

magictrips:
haben die denn irgendein Vorteil gegenüber einem ATTiny ?
Vorteil des ATTinys momentan ist, das ich den hier hab, das ich den mit der Arduino IDE programmeiren kann und das ich weiß, wies funktioniert und die Einarbeitungszeit gespart hab.....

16 I/Os zu 12 und man muß sie nicht programmieren ;D Die Randbedingung, daß sie schon auf Deinem Schreibtisch liegen, ist aber unschlagbar ...

Was es natürlich auch noch billig gibt es der L298. Das sind aber ziemliche Klötze mit großen Kühlkörpern, weil da Bipolar-Transitoren verwendet werden. Wobei sich das mit 4x4x3cm auch noch in Grenzen hält

hmmmmmm…

Und wie funktioniert das dann (für Dummies) ?

der sendet per I2C oder SPI dann welche Pins geschaltet werden oder welche Pegel anliegt ?

Weil die Sensoren sind OneWire !

Das eigentliche Programmieren ist ja nichtmal so ein Problem…
Nur überlege ich grade, wie ich das am besten mache…

Mit dem Tiny die Temperatur messen, dann * 100 (von float zu int)
und dann eine Zahl für den Sensor davor setzen ?
Beim Empfänger dann die Zahl “zerlegen”, die erste Zahl gibt den Sensor an, den Rest / 100 und fertig ?

könnte ichs so vermeiden mit strings oder so zu hantieren ?

Der MAX14870 und der L298 sehen beide gut aus !

Mir wären von den Kosten her der L298 zwar lieber aber da hab ich noch kein Beispiel zur Beschalltung gefunden…

magictrips:
hmmmmmm......

Und wie funktioniert das dann (für Dummies) ?

der sendet per I2C oder SPI dann welche Pins geschaltet werden oder welche Pegel anliegt ?

Was denn, die MCPs? Da solltest du dich mal mit Shiftregister/Portexpandern auseinander setzen. Gibt auch fertige Libs dazu. Das Datenblatt durch zu arbeiten sollte aber fast Pflicht sein. Zumindest die Befehlsstruktur.

magictrips:
Weil die Sensoren sind OneWire !

Das eigentliche Programmieren ist ja nichtmal so ein Problem......
Nur überlege ich grade, wie ich das am besten mache.....

Die OneWire Sensoren anschließen wird direkt nciht gehen. Rein theoretisch aber sicherlich machbar(eher die SPI als die I2C Variante aufgrund der höheren Abtastrate/Übertragungsrate). Da gibt es aber vermutlich nichts passendes für die Arduino IDE, heißt selber programmieren.

Habe in Verbindung mit dem SPI Modulen lediglich Parallele Interfaces getestet mit den Attiny841.
Datenblatt lesen, verstehen und anwenden gehört auch zum Programmieren meiner Meinung dazu.

magictrips:
Mit dem Tiny die Temperatur messen, dann * 100 (von float zu int)
und dann eine Zahl für den Sensor davor setzen ?
Beim Empfänger dann die Zahl "zerlegen", die erste Zahl gibt den Sensor an, den Rest / 100 und fertig ?

könnte ichs so vermeiden mit strings oder so zu hantieren ?

Warum überhaupt floats? Die DS18B20 liefern doch keine float Werte (oder macht das die Lib, ich kenne nur die Ansteuerung über avr-gcc und dort liefert das Ergebnis keinen float ;))
Wie du die Daten sendest, ist dir überlassen, möglich wäre aber sowas.
a1234; b2343; ...
Wobei a Sensor 1 ist.

magictrips:
Der MAX14870 und der L298 sehen beide gut aus !

Mir wären von den Kosten her der L298 zwar lieber aber da hab ich noch kein Beispiel zur Beschalltung gefunden....

Google? Was muss man da eingeben, um keine Beispielsbeschaltung zu erhalten??
Ansonsten steht wie oben bereits gesagt das meiste auch in Datenblättern.

OneWire geht per I2C Expander nicht. LEDs schalten schon. Oder Taster einlesen

Mit dem Tiny die Temperatur messen, dann * 100 (von float zu int)

Das als Integer zu machen ist schon mal eine gute Idee. Wobei es auch kein Problem ist die 4 Bytes eines Floats zu übertragen und wieder zu einem Float zusammenzusetzen

Ich sehe hier zwei Haupt-Optionen:
1.) ATtiny als Master und Arduino als Slave und immer alle Sensor-Daten an den Arduino senden
2.) ATtiny als Slave und Arduino als Master und Daten anfordern. Das muss man machen wenn am I2C Bus noch andere Dinge hängen.
Hier hat man dann noch die Wahl ob man immer alle Sensoren zusammen anfordert, oder ob man gezielt einen Sensor abfragen kann. Da wäre es kein Problem vorher ein Byte zu senden um einen bestimmten Sensor zu adressieren. Und wenn der Tiny einen Request bekommt, schickt er die Temperatur diese einen Sensors.

Strings sind hier völlig unnötig

Mir wären von den Kosten her der L298 zwar lieber aber da hab ich noch kein Beispiel zur Beschalltung gefunden....

Wozu braucht man da eine Beispielschaltung? Das Ding ist selbst-erklärend. Ansonsten Datenblatt anschauen. Das Teil ist aber so alt und so ein Standard, dass es da genug Anleitungen geben sollte.

magictrips:
Was auch denkbar wäre, die 5 Temperaturfühler von einem ATTiny84 auslesen zu lassen und die Messwerte per I2C an den ATMega schicken zu lassen........ dadurch hätte ich 5 Pins mehr frei !

oder das gleiche mit den LEDs, dadurch hätte ich sogar 8 Pins mehr frei...

Wie wäre eigentlich eine Übersicht, was alles wie angeschlossen werden soll? Vielleicht kommen dann Ideen, wo man Pins sparen könnte oder etwas eleganter lösen könnte.
Beispielsweise die One-Wire-Sensoren sitzen doch alle an einem Bus. Also braucht man für alle Sensoren zusammen einen Pin und keine fünf. Das einem ATiny zu übertragen macht in meinen Augen nicht wirklich Sinn. Ein Port-Expander oder auch Schieberegister könnte die LEDs ganz bequem ansteuern.