PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motortreiber für .:Shadow Projekt:.



HannoHupmann
14.03.2007, 10:21
Erst mal vorweg, es handelt sich um die Motorelektronik für mein Shadow Mark II.
Der Thread zum ganzen Projekt ist: https://www.roboternetz.de/phpBB2/viewtopic.php?t=23007&postdays=0&postorder=asc&start=0

So langsam wird es an der Zeit sich um die Elektronik zu kümmern, insbesondere möchte ich bei den Motoren anfangen. D.h. Motortreiber müssen her.
Da ich mindesten 4 Motoren steuern muss, sind fertige Lösungen zu teuer. Also hilft nur selber basteln.

Als Wunschtreiber hab ich mir die L6205 ausgesucht. Die sollten für meine RB35 Motoren reichen und sind einfach zu verbauen.
4 Motoren macht 2 mal L6205.

Da der gesamte Roboter ein i²c Bus System bekommen soll (einfache erweiterung und austausch von Daten). Möchte ich die Motortreiber ebenfalls über i2c ansteuern. Dafür benötigen die L6205 einen Treiber, es folgt eine kurzes Pflichtenheft für einen geigneten Treiber:

folgende Anschlüsse:
- 8 Motoreingänge
- 4 PWM
- 4 Eingänge für die Stromüberwachung
- Eingänge für 4 Gabellichtschranken/Inkrementalgeber
achja und einen I2C Ausgang, für die Programmierung des selbigen vielleicht sogar noch einen R232.

Bisher hab ich passend dazu nur den MOTCTRL gefunden. Der liefert mir aber nur die Hälfte der Ports und so müsste ich diesen 2 mal verbauen, was teuer und umständlich ist.

Leider kenn ich mich mit MicroControllern noch nicht so gut aus, denke aber, dass es hier geeigente Lösungen geben kann.
Falls die Lösung überdimensioniert ist (also Ports übrig sind habe ich genug Ideen die diese später nutzen (7.Segment Anzeigen, Akku Überwachung etc)

Ich bitte euch jetzt mir Tipps und Lösungswege vorzustellen, damit ich weiter machen kann an meinen Projekt.

Danke HannoHupmann

Reeper
14.03.2007, 12:34
Ich kenne mich zwar nicht so mit I2C aus, aber wie wäre es mit einem weiteren Atmel als Slave (TWI). Dieser hätte dann die Endstufen dirket unter seine Controlle.
Ist auf jedenfall billiger :-)

HannoHupmann
14.03.2007, 16:22
@Reeper, jo genau der Controller (Atmel oder was auch immer) hängt als SLave im i2c Bus.

Welcher Atmel wäre denn den Anforderungen nach geeignet? Hab da keine Ahnung welche es gibt, bzw. welche sich empfehlen.

steveLB
14.03.2007, 20:52
Grad wo ich dein Beitrag gelesen hab dacht ich " was ???" Hanno kommt nicht selber auf die Idee mit nem AVR ? dann hab ich mal auf deiner Page nachgeschlagen, und sehe , du arbeitest mit PICs, bin davon ausgegangen das du die AVRs nutzt und deren möglichkeiten kennst, vor allem bei den spitzen Projekten, von den ich mir meine Inspiration hol :D .
I2C geht mit vielen AVRs , kannst du das nicht auch mit nem PIC realisieren, mit dem PIC als Slave zu deinem Haupt-Pic ??
Gruß ...
... und vieleicht wilkommen in die Welt der Avrs ;)

Reeper
14.03.2007, 20:59
Ach so, dass mit den PIC's habe ich übersehen 8-[

Eine schöne Übersicht über AVR's gitb es zB. hier:
http://alt.kreatives-chaos.com/index.php?seite=avruebersicht
Dort ist oben im Tabellenreiter u.a. PWM-Kanäle angegeben.

HannoHupmann
15.03.2007, 08:14
@SteveLB erste mal danke fürs Lob. Japp die OOPic Reihe die ich verwende ist sozusagen ein Relikt aus alten Vorzeiten. Den also ich angefangen hab mit Roboterbasteln gab es noch keine anderen Controller Boards (zuminderst hab ich keine gefunden). Die OOPics sind auch eigentlich eine gute Einstiegslösung.

