PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Ausgang gegengleich zu PWM Ausgang schalten



Thegon
21.01.2011, 19:56
Hallo alle zusammen,
also ich bin hier völlig neu und habe auch gleich ein Problem:
Ich möchte die Motoren eines Kettenfahrzeuges mit einem ATmega32 Drehzahlregeln, um ein Lenken möglich zu machen. Das Problem besteht darin, dass die Ketten so gut am Boden haften, dass wenn linke Motor bei voller Geschwindigkeit läuft, auch der rechte, der zum Beispiel nur halb so schnell PWM geregelt wird, einfach mitgezogen wird. Das heißt, anstatt dass die rechte Kette über den Boden "rutscht" und somit das Fahrzeug lenkt, wird der Motor in der aus - Periode der PWM einfach mitgezogen. Folge ist, dass man fast gerade aus fährt.

Ich habe an eina aktive Bremse in der Aus - periode der PWM gedacht, also dass der Motor über einen Widerstand oder einfach ein dickeres Kabel kurzgeschlossen wird und somit die Energie, die durch die unerwünschte Drehung erzeugt wird, einfach in wärme verpufft und Folge dessen der Motor in der
Aus - Periode fast nicht mehr zu drehen ist.
Dazu müsste natürlich der AVR einen Ausgang immer gegengleich zum PWM
Ausgang schalten, sodass ein Transistor den Motor immer im richtigen Augnblick kurzschließt. Und nun zu meiner eigenlichen Frage:

Gibt es da irgenteinen Befehl oder eine Funktion, sodass der AVR einen normalen Ausgang immer gegengleich zu einem PWM Ausgang schaltet? Ich kann mir keinen zweiten PWM Ausgang leisten, da ich mindestens drei Motoren betreiben möchte und der Mega32 aber nur 4 PWM - Ausgänge hat.

Ich bin dankbar für jede Hilfe, denn mir scheint, so etwas machen nicht gerade viele, auf jeden Fall finde ich nichts brauchbares dazu im Web.

Gruß
Thegon

avrrobot
21.01.2011, 20:01
nimm doch einfach ein not-gatter (ist dann zwar hardware mäßig, aber so wie ich das verstanden hab, müsste es gehen)

Thegon
21.01.2011, 20:19
Also erst mal vielen dank für die Schnelle Antwort,
und :
Wäre sicherlich möglich und so möchte ich es auch machen, wenn es nicht anders möglich ist aber geht das nicht auch softwaremäßig? Es wäre nämilch von Vorteil, wenn der Atmel die Bremse schalten kann, wann er will, also nicht nur dann, wenn gerade PWM verwendet wird. Und er soll sie auch deaktivieren können, wann er möchte da das Bremsen nicht immer erwünscht ist (zwar nur ganz selten, aber dann doch)
Mfg

Thegon

avrrobot
21.01.2011, 20:23
machst du deine pwms hardware oder software mäßig?

Thegon
21.01.2011, 20:28
Also ein Ausgang am AVR (OC1A) Steuert einen Transistor an, der den Motor auf Masse bringt, der Andere Ausgang sollte einen Transistor nach oben, also auf 12 V schalten, damit er kurzgeschlossen ist. Der zweite pol des Motors ist auch auf 12 V. Den Takt und das Verhältnis zwischen An - Aus - Periode bestimmt aber natürlich der AVR. Ich hoffe, ich habe die Frage damit beantwortet.
Mfg Thegon

avrrobot
21.01.2011, 20:33
wie wärs, wenn du ein nand gatter nimmst, und dann den einen eingang an ocr1a tust und den anderen an einen beliebigen ausgang, und wenn du diesen dann auf low tust, schaltet das nand gatter durch, und steuert dann deinen zweiten transistor an.
softwaremäßig fiele mir nur etwas ein, wenn du den pwm auch softwaremäßig machen würdest, aber du verwendest den hardwre pwm des avr

BMS
21.01.2011, 20:37
Welche Motortreiber verwendest du denn? Die meisten können den Motor auch kurzschließen (bremsen) wenn man z.B. die Eingangssignale für die Richtung auf gleiches Potenzial legt. Dann wären der extra Aufwand für Transistoren & Co unnötig.
Oder schaltest du die Motoren nur über FETs? Also dass die nur "vorwärts" oder "stop" fahren können (und nicht rückwärts)?

