Hallo zusammen,
ich bin gerade an folgendem Projekt:
Es sollen zwei Roboterarme mit je 3 Gelenken entwickelt werden. Jedes
Gelenk kann
a) an- und abwinkeln
b) drehen
D.h. es werden insgesamt 12 DC-Motoren benötigt, die mit 6 x L6205
angesteuern werden. Die Steuerung des Neige- bzw. Drehwinkels erfolgt
mittels Spannungsteiler (Widerstand und Poti, das durch die Motorachse
gedreht wird). Die abgegriffenen Spannungswerte werden durch einen
AD-Wandler (6 x ATtiny13) mit Sollwerten verglichen. Der MC liefert dann
die Steuerspannung für den Vorwärts- bzw. Rückwärtsbetrieb der beiden
Motoren des Gelenks an den L6205. Ist der vorgegebene Spannungswert
(also der gewünschte Winkel) erreicht, schaltet der ATtiny13 den
jeweiligen Pin auf Low.
Die jeweiligen Winkelvorgaben sollen vom PC über die RS232-Schnittstelle
über einen MAX232 an die jeweiligen Mc's geliefert werden. Und genau das
ist mein Problem:
Wie erkennt der einzelne ATtiny13 das ein Wert für ihn gedacht ist? Ich
stelle mir das so vor, dass alle ATtinys wie an einer Art Bus hängen und
mit dem RXD-Ausgang des MAX232 verbunden sind. Die Kommunikation muss ja
nur in eine Richtung erfolgen (PC --> MC).
Der vom PC gelieferte Winkelwert soll im MC registriert und mit dem
aktuellen Winkelwert verglichen werden. Ist der gelieferte Wert
kleiner/größer als der Istwert, wird der Motor solange
vorwärts/rückwärts bewegt, bis Ist- und Sollwert übereinstimmen.
Jeder ATTiny hat folgende Pins belegt:
1x Reset
1x VCC
1x Ground
4x Ansteuerung L6205
es wäre als noch ein Pin übrig um die Winkelvorgaben für die 2 Motoren
zu liefern.
Ein Übersichtsplan zur Erklärung ist angehängt.
Hab ich mich sehr wirr ausgedrückt? Na ja, ich glaube Ihr wisst, was ich
meine. Hat jemand eine Erklärung für mich? Oder vielleicht sogar ein
Beispiel? Bin über jede Hilfe dankbar. Aber wenn es geht bitte in
einfachen Worten. Ich bin leider noch sehr unerfahren mit der ganzen
Materie.
Danke
Bruno
Bruno schrieb:> über einen MAX232 an die jeweiligen Mc's geliefert werden. Und genau das> ist mein Problem:>> Wie erkennt der einzelne ATtiny13 das ein Wert für ihn gedacht ist?
Wie erkennt der Briefträger, dass ein Brief für dich gedacht ist und
nicht für deinen Nachbarn?
@Karl heinz Buchegger (kbuchegg) (Moderator)
>Wie erkennt der Briefträger, dass ein Brief für dich gedacht ist und>nicht für deinen Nachbarn?
Er kennt die hübsche Nachbarin und weiß, dass dir niemand Briefe
schreibt. Deshalb kann es sich bei der, ähhhh, Zustellung, bei der
Nachbarin auch etwas mehr Zeit lassen . . .
SCNR
Falk
Dit ist auch klar, dass ein Tiny13 keine UART eingebaut hat?
Kann man natürlich auch mit einer Software UART machen, allerdings
solltest du dir gut überlegen, ob du dich da drauf einlassen willst.
Dir Frage, die ich mir stellen würde:
Wäre es nicht einfacher, anstelle von 6 Stück Tiny13, einfach 1 Mega8 zu
benutzen?
Ausgänge hat der genug und die 6 ADC Eingänge sind auch vorhanden.
Ausserdem ist eine UART eingebaut, was die Kommunikation mit dem PC
vereinfacht. Auch in die Gegenrichtung, denn seien wir uns mal ehrlich:
Der Tag wird kommen, an dem der PC gerne wüsste, wie denn die einzelnen
Achsen eigentlich stehen und sei es nur, dass er beim Drehen rausfinden
kann, ob es jetzt besser ist rechts oder links rum zu drehen um a) das
Ziel möglichst schnell zu erreichen und b) dabei keinen Kabelsalat zu
veranstalten :-)
Auch ist es dann einfacher, gegenseitige Abhängigkeiten der einzelnen
Achsen zu berücksichtigen.
Hallo Karl Heinz
Karl heinz Buchegger schrieb:> Dir Frage, die ich mir stellen würde:>> Wäre es nicht einfacher, anstelle von 6 Stück Tiny13, einfach 1 Mega8 zu>> benutzen?
Wenn dann müsste ich mindestens 2 Mega8 verwenden, da ich 12 Motoren zu
steuern habe. Oder einen MC mit 12 ADC Wandlern und 24 Ausgängen für die
Vorwärts/Rückwärtssteuerung. Das gibt einen ganz schönen Kabelbaum, den
ich eigentlich vermeiden wollte.
Aber Danke für den Tip.
Gruß
Bruno
Bruno schrieb:> Hallo Karl Heinz>> Karl heinz Buchegger schrieb:>> Dir Frage, die ich mir stellen würde:>>>> Wäre es nicht einfacher, anstelle von 6 Stück Tiny13, einfach 1 Mega8 zu>>>> benutzen?>> Wenn dann müsste ich mindestens 2 Mega8 verwenden, da ich 12 Motoren zu> steuern habe.
Mein Fehler. Hab nicht mitgedacht.
Also dann für jeden Arm einen kompletten Mega8
> Vorwärts/Rückwärtssteuerung. Das gibt einen ganz schönen Kabelbaum, den> ich eigentlich vermeiden wollte.
Den kriegst du sowieso :-)
Denn du musst die Versorgungsspannung zum Motor hinbringen, die
entsprechend stark sein muss, da sich ja alle 6 Motoren aus ihr
bedienen.
Bei deiner Lösung kommt dann noch die Tx-Leitung dazu.
Bei einer zentralen Lösung, sind es entsprechend schwächere
Versorungsleitungen und pro Gelenk eine Sense Leitung zurück anstelle
der Tx Leitung.
Ich sag jetzt nicht, dass das besser oder schlechter ist. Ich würds mir
nur mal durch den Kopf gehen lassen.
Karl heinz Buchegger schrieb:> Ich sag jetzt nicht, dass das besser oder schlechter ist. Ich würds mir>> nur mal durch den Kopf gehen lassen.
Nö, Du hast schon recht. Ist mit Sicherheit ausbaufähiger als die Lösung
mit je einem Tiny pro Motor. Könntest Du mir da einen MC empfehlen mit
dem ich alle 12 Motoren gleichzeitig steuern kann? Oder soll ich besser
2 x Mega8 (einer je Arm) verwenden?
Gruß
Bruno
Bruno schrieb:> mit je einem Tiny pro Motor. Könntest Du mir da einen MC empfehlen mit> dem ich alle 12 Motoren gleichzeitig steuern kann?
Ich kenn keinen, der 12 ADC mit hat.
> Oder soll ich besser> 2 x Mega8 (einer je Arm) verwenden?
Wäre meine Wahl.
Ist dann irgendwo ein Mittelding, so dass zwar jeder Arm autonom ist
aber doch alle Entscheidungen eines Arms an einer Stelle zusammenlaufen.
Karl heinz Buchegger schrieb:>> mit je einem Tiny pro Motor. Könntest Du mir da einen MC empfehlen mit>> dem ich alle 12 Motoren gleichzeitig steuern kann?>> Ich kenn keinen, der 12 ADC mit hat.
Ich schon: Den XMega128A1. Und den Mega16A4, der hat weniger Pins.
Bruno schrieb:> Hm. Das läuft aber dann ja doch wieder auf eine Art Bus hinaus, da nun> statt 6 Tinys 2 Mega8 über RS232 angesteuert werden müssen.
Ja.
Macht ja nichts.
Das Prinzip ist immer noch dasselbe :-)
Jeder Arm hat eine Nummer, jeder Befehl steuert einen Arm anhand seiner
Nummer an (und dort den Motor anhand einer Motornummer). Daran ändert
sich nichts.
Aber: Jeder Mega8 hat eine UART eingebaut :-)
Edit: Travel Rec. kennt was besseres als einen Mega8