Aber jetzt will ich eigentlich umsteigen auf AVR (billiger und es gibts mehr möglichkeiten). Nur auf dem Gebiet kenn ich mich noch gar nicht aus und fang gerade erst an mich damit zu beschäftigen.

@Reeper coole sache ich muss gleich mal suchen und finde:
ATmega8535 der müsste gehen wegen I2C und 4PWM

Aber vielleicht habt ihr noch eine heisse Empfehlung.

Kurz noch eine Frage. Im Moment läuft programieren bei mir etwa so ab: Programm schreiben in einer Entwicklungsumgebung --> µC anschliessen über Seriel --> Programm komplieren und übertragen --> Fertig

Ist das bei den AVR anders oder läuft es genauso? Brauch ich noch zusätzlichen Speicher (EEPROM) oder werden die Boardmittel ausreichen?

munkl
15.03.2007, 08:40
Hi zusammen,

also billiger als einen PIC bekomm ich keine Atmel. http://sample.microchip.com/
und natürlich kannst du auch mit einem PIC ein I2C slave machen. dazu gibts ja den SSP Interrupt.

mfG munkl

steveLB
15.03.2007, 11:11
Also bei den AVRs mag ich den Mega16 bzw dessen größerer Bruder Maga32, weil der Mega16 und auch der Mega32 zusätzlich noch JTAG haben, d.h. ich kann ihn direkt debuggen und im AVR-Studio schritt für schritt beobachten .
Den den du ins Auge gefasst hast , der hat kein JTAG aber ist auch nicht umbedingt nötig.

Das Proggramieren geht wie bei Pics auch, Programm schreiben, in hex umwandeln, per PonyProg oder ähnliches auf den µC serriel oder parallel übertragen, dabei kann der AVR ruhig in der Schaltung bleiben (Stichwort ISP) und fertig

gruß

Sommer
15.03.2007, 15:22
Hi,

ich verwende meistens normale Modellfahrregler, zB. Conrad Best.-Nr:225049-82. die halten genug Strom aus und sind zudem recht günstig. Für die Ansteuerung habe ich eine kleine Platine für meine S-Control gemacht die über I2C angesprochen wird und die Regler ansteuert. Auf der Ansteurungsplatine ist zudem ein PID Regler integriert der die Drehzahl konstant hält.

Das ganze System sieht dann so aus...

Reeper
15.03.2007, 15:56
Also bei den AVRs mag ich den Mega16 bzw dessen größerer Bruder Maga32, weil der Mega16 und auch der Mega32 zusätzlich noch JTAG haben, d.h. ich kann ihn direkt debuggen und im AVR-Studio schritt für schritt beobachten .
Den den du ins Auge gefasst hast , der hat kein JTAG aber ist auch nicht umbedingt nötig.

Das Proggramieren geht wie bei Pics auch, Programm schreiben, in hex umwandeln, per PonyProg oder ähnliches auf den µC serriel oder parallel übertragen, dabei kann der AVR ruhig in der Schaltung bleiben (Stichwort ISP) und fertig

gruß


Genau,
man hat eine sehr breite Palette an programmiersoftware und Hardware.
Du kannst zB. .hex, .bin files übertragen und brauchst keine zusätzlichen Speicher (jedenfalls für Normalanwendungen nicht). Das hat alles der Atmel an Board.

HannoHupmann
15.03.2007, 16:13
Sehr gut, so hab ich das bisher auch auf den Webseiten gelesen.
Wahrscheinlich würde ich dann über ISP Proggen PonyProg oder sowas.

@munkl was ich bisher verwendet habe war ne Standalone Premium Lösung also auf jedenfall ein komplettes Controllerboard für 80€.

@steveLB genau deswegen frag, den ich bisher rausgesucht hab, war der erste der 4PWM und I2C hatte sonst keine weiteren Entscheidungskriterien ausser ganz oben auf der Liste.

