Hallo liebe Progger und Proggerinnen, ich bin 16 Jahre alt und habe ein Problem. Ich möchte ein Thermometer bauen, welches digitale Signale eines DS18b20 in Drehbewegungen umrechnet. Die Drehbewegungen stellen dann durch bipolare Schrittmotoren eine Temperaturanzeige dar. Der verwendete Mikrokontroller ist der ATMega8. Ich habe anbei den Schaltplan und das Programm geschickt. Nun zu dem Problem: Wenn ich das Programm starte, stellen sich die Motoren auf null, durch Lichtschraken. Danach leuchtet eine LED auf. Anschließend wird der DS18b20 ausgelesen und die Messwerte werden in Zehner, Einer und die Nachkommastelle aufgesplittet. Diese werden mit 8 multipliziert (für meine Skala) und dann wird der Weg mit der Aktuellen Position des Motors und der Position wo er hin soll berechnet. Danach bewegen sich die Motoren zu der gewünschten Zehner, Einer und Nachkommastelle. Jetzt passiert folgendes: Der erste Wert wird problemlos angezeigt, doch nach 10 Sekunden (erneute Messung) kommen Werte zustande, welche einen Unterschied von drei Grad ausmachen in Bezug auf den vorherigen Messwert. Ich weiß leider nicht wo das Problem sein könnte und was ich noch machen könnte. Ich hoffe ihr könnt mir helfen oder wenigstens einen Tipp geben was ich vllt. kontrollieren soll bzw. ändern muss. Danke für eure Hilfe ! PS: Die L293D liegen mit den 0V Pins nicht an Ground, die Motoren bewegen sich trotzdem… Warum? Und wenn ich die 0V Pins an GND lege werden die L293D extrem heiß.
Led35 schrieb: > Die L293D liegen mit den 0V Pins nicht an Ground, die Motoren bewegen > sich trotzdem… Warum? Schau dir mal im Datenblatt an wie die Eingänge des L293 aufgebaut sind. http://www.ti.com/lit/ds/symlink/l293.pdf Seite 8 > Und wenn ich die 0V Pins an GND lege werden die > L293D extrem heiß. Schau dir mal im Datenblatt an wie der L293 zu kühlen ist. http://www.ti.com/lit/ds/symlink/l293.pdf Seite 14
Sorry, habe gerade nicht viel Zeit mich durch Deinen Schaltplan durchzukämpfen. Led35 schrieb: > Die L293D liegen mit den 0V Pins nicht an Ground, die Motoren bewegen > sich trotzdem… Warum? Und wenn ich die 0V Pins an GND lege werden die > L293D extrem heiß. Ja da läuft etwas grundsätzlich falsch. Bzw mich wundert eher das überhaupt etwas funktioniert. Versorgungspannung der Logik und der Motoren am gleichen Strang ohne Kondensatoren. Keine Abblockkondensatoren am uC. Schau Dir mal ein paar Beispiele zum ULN2003A an. Der schaltet eigentlich nur eine Last an auf GND. An der anderen Seite der Last ist die Versorgungspannung VCC. Bei Dir macht der ULN2003A keinen Sinn. Bzw. bei kleinen Schrittmotoren reicht der ULN2003A als Treiber. Sehe Dir lieber die Beispielschaltungen im Roboternetz mal an.
:
Bearbeitet durch User
Könnte das der Grund sein warum sich die Motoren nach der ersten Messung imer falsch stellen ?
Led35 schrieb: > Der erste Wert wird problemlos angezeigt, doch nach 10 Sekunden (erneute > Messung) kommen Werte zustande, welche einen Unterschied von drei Grad > ausmachen in Bezug auf den vorherigen Messwert. Meinst Du damit den aus dem Sensor gelieferten Wert, den von Dir umgerechneten oder den mit den Motoren angezeigten? Wenn der Sensor sehr oft misst (ich habe mir den Code nicht angesehen) wird er wärmer. 3K können es schon sein. Das natürlich nur, wenn die Temperatur ansteigt. Kühlen wird der Sensor nicht.
@ Led35 (Gast) > Programm.docx (17,9 KB, 8 Downloads) Was soll ein Quelltext als Word-Dokument? Siehe Netiquette. > DAC_Entspurt.bas (5,39 KB, 7 Downloads) So schon eher. > Untitled_Sketch_Schaltplan.png Da sehe ich komische Dinge. Deine Optokoppler können so nicht funktionieren, wenn der Kollektror mit GND verbunden ist. Wenn es doch irgendwie geht, dann eher durch Zufall, weil ein Transistor in gewissen Grenzen auch mit vertauschtem Kollektor und Emitter funktioniert. In deinem Programm werden zwar PC0-PC2 als Eingang geschaltet, man muss aber noch die internen Pull-Up Widerstände einschalten! In BASCOM gibt es dafür anscheinen keinen Befehl. Also einfach exteren Pull.Ups und gut, 10K sind OK. https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen Ich hoffe mal, daß du die 0V an den L293 alle angeschlossen hast und nur in deinem Verdrahtungsplan vergessen hast. Dein IC2 als Treiber zwischen ATmega8 und den L293 ist nicht nötig, das kann man direkt verbinden. Außerdem fehlen dort die Pull-Up Widerstände, denn der ULN2003 ist ein Open Kollector Treiber. Das kann so gar nicht funktionieren, funktioniert wahrscheinlich nur wegen Dreckeffekten. https://www.mikrocontroller.net/articles/Ausgangsstufen_Logik-ICs#Open_Collector Wenn du Sowohl VS als auch VSS mit 5V betreibst, kommt an den Motoren nicht viel an, denn ca. 2V bleiben im L293 hängen. Reicht das? >Der erste Wert wird problemlos angezeigt, doch nach 10 Sekunden (erneute >Messung) kommen Werte zustande, welche einen Unterschied von drei Grad >ausmachen in Bezug auf den vorherigen Messwert. Und die nachfolgende Messung? >Ich weiß leider nicht wo das Problem sein könnte und was ich noch machen >könnte. Eine systematische Fehlersuche. >Die L293D liegen mit den 0V Pins nicht an Ground, die Motoren bewegen >sich trotzdem… Warum? Und wenn ich die 0V Pins an GND lege werden die >L293D extrem heiß. Dann ist was extrm faul! So geht das nicht! Deine Schrittmotoransteuerung sieht komisch und wirr aus. Da ist kein klare Linie drin. Ein Wunder daß sie funktioniert. Mit der richtigen Bitmanipulation kann man das deutlich besser machen. Den Ansatz mit der Schrittabelle hast du ja schon.
Also ohne jetzt Deinen Quelltext angesehen zu haben, scheint mir die Beschaltung der Motoren etwas merkwürdig. Wenn ich mir das von Hinz verlinkte Datenblatt (abb.6) anschaue, dann müßten doch die Motorspulen immer an einem Kanal angeschlossen werden. Also Spule AC an Pin 11/14 und Spule BD an Pin 3/6 und nicht so über Kreuz wie Du das gemacht hast. Muß aber ehrlicherweise sagen, das ich in dieser Richtung noch nichts gemacht habe und vielleicht ist ja die Beschaltung so korrekt - lasse mich da gern belehren. Irgendwie sieht die Schaltung komisch aus.
Habe mir es grad noch mal angeschaut. Da die Enableeingänge eh zusammengeschalten sind kann man es so machen wie der TO, enscheident ist halt das die Eingänge dann entsprechend angesteuert werden. Im Datenblatt ist in Abb.11 die Beschaltung eines Schrittmotors dargestellt und das ist dort so gemacht wie von mir vorgeschlagen - wäre auch viel übersichtlicher. Fakt ist das die GND-Pins des L293 angeschlossen werden müssen.
@Zeno (Gast) >Also Spule AC an Pin 11/14 und Spule BD an Pin 3/6 und nicht so über >Kreuz wie Du das gemacht hast. Damit will er Halbschrittbetrieb machen.
Ist das Problem die Messung oder die Anzeige über die Schrittmotoren? Entweder den Messwert auf dem uart ausgeben oder eine fixen Wert auf den Schrittmotoren ausgeben, z.B. 1 min 20°, 1 min 21° usw
Falk B. schrieb: > Damit will er Halbschrittbetrieb machen. OK! Kenne mich da halt nicht so aus. Es sieht halt alles etwas unübersichtlich aus. Aber das was der TO da vor hat müßte doch auch gehen wenn man das so beschaltet wie im Datenblatt Abb.11. Das wäre für mich viel übersichtlicher. Bei solchen Projekten ist es eigentlich immer gut wenn man die Vorschläge des Herstellers aufgreift, das vermindert meist die Fehlerwahrscheinlichkeit beträchtlich. Ich hätte höchstwahrscheinlich erst mal einen Motorkanal aufgebaut und getestet. Wenn dieser läuft wie gewünscht dann die 2 anderen dazu und erst wenn alles wie gewünscht funktioniert den Sensor dazu. So bleibt es übersichtlich und man findet Fehler oder falsche Denkansätze viel schneller. Aber jeder muß halt auf seine Art glücklich werden. Ich befürchte mal das er an einer Stelle einen ganz trivialen Fehler gemacht hat. Jetzt hat halt das Projekt schon eine gewisse Größe erreicht, was die Fehlersuche schwierig macht.
Bastler schrieb: > Ist das Problem die Messung oder die Anzeige über die Schrittmotoren? Vielleicht ist es auch die Umwandlung der vom DS18B20 gelesenen binären Daten in einen Temperaturwert. Zumindest bei der Umrechnung der Rohdaten in Temperatur
1 | Dim Temperatur As Integer |
2 | Dim Celsius As Single |
3 | ... |
4 | Dim C As Single |
5 | Dim Cc As Integer |
6 | ... |
7 | Celsius = Temperatur / 16 |
8 | |
9 | C = Celsius * 10 |
10 | Cc = Round(c) |
könnte es gut sein, dass jegliche "Nachkommastellen" schon bei der Division flöten gehen, weil sowohl Temperature als auch 16 Integer sind und vermutlich das Ergebnis auch - egal ob es hinterher auf ein Single zugewiesen wird. cc wird sich also immer in 10er-Schritten ändern.
@ Zeno (Gast) >Ich hätte höchstwahrscheinlich erst mal einen Motorkanal aufgebaut und >getestet. Wenn dieser läuft wie gewünscht dann die 2 anderen dazu und >erst wenn alles wie gewünscht funktioniert den Sensor dazu. Genau so läuft eine systematische Fehlersuche. >schneller. Aber jeder muß halt auf seine Art glücklich werden. Man kann auch vom Rest der Welt lernen. >Ich befürchte mal das er an einer Stelle einen ganz trivialen Fehler >gemacht hat. Wenn Leistungstreiber keinen Masseanschluß haben, ist das eher ein fataler Fehler! 8-0
Danke erstmal für die zahlreichen Antworten. Ich glaube nicht, dass das Problem an der Messung liegt, denn ich habe diesen Programmschnipsel auf einem anderen Mikrokontroller geladen und mir die Werte auf das LCD-Display anzeigen lassen, da hat es einwandfrei funktioniert. Wenn die L293D an 0V angeschlossen sind, dann werden diese ziemlich heiß, wie viel Grad sind den normal für diese ? PS: Ich betriebe die Schrittmotoren im Halbschrittbetrieb. Der Schaltplan ist flasch ich habe 5 V an den Collector angeschlossen.
Zeno schrieb: > Ich hätte höchstwahrscheinlich erst mal einen Motorkanal aufgebaut und > getestet. Nicht nur du. Man kann alle Schaltungsteile einzeln testen... Die Anzeige könnte man z.B. über das Terminal testweise ansteuern. Die Temperatur kann man sich auch per Terminal ausgeben lassen.
Das mit der Temperatur funktioniert wie gesagt ordentlich, auch die Umrechnung von dieser. Die Motoren wurden auch einzeln geprüft, bevor ich sie an den DS18b20 angeschlossen habe, dies ist auch positiv verlaufen, der DS18b20 ist auch nicht falsch verkabelt wurden. Ich stehe immer noch vor dem Problem warum die 2. Messung und die darauffolgenden falsch sind, die erste Messung funktioniert. PS: Bei mir sind die L293D nicht an Masse, ich verstehe nur nicht warum sie trotzdem funktionieren... Und wie ist die Normaltemperatur für diese?
@ Led35 (Gast) >diesen Programmschnipsel auf einem anderen Mikrokontroller geladen und >mir die Werte auf das LCD-Display anzeigen lassen, da hat es einwandfrei >funktioniert. Gut. >Wenn die L293D an 0V angeschlossen sind, dann werden diese ziemlich >heiß, wie viel Grad sind den normal für diese ? Was hast du denn für Schrittmotoren? Laufen die WIRKLICH mit 3V? Wenn ja, sind das wahrscheinlich Hochstromtypen. Wieviel Strom brauchen die pro Wicklung? So ein Treiber-IC kann schon mal 60-70°C warm werden, das faßt man nicht mehr lange an. Für den IC ist das OK. Aber bei einem kleinen Schrittmotor, der vielleicht 100-300mA pro Wicklung braucht, sollten die ICs nicht so warm werden. Ich vermute, da schwingt was, weil auch bei der Ansteuerung der Treiber die Pull-Ups fehlen. Dadurch wird der IC heiß. Von der fehlenden Masseverbindung ganz zu schweigen. 8-0 >Der Schaltplan ist flasch ich habe 5 V an den Collector angeschlossen. Dann solltest du den Schaltplan korrigieren. Was ist mit den Pull-Up Widerständen?
@ Led35 (Gast) >Bei mir sind die L293D nicht an Masse, ich verstehe nur nicht warum sie >trotzdem funktionieren... Wir auch nicht. Mach mal ein GUTES Bild von deinem Aufbau, siehe Bildformate.
Das sind alte Motoren, aus einem Spielautomaten, welche eigentlich mit 12 Volt laufen, aber ich glaube man kann sie auch mit 5 Volt betreiben. Der Pullup muss nach dem Emitter oder? Also ist es normal, dass man die L293D nicht mehr anfassen kann ?
@ Led35 (Gast) >Das sind alte Motoren, aus einem Spielautomaten, welche eigentlich mit >12 Volt laufen, aber ich glaube man kann sie auch mit 5 Volt betreiben. Im Leerlauf schon. >Der Pullup muss nach dem Emitter oder? Er muss zwischen den AVR-Eingang und +5V. Nomen est Omen! >Also ist es normal, dass man die L293D nicht mehr anfassen kann ? Kommt drauf an, wieviel Strom fließt.
@Led35 (Gast) >Wenn der L293D nicht an Masse geschaltet ist, fließt ein Strom von >200-300 mA. Und MIT Masseanschluß?
@ Led35 (Gast) >Ungefähr 23-24 Ohm. Klingt gut, denn dann fließen bei 3V effektiver Spulenspannung nur I = U / R = 3V / 24 Ohm = 125mA Das macht P = I * U = 0,125A * 2V = 250mW Verlustleistung pro Wicklung im Treiber, in Summe also 500mW pro L293. Da wird der zwar schon ganz gut warm aber nicht heiß, vielleicht 40-50°C.
Falk B. schrieb: > In deinem Programm werden zwar PC0-PC2 als Eingang geschaltet, man muss > aber noch die internen Pull-Up Widerstände einschalten! In BASCOM gibt > es dafür anscheinen keinen Befehl. Naja, das ist ja auch nicht richtig: Config Portc.0 = Input Config Portc.1 = Input Config Portc.2 = Input Es muß heißen: config Pinc.0 = Input config Pinc.1 = Input config Pinc.2 = Input Pull-up Widerstände kann man dann als Nächstes so einschalten: PortC = &B00000111 Das schaltet die Ziehwiderstände an PortC 0, 1 und 2 ein und läßt den Rest in Ruhe. MfG Paul
:
Bearbeitet durch User
Led35 schrieb: > Das mit der Temperatur funktioniert wie gesagt ordentlich, auch die > Umrechnung von dieser. Und die bekommst mit dem Code wirklich Nachkommastellen raus?
Ja das funktioniert alles, aber ich muss mich nochmal korrigeren, denn die Schaltung verbraucht insgesamt ohne Masse an den L293D rund 150mA. Anbei ist mein Versuchsaufbau und die Hauptplatine, sowie die Schrittmotoren...
@ Led35 (Gast) >Ja das funktioniert alles, aber ich muss mich nochmal korrigeren, denn >die Schaltung verbraucht insgesamt ohne Masse an den L293D rund 150mA. Mit oder ohne angeschlossene Schrittmotoren? >Anbei ist mein Versuchsaufbau und die Hauptplatine, sowie die >Schrittmotoren... Schönes Drahtverhau ;-) Wie erkennst du dann, wenn die Temperatur um 3 Grad anders ist? Ich sehe keine Zeiger. Wie auch immer, du MUSST die Masse an ALLEN Pins der L293 anschließen. Wenn dann ohne Schrittmotoren viel Strom fließt, hast du irgendwo einen Kurzschluß.
Ohne angeschlossenen Schrittmotoren, viel Strom fließt zum Glück nirgends. Die Motoren besitzen drehbare Scheiben, auf denen Zahlen drauf sind, drei Scheiben, weil Zehner, Einer und Nachkommastelle angezeigt werden sollen.
Led35 schrieb: > Wenn die L293D an 0V angeschlossen sind, dann werden diese ziemlich > heiß, wie viel Grad sind den normal für diese ? Steht im Datenblatt.
@Led35 schau mal da https://bascomforum.de/index.php?thread/98-thermometer/ ich hab' sowas auch schon mal in verschiedenen Versionen gebaut, die Programme dazu findest du hier auch. Musst dich halt zum download anmelden.
Led35 schrieb: > Die L293D liegen mit den 0V Pins nicht an Ground, Verbinde also erst mal GND mit GND und entferne den ULN2803, der ist nicht nur überflüssig, sondern er funktioniert in der Form hier nicht weil er kein "high" liefern kann. > die Motoren bewegen sich trotzdem… Warum? Der Strom fliesst über die Eingänge durch den ULN2803 nach GND. > Und wenn ich die 0V Pins an GND lege werden die > L293D extrem heiß. Na ja, wie viel Strom ziehen deine Schrittmotoren ? Bei 600mA wird er 75 GradC heiss, WENN die GND-Anschluss nicht mit einer Kühlfläche verlötet sind (was nach Meinung des Herstellers aber angeraten ist). Led35 schrieb: > Der erste Wert wird problemlos angezeigt, doch nach 10 Sekunden (erneute > Messung) kommen Werte zustande, welche einen Unterschied von drei Grad > ausmachen in Bezug auf den vorherigen Messwert. Eventuell Erwärmung, nicht nur durch den L293, sondern auch der DS18B20 selbst bringt 1 GradC.
Hallo Wenn Du die genannten Änderunge gemacht hast, wäre es sehr hilfreich, wenn Du dann auch den korrgierten Schaltplan hier nochmal einstellst. Dann kann man nochmal schauen, ob das auch OK ist. Gruß Ulf
Led35 schrieb: > Das mit der Temperatur funktioniert wie gesagt ordentlich, auch die > Umrechnung von dieser. Led35 schrieb: > Ich stehe immer noch vor dem Problem warum die 2. Messung und die > darauffolgenden falsch sind, die erste Messung funktioniert. Was denn nun? Die Temperatur stimmt, aber stimmt dann doch nicht?
Danke für die Zahlreichen und wirklich hilfreichen Antworten, ich versuche es am Wochenende nochmal neu zu löten. Ich versuche alle Tipps mit einfließen zu lassen. Soweit habe ich auch alles verstanden, nur wie muss ich die Pullups an die Ansteuerung der Motoren verkablen ?
@Led35 (Gast) >Soweit habe ich auch alles verstanden, nur wie muss ich die Pullups an >die Ansteuerung der Motoren verkablen ? Im einfachsten Fall dem ULN rausschmeißen und die Steuersignale direkt verbinden. Dann brauchst du auch keine Pull-Ups.
Danke für eure Hilfe. Jetzt funtzt alles! :-) Mir wurden auch die ersten Temperaturen angezeigt.
Ich habe eine komplett neue Platine nach euren Vorgaben gelötet seit dem funzt alles...
Die LED's stehen für: Rot = Messung Grün = Innen Temperatur Gelb = Maximal Temperatur Blau = Minimal Temperatur --> Dieses Video ist leider ein Vorgänger, ich habe jetzt 2 Sensoren angeschlossen welche auch beide ohne Probleme funktionieren. Die Maximale und Minimale Temperatur des Außen-Temperatur-Sensors wird 24 h gespeichert und alle 6 Sekunden zur Anzeige gebracht. Alle 6 Sekunden wird auch zwischen der innen Temperatur und der außen Temperatur gewechselt. Nochmals Danke für eure Hilfe.
Felix V. schrieb: > DSCN1994.MOV (17,3 MB, 0 Downloads) Na prächtig. Wie wäre es mit einem Stativ, um die Kameraführung etwas ruhiger zu gestalten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.