avrrobot
21.01.2011, 20:40
aber mal im ernst, ich weiß nicht, ob das mit dem bremsen überhaupt so funktionieren kann.

Thegon
21.01.2011, 20:44
Das mit dem nand - Gatter ist gut, denn das kann ich ja auch mit einem anderen Pin anschalten, den ich auf masse bringe. Und mit der PWM gehts auch. Und da ein nicht - Bremsen während einer PWM - Aus - Phase eh nie erwünscht ist, werde ich das wohl so machen.
Vielen Dank für die Hilfe!
zum letzten Kommentar: Das mit dem Bremsen funktioniert recht gut, das habe ich schon ausprobiert, allerdings nur mit kabelzusammenhalten Gruß Thegon

Thegon
21.01.2011, 20:48
Sorry, das kommentar von BMS habe ich ganz übersehen:
Also gesteuert wird nur über die Beiden Transistoren pro motor, halt noch ein paar Widerstände, aber "Kurz vor dem Motor" kann das Ganze noch einmal durch ein 2 UM - Relais umgepolt werden, sodass man auch rückwärts fahren kann.
Mfg Thegon

Richard
21.01.2011, 22:44
Hallo alle zusammen,
also ich bin hier völlig neu und habe auch gleich ein Problem:



Jeder Motortreiber kann gewöhnlich Beispiel:

00 = Motor aus
01 = Motor links
10 = Motor rechts
11 = Motor Bremst
angesteuert werden, das PWM Signal kommt dabei auf Motor Takt oder ähnlich. Kommt natürlich auf Deinem Motortreiber an.

Gruß Richard

Thegon
23.01.2011, 13:13
Hallo Richard,
tut mir leid dass es mit der Antwort so lange gedauert hat.
Also so einen richtigen Motortreiber in IC Form oder so verwende ich nicht. Die Schaltung als Bild findest du auf : (irgentwie hab ich´ s nicht geschafft, dieses Bild in die Antwort einfügen) http://hekaftp.jimdo.com/bilder/
(es fehlen noch die Widerstände vor dem uC)
Die Schaltung ist eigetlich schon kompett und sie sollte so auch funktionieren, glaube ich zumindest. Natürlich könnte man anstatt dem Relais auch nochmal zwei Transistoren verwenden, nur ich habe die Relais bereits bestellt und es ist ja keine zeitkritische Anwendung, also tun es Relais glaube ich auch.
Gruß Thegon