Jetzt ist es nur noch eine Frage des Preises und dann muss ich mir wohl eine Platine überlegen.

Was kosten eigentlich so Mega16?

Sommer
15.03.2007, 16:36
Hi,

Mega16 bzw. Mega32 kosten so um die 3 bis 4Euronen!
Mein Board ist mit einen Mega32 ausgerüstet da dieser für die meisten Anwendungen völlig ausreicht!

Du hast bei der S-Control sozusagen ein Mainboard das wie beim PC auch mit Steckmodulen erweitert werden kann.

Aktuelle Module sind:
================

- Kommunikations - Modul RS232/Easy Radio 433Mhz
- I2C PID Motorregler Dual (zwei Regler)
- 4x SRF04 auf I2C
- I2C Stepper Modul (Schrittmotor)
- I2C Porterweiterung (4x ADC 8Bit, 2x Byteport I/O)
- I2C Echtzeituhr + EEProm 24xxx
- I2C Relais - Modul (vier Relais je 1x UM)
- I2C Servo - Modul (8 Servos)

Und diverse Lösungen für Spezialanwendungen...

Bei Interesse kann ich dir das Layout und die Stücklisten zukommen lassen.

Gruß Ulli

steveLB
15.03.2007, 18:26
@ Hanno wie gesagt der Mega16 oder Mega32, der hat die 4PWM und JTAG , er wird außerdem noch oft benutzt , ich schätz mal das er direkt nach dem Einstiegsliebling Mega8 kommt. Ich habe den Mega8 auch, doch da er kein JTAG kann bin ich zu Mega16 gewechselt, den gibts es als SMD wie auch noch als DIP version zu kaufen ...Preis um die 3 €

@Sommer, ist die S-Control eine Eigenentwicklung von dir ?
sieht interessant aus vor allem schön Modular, wobei sie mir etwas groß vorkommt , wenn ich den Mega16? (links) zum Größenvergleich nehme

Gruß

Sommer
15.03.2007, 19:34
Hi,

ja die S-Control ist eine Eigenentwicklung von mir.
Die Masse der Main-Unit sind 160x100x45mm.
Der µC ist ein Mega32 in DIL40 Gehäuse.

Mich hat es immer genervt dauernt ein neues Layout zu erstellen für einen neuen Roboter oder eine Steuerung. Deswegen habe ich auf der Main-Unit nur das nötigste drauf und die Erweiterungen kann man sich nach Wunsch gestallten. Einige Module die man meist immer benötigt habe ich bereits fertig und sind auch in meinen SMR-1 Roboter eingebaut. Der größte Vorteil liegt an den Modulen das sich die Haubt CPU nicht um Kleinigkeiten die zeitfressen kümmern muss sondern das die Module selber machen und Befehle und Statusausgaben über I2C erledigen. Die Haubt CPU muss dann nur eine einfache I2C Rutine ausführen.

Gruß Ulli

sigo
18.03.2007, 17:31
Hi Hanno,

ich bin ebenfalls auf den L6205 als "Wunschtreiber" gekommen, und habe ihn gerade in doppelter Ausführung für 3(max.4) Achsen aufgebraucht. (1 Sockel ist leider noch leer, ist aber bestellt)

Ich verwende 10W-MAXON Servomotoren mit Inkrementalgeber, die mir gleich eine hochauflösende Drehzahl- und Positionsinformation geben.

Die L6205 werden über separate 1-Achs-Servoregler (ATtiny2313 @16MHz) angesteuert. Diese können wahlweise im Positions-, Drehzahl-, Drehmoment oder PWM-Steller-Mode arbeiten. Hiermit sind Samplezeiten von ca. 1ms möglich. Die Achs-Controller werden aktuell (leider noch) über RS-232 angesprochen. I²C wäre mir lieber. Das versuche ich dann im nächsten Schritt. Es handelt sich um eine reine 1-Chip-Lösung.

