Forum: Mikrocontroller und Digitale Elektronik Steuerung mehrerer ATtiny13 mit RS232


von Bruno (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Bruno (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Bruno (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Bruno (Gast)


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Bruno (Gast)


Lesenswert?

Ja, das macht Sinn. Danke.

@ Travel Rec: Danke für die Empfehlung. der XMega64A1 sieht gut aus. Hat 
16 ADC und 24 PWM. Genau was ich brauche :-)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Bitteschön :-)

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
Noch kein Account? Hier anmelden.