Richard
23.01.2011, 19:11
Hmm, na jaaaa es sollte irgendwie klappen. Aber nicht besonders lange und nur mit kleinen Motoren. Es wird nicht lange dauern und die Kontakte verbrennen, eine Drehzahlregelung mittels PWM überlebt ein Releis auch nicht lange (wenn überhaupt). :-(

Ein / Aus links /rechts geht natürlich wenn nicht sehr oft geschaltet wird.

Gruß Richard

Thegon
23.01.2011, 19:25
Naja, die beiden Transistoren am anderen Motorausgang werde ich mir wahrscheinlich leisten, aber die Motoren sind wirklich keine Großen Stromfresser, volllaststrom laut datenblatt ist nicht größer als 1 A.
Die Motoren sind Getriebemotoren von Pollin(http://www.pollin.de/shop/dt/MTc1OTg2OTk-/Motoren/DC_Getriebemotoren/Gleichstrom_Getriebemotor_DGO_3512.html). Ich weiß nicht, also wenn es ein Viel bessere lösung als Meine Schaltung (dann ohne Relais) gibt, die auch in der Aus - phase der PWM bremsen kann, bin ich gerne bereit, diese auch anzuwenden aber mir fällt nichts besseres ein.

Gruß Thegon

Richard
23.01.2011, 19:41
Wenn es etwas kosten darf.......

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=65&products_id=110

Ich habe das Teil und bin sehr zufrieden allerdings ist das für Deine Motoren etwas heftig, mit Kühlung kann das schon einmal kurzfristig 30 A/Motor liefern..... Es gibt aber auch kleinere Motortreiber.

Releis mit PWM ansteuern kann man aber getrost vergessen! Wenn die mehrere 1000 x/s schalten sind die in weniger als 1 Min. abgeraucht!

Gruß Richard

Thegon
23.01.2011, 19:53
Ich weiß nich, aber ich glaube, du hast mich falsch verstanden: Nicht das Relais schaltet im Takt der PWM, das macht ein Transistor. Nur das umpolen des Motors (nur dann, wann der Roboter seine Fahrtrichtung ändern will) übernimmt das Relais, da ich gedacht habe, das tut ein Relais auch. Eigentlich könnte man die Arbeit des Relais mit dem umstecken der Motorkabel im Richtigen Zeitpunkt vergleichen. Dass man ein Relais nicht 1000x/s schalten darf, das ist mir schon klar.
Bitte nicht böse sein, sollte ich dich falsch verstanden haben ...
Gruß Thegon

masasibe
23.01.2011, 19:54
Wenn die mehrere 1000 x/s schalten sind die in weniger als 1 Min. abgeraucht!
Aber die Relais schalten doch eigentlich nur um wenn man den Motor zwischen vorwärts/rückwärts umschaltet. Und das tut man ja nicht so extrem oft.

Richard
23.01.2011, 21:47
Ich weiß nich, aber ich glaube, du hast mich falsch verstanden: Nicht das Relais schaltet im Takt der PWM, das macht ein Transistor. Nur das umpolen des Motors (nur dann, wann der Roboter seine Fahrtrichtung ändern will) übernimmt das Relais, da ich gedacht habe, das tut ein Relais auch. Eigentlich könnte man die Arbeit des Relais mit dem umstecken der Motorkabel im Richtigen Zeitpunkt vergleichen. Dass man ein Relais nicht 1000x/s schalten darf, das ist mir schon klar.
Bitte nicht böse sein, sollte ich dich falsch verstanden haben ...
Gruß Thegon

OK, da habe ich nicht richtig gelesen. :-(

Gruß Richard

Hubert.G
23.01.2011, 22:38
Du schreibst, die Motoren brauchen bis 1A und verwendest BC547 ?
Bei allen Transistoren fehlen die Basiswiderstände.

Thegon
24.01.2011, 16:17
Hallo Hubert G.,
dur hast recht, die Basiswiderdstände fehlen. Auch die vor dem Contoller habe ich nicht eingezeichet. Sichersich würde das so nicht funktionieren, aber die Schaltung habe eingentlich nur gezeichtnet, dass Richard weiß, wie ich das denn gerne machen würde. Dafür habe ich mir auch nicht viel zeit genommen und dann halt eben die Widerstände vergessen. Wahrscheinlich verwende ich auch keine BC547 - Transistoren, ich habe da eher an etwas viel stärkeres gedacht.Ich wollte eingentlich naupsächlich wissen, wie man so eine Bremse Realisiert.
Aber danke trotzdem für euer Engagement für mein Problem.

Aber nun noch eine Frage: ist es wirklich sehr schlecht, wenn ich das Umpolen der Motoren (das nicht so oft geschient) doch mit Relais betreibe? Denn die habe ich schon vor langem gekauft und die liegen sonst nutzlos herum. Der Roboter ist nicht wirklich lange in Betrieb, eher zum herumexperimentieren und so.
Gruß Thegon

Hubert.G
24.01.2011, 16:49
Schlecht ist relativ, das klacken ist halt nicht sehr schön und wenn du beim umpolen nicht aufpasst, der Motor sollte stehen, dann rauchen dir die Kontakte ab.
Du hast bei den Kontakten auf einer Seite Plus und auf der anderen GND.
Wenn ein Funken gezogen wird und der reißt nicht ab bevor der Kontakt auf der anderen Seite schließt, hast du im Relais ein herrliches Feuerwerk.
Aber wenn dich diese Eventualitäten nicht stören....

Thegon
24.01.2011, 16:58
Naja, eingetlich ist im Steuerungsprogramm festgelegt dass erst umgepolt wird, wenn der Motor steht. Das ist so sicherlich auch für den Motor besser. Ich glabe, dass ich vorher einmal die Relais verwende und wenn die nicht wie gewünscht funktionieren, dann kann ich immer noch Transistoren einbauen. Die Relais sind jedoch eigentlich sehr hochstomfest, die sind für 16 A oder so geeignet. Die sollten auch nicht beim ersten Funken gleich abbrennen, oder?
Gruß Thegon

Richard
24.01.2011, 18:04
Naja, eingetlich ist im Steuerungsprogramm festgelegt dass erst umgepolt wird, wenn der Motor steht. Das ist so sicherlich auch für den Motor besser. Ich glabe, dass ich vorher einmal die Relais verwende und wenn die nicht wie gewünscht funktionieren, dann kann ich immer noch Transistoren einbauen. Die Relais sind jedoch eigentlich sehr hochstomfest, die sind für 16 A oder so geeignet. Die sollten auch nicht beim ersten Funken gleich abbrennen, oder?
Gruß Thegon

Ich habe auch schon etwas in der Art ganz ohne µC als Schiebetür Steuerung gebaut, dort wurde Zwangsläufig durch Endschalter die Drehrichtung im Stillstand umgeschaltet. Das läuft schon einige Jahre. :-)

Ansonsten sollten keine Transistoren sondern Feldeffekt Transistoren für Leistungs-Schalter verwendet werden weil deren Innenwiderstand sehr gering ist und deshalb keine Leistung als Wärme "verbraten" wird. Allerdings ist dessen Ansteuerung etwas komplizierter, es gibt aber extra TTL Kompatible Typen.

Gruß Richard

Thegon
24.01.2011, 19:07
Ja, ich habe auch schon ein bisschen mit Feldeffekttransistoren herumprobiert, ich habe da so ein Mosfet (http://www.neuhold-elektronik.at/catshop/product_info.php?cPath=41_47_69&products_id=222)
Das soll recht gut sein, aber das hat so eine Große Gate kapazität, das eine ansteuerung mit pull - up widerstand bei großen Takten fast nicht mehr möglich ist, da der so klein sein muss, das er beim durchschalten des (wenn man so sagen kann) Pull - Down Transistors schon fast zu glühen beginnt :D .

Folglich müsste man dann auch einen Transistor statt dem Pull - Up Widerstand einbauen, und dann hab ich mir gedacht, kann ich mir das MOSFET eigentlich eh sparen, das ist dann fast überflüssig, da die Transistoren dann eingentlich alles nötige machen, um einen motor zu betreiben. Aber wenn das besser und effektiver geht, kann ich auch wieder ein MOSFET einbauen.
Noch eine Frage: Wenn ich einen normalen bipolaren Standarttransistorn verwenden würde, der sagen wir mal für 20 A geeignet ist, würde dann auch so viel Leistung verbraten?
Gruß Thegon

Richard
24.01.2011, 19:28
Das hat weniger mit der Stromstärke als mit dem Internen R-ON Widerstand zu tun und natürlich auch wie schnell geschaltet wird / werden kann.

Ein 20A Transistor brennt halt nicht gleich ab, aber heizen wird er trotzdem mehr als ein Fed.

Mit der Gate Kapazität hast Du natürlich recht deshalb gibt es auch extra Treiber (für den Treiber).....genau aus diesem Grund werden integrierte Lösungen gerne genommen. Wie Du das realisieren kannst, hast Du ja selber schon beschrieben und ich halte das letztendlich für die bessere Lösung. Aber um Kompromisse kommt Mensch im Leben nie vollkommen herum. :-)

Gruß Richard

Thegon
24.01.2011, 19:50
Ja ich glaube, den strom, durch den der Motor betrieben wird, den schicke ich besser doch durch meinen Mosfet, den hat mit auch schon ein bekannter geraten. Die Bremse, also der Transistor, der nach den Motorausgang nach oben schaltet, der wird wahrscheinlich doch ein Transistor bleiben, denn die Ströme, die da induziert werden, sind nicht gigantisch und die sollen ja sowieso in Wärme umgewandelt werden, also warum nicht gleich mit dem Transistor :D
Oder sollte man da auch ein FET verwenden? Das Problem bei den FETs ist, ich habe derzeit nur zwei... Aber gut, davon würde ich schon Nachschub bekommen, sollte es nötig sein.
Nochmals vielen Dank an alle (bes. Richard) die mir hier geholfen haben, denn man lernt ganz schön was dazu :D
Gruß Thegon