Aktuell habe ich das auf Lochraster aufgebaut. Und sie arbeiten sehr dynamisch. Eine Platine ist in Eagle in Arbeit. Ich bin aber noch nicht so weit.

Diese 1-Achscontroller werden nun von einem Master "Motioncontrol" (aktuell ATmega8, kann aber jeder größere sein) angesteuert.

Im ersten Anlauf möchte ich mich an einem Omnibot versuchen. Der
Motioncontroller soll einen Positionsvektor (Richtung, Geschwindigkeit, sowie (später auch) Drehwinkel) von seinem Chef (Botcontrol) über I²C (ggf. zusätzlich wahlweise RS-232) bekommen, und dafür sorgen, dass die Achscontroller dann alle ihre Komponente erfüllen..Dieser Controller soll in BASCOM oder lieber C realisiert werden. Irgenwas, das gut Trigonometrie kann...eben.

Damit hat der Botcontroller mit der Bewegung nicht mehr viel zu tun. Auf dieser Ebene möchte ich natürlich auch nur noch mit I²C arbeiten und Sensoren und weitere Aktoren über I²C anbinden. Daher muss ich es noch irgendwie schaffen, die Achscontroller I²C fähig zu bekommen, um sie modular auch dort einsetzen zu können..

Bisher kann ich dir nur ggf. anbieten, dass ich dir geproggte Achscontroller-Chips schicke ( - nicht auslesbar - ), die du über RS-232 ansprechen kannst. Für die Funktion ist ein Inkrementalgeber am Motor erforderlich. Du könntest diese Achscontroller hinter einen beliebigen Master hängen, sofern du dort genügend RS-232 (software) realisieren kannst..)

Wenn du fertige Komponenten einsetzen möchtest, würde ich einfach 2x den Motorcontrol-Chip von Robotikhardware nehmen, der kann ja bereits I²C und gerade bei deinem Bot würde es sich ja fast anbieten, je Achse einen 2-Achscontroller zu nehmen...

Leider geht es bei mir nicht so schnell voran, wie ich es gern hätte. Aber wem geht es nicht so... :-)

Deine strukturierte modulare Herangehensweise gefällt mir sehr gut,

Gruß Sigo

HannoHupmann
20.03.2007, 13:14
@Sigo so ähnlich ist die Idee bei mir auch. Die gesamte Motorsteuerung (4- RB35 und vielleicht 1 Stepper) soll eigenständig sein. D.h. Mototreiber, Ansteuerung und Sensorauswertung wird von einem Subprozessor übernommen. Im günstigsten Fall bekommt er vom Hauptcontroller nur noch einen Richtungsvektor in den Speicher geschrieben.

Da ich noch keinen Controller habe für die Hauptsteuerung möchte ich mir diesen Punkt auch noch möglichst lange offen halten.

Der Modulare Aufbau setzt sich immer mehr durch bei grösseren Projekten. Bei kleinen Robotern ist es meistens Unsinnig alles auf Subcontroller zu verteilen.

Mal sehen wie es weiter geht.

sigo
20.03.2007, 20:19
@HannoH

bekommen deine Motoren Inkrementalgeber o.ä.?
Oder werden sie nur mittels PWM die Drehzahl gestellt?
Letzteres kann man ja locker mit einem Controller machen.

Ich habe je Motor einen Servocontroller vorgesehen, weil ich so für jeden Inkrementalgeber einen 16-Bit-Counter (funzt bis ca. 80.000 Inkr./s) und 2 PWM für die Halbbrücken zur Verfügung habe. Bei 1,30€ pro ATtiny2313 kann man sich das ja leisten..

Gruß Sigo

HannoHupmann
21.03.2007, 18:01
Die werden wohl über PWM gestellt, aber ich denke um Inkrementalgeber werde ich nicht herum kommen da ich sonst immer wieder kurven fahre weil die Motoren nicht exakt gleich laufen.

Allerdings wird weis ich nicht ob ich Inkrementalgeber überhaupt noch unterbringen kann. Die Scheibe dafür hat leider nicht mehr besonders viel Platz.

sigo
21.03.2007, 22:59
Hanno, falls du bei den L6205 bleibst:

Ich habe nun beide aufgebaut. Man kann die Ladungspumpenschaltung des einen L6205 für beide Endstufen benutzen und so ein wenig Platz auf der Platine sparen. Die Spannung ist nur minimal kleiner. Und wenn man die beiden 1N4148 durch Schottky-Dioden ersetzt, hat man das schon wieder ausglichen.

Sigo

HannoHupmann
30.03.2007, 19:07
Langsam gibt es neues. Ich hab mir mal die Mühe gemacht, die Struktur aufzuzeichnen wie ich mir die zukünftige Motoransteuerung vorstelle.

Link mich (http://www.fh-augsburg.de/~hanno/Roboter/Version%201-01.pdf)

Hauptprozessor für die Motorsteuerung soll ein ATmega32 werden. Eingebunden wird die ganze Schaltung über I²C.

Der Atmega32 Treibt 2x L6205N Motortreiber an. Welche wiederum 4 Motoren antreiben (1A, 1B, 2A, 2B). Über 4 Inkrementalgeber wird die Drehzahl jedes Rades abgegriffen und an den Atmega zurück geschickt.

Da an diesem Baustein sämtliche Akkus angeschlossen. In der ersten
Überlegung habe ich mir 3 Lithium Polymer Akkus überlegt. Jeweils mit 2 Zellen, 11,1V Nennspannung, 2,1 Ah. Jeder Akku soll einzeln Spannungsüberwacht werden. D.h. es wird einmal die Analoge Akku Spannung ausgelesen und mittels eines Comperators eine 6V Spannung geprüft. Fällt die Spannung eines Akkublocks unter 6V (Tiefentladungschutz) spricht der Comperator an liefert eine 1 an den µC und dieser schaltet ein Releais auf low welches den Akku abklemmt. Damit ist garantiert, dass es nicht zu einer schädlichen Tiefentladung für die Akkus kommen kann.

Über einen Spannungsregler wird sowohl die 12V Spannung für die Motoren sowie eine 5V Logik Spannung bereit gestellt.

Bei meinen Überlegungen sind einige Fragen aufgetreten:
- 1) wie kann ich verhindern, dass die einzelnen Akkuspannungen sich nach der Parallel Schaltung überlagern?

- 2) Wie funktionieren die SENS Leitungen des L6205N Chips

- 3) Kann ich die ganzen, im PDF angedeuten Leitungen, überhaupt am Atmega32 anschliessen? Soweit ich es bisher überschauen kann, hat er nicht genügend Pins dafür.

Bei der Beschaltung des Atmega32 hab ich noch die meisten Probleme für den L6205N gibt es entsprechende Beispielschaltungen. Sollte also nicht schwer sein, das in Eagel umzusetzen

Für eure Hilfe bin ich sehr dankbar.

mfg Hanno

sigo
30.03.2007, 22:59
zu 1) mit Dioden (Schottky) in den + Leitungen.
Allerdings wird dann am Anfang immer nur der Akku belastet, der die größte Spannung hat. Aber das gibt sich ja dann schnell :-) Wenn die Spannungen erstmal gleich sind, sollten sich die Ströme verteilen.
Wenn du sicher gehen willst, dass sie das halbwegs symmetrisch tun, kannst du noch Leistungswiderstände dazwischen schalten, falls der Innenwiderstand der Akkus nicht reicht. Je nach deinem Strombedarf, so, dass bei max. Strom z.B. 0,2-0,3V am Widerstand abfallen. Ist zwar schade um die Verlustleistung, aber die Akkus werden es dir sicher danken.

Zum Schutz vor Tiefentladung kannst du auch MOSFETs nehmen, dann hast du gleich schon den o.g. Widerstand integriert ;-), und brauchst kein Relais.

zu 2) In die Sense-Leitungen des L6205 kann man shunts zur Strommessung schalten, wie man das auch z.B. beim L298 tun kann (dort eher muss).

Beim L6205 ist die Messung aber unter bestimmten Umständen nicht notwendig, da der Baustein selbst schon intern den Strom misst, unter Nutzung des Innenwiderstands der MOSFETs. Hiermit schützt der Baustein sich selbst, bei Masseschluss, Kurzschluss auch Schluss gegen + wenn ich das richtig erinnere.

Solange man die Stöme nutzen kann, und der Motor das verträgt, muss man keine Shunts nehmen.

Wenn man den Strom aber niedriger begrenzen möchte, kann man das z.B. mit einem L6506 machen, oder den anderen einschlägigen Schaltungen (bei Schrittmotoren auch L297 etc). Auch wenn du den Strom messen möchtest musst du einen Shunt vorsehen.

Ich habe bei meiner Regelung keine Strombegrenzung vorgesehen, die Senseleitungen liegen also auf Masse. Der Motorstrom wird bei mit indirekt durch den Regler begrenzt, dem man dazu u.a. den Wicklungswiderstand und ein paar andere Motorparameter mitteilen muss. Das funzt bisher ziemlich gut.

3) Beschaltung des Atmega32
Der ist doch auf dem RNcontrol Board drauf. Und bei Robotikhardware gibts irgendwo auch einen Schaltplan.

Fest belegte Pins sind eigentlich nur der Quarz-Anschluss, sofern verwendet und in der Regel noch die Programmierschnittstelle (siehe dort).
Wenn du AD-Wandler nutzen möchtest, musst du die AnalogVcc über eine Drossel (100µH) und ein C(100nF) von der digitalen VCC entkoppeln. Ansonsten gelten die allgemeinen Designregeln, gemeinsamer Massepunkt etc..und der übliche 100nF Kondensator über Vcc. Die anderen Pins sind zur Verfügung. Die Funktion entnimmst du am besten dem Datenblatt..

Zur Schaltung:
Ich verstehe deine Inkrementalgeber nicht. Sind das nur 1-kanalige Drehzahlmesser? Keine Quadratursignale? Wieso hast du da einen A/D-Wandler gezeichnet?

Sigo

sigo
30.03.2007, 23:43
habs grad erst gesehen, die Sense-Leitung hat nichts and er Motorphase zu suchen, die gehört an Masse, direkt oder über einen Widerstand.

Sigo

HannoHupmann
31.03.2007, 12:45
@Sigo meine Inkrementalgeber sind nur ein Symbol für den die spätren Inkrementalgeber. Soll heissen die Anschlusspins müssen nicht korrekt sein. Deswegen steht da auch Analog (Drehzahl) zu Digital Wandler dran.

Wegen der Akkuentladung mach mich mir noch sorgen. Da ich Lithium Polymer Akkus verwenden will. wird es nicht ganz einfach. Die sind nämlich ziemlich sensibel wie ich mitbekommen hab auf Unterspannung, Überspannung und laut nem anderen Datenblatt darf man sie gar nicht parallel schalten.

Vielleicht kennt sich da noch jemand besser aus.

Reeper
31.03.2007, 15:09
Zu den Inkrementalgebern:
Bei meinen Bot will ich diese (zwar sehr feine, aber teure) Sache übergehen, indem ich die Richtungskorrektur mit dem Kompass ausgleichen will. Nun weiß ich nicht, wie das mit deinem Bot ist. Ich glaube eher, dass dieser auf ebenen Untergründen operiert?
Meiner ist für Offroad ausgelegt und ein Bodenkontakt ist eher zufällig.
Evtl. ist das eine Alternative für dich, ich selber habe ich es aber noch nicht ausprobiert.

Gruß
Stefan

HannoHupmann
01.04.2007, 16:15
er wird Indoor fahren, d.h. es ist mit Türschwellen und Teppichkanten zu rechnen. Eventuell kann man auch Stufen damit hochfahren. Aber mehr sicher keine Steine oder nasse untergründe.

Um gerade fahren zu können muss ich die Drehzahl jedes Rads wissen. Und da wegen dem Geld mach ich mir sogut wie keine Sorgen, das findet sich schon immer irgend wie.

Kompass kommt aber auch drauf.