Logikcracks gefragt! Job für µC oder Logik-Ic? Schrittmotor ansteuern

OP #3656105
Lesenswert?

hi mal wieder,
es geht um eine Schrittmotor-Steueraufgabe, für die die üblichen Takt 
und Richtungs-Signale zur Verfügung stehen.
Die Endstufe sowie passender Schrittmotor sind vorhanden, allerdings 
benötigt die Endstufe andere Signale, diese Karte hat keinen Eingang für 
Step und Dir Signal, sondern 3 Inputs.

Um 6 aufeinander folgende Steps vorwärts zu fahren, werden die Inputs 
wie folgt beschaltet:

001
011
010
111
100
101

Danach gehts von vorne los. Rückwärts eben die Liste von unten nach 
oben.

Ich denke, mit einem kleinen AVR ist das kein Thema, lieber wäre mir 
aber eine Hardwarelösung, sofern die mit irgendeinem Logik-Ic zu machen 
ist.
Hat jemand 'ne gute Idee dazu?
Grüssens & Dank, harry
#3656197
Lesenswert?

Ein EPROM. Ein Zähler. Ein Monostabiler Multivibrator.
Der Zähler gi´bt seine Signale auf den Adressbus. Das Eprom ist so 
programmiert, dass es die entsprechenden Schritte ausgibt. Eine 
Datenleitung des EPROMS triggert den Monostabilen MV, dessen Ausgang auf 
den Zählerclock geführt wird.

Fertig.
OP #3656205
Lesenswert?

ohps, sorry, doch, hast recht, der 4. Wert ist 110.
und klar, die Zählfolge mutet bissl eigenartig an, hab keine Idee, wie 
man auf sowas kommt.
@ Falk: Danke für den Link, ich befürchte nur, das gibt dann das weiter 
oben erwähnte TTL Grab, hm, mal 3 Achsen, wird wohl 'ne Kiste :)
Egal, Platz ist da mehr als genug, nur leider ist der ganze TTL und CMOS 
Kram an mir vorüber gezogen, als das hipp war.
1 chip Lösung wäre natürlich klasse, aber wie ich da 'ne 8:1 mux 
verbraten kann, da steh ich gerade auf der Leitung...
Grüssens, harry
#3656212
Lesenswert?

Die Lösung mit den den MUXen:

Einen für jeden Ausgang, an die Dateneingänge werden der gewünschten 
Sequenz nach entsprechend Hi/Lo-Signale angelegt, die Adresseingänge der 
MUXe aller Kanäle liegen am Ausgang eines Up/Down-Zählers. Der Reset 
dieses Zählers muss dann natürlich auch noch integriert werden.
OP #3656222
Lesenswert?

jepp, klar, mux geht ja auch 'anders rum'.
Gray-Code kommt fast hin, nur haben wir da die ungeliebte 111 
zwischendrinne, passt also nicht ganz.
Und ja, ist wohl ein 3-Strang Schrittmotor, dicker Brummer (im wahrsten 
Sinne des Wortes) wird mit 32V getrieben bei munteren 15A, gechoppert 
natürlich. Die Treiberkarten strotzen vor dicken Transen und Kühlern, 4x 
74LS04 im Eingangsbereich und nur bedrahtete Teile, also schön für die 
Ewigkeit gebaut, sind intakt, deswegen wollte ich die gerne erhalten.
Hätten wir dann 3 Zähler und 9 muxens, hmmm
Ich denke, ich nehm dann doch erstmal 'nen AVR auf die schnelle, der 
wird dann wohl noch die nächsten 10 Jahre da drinne rumticken...
Danke & gute Nacht, harry
Gast #3656244
Lesenswert?

Wenn du wirklich nicht auf ein fertiges Bauteil zurückgreifen willst, 
würde ich es nach etwas Nachdenken so lösen:

Die drei Bits repräsentieren jeweils die Ansteuerung der um 120° 
versetzten Spulen.
Es ist jeweils immer eine Spule an, oder 2 benachbarte (Zwischenstufe), 
dadurch ergeben sich 6 Schritte.

"Steuerzentrale" ist ein Decade up/down counter mit preset (evtl. musst 
du 2 4-Bit counter kaskadieren).
Ausgang 0+1+5 an ein 3-fach OR -> Signal für 1. Spule (A)
Ausgang 1+2+3 an ein 3-fach OR -> Signal für 2. Spule (B)
Ausgang 3+4+5 an ein 3-fach OR -> Signal für 3. Spule (C)

Ausgang 6 -> Reset Signal für den/die Counter
Ausgang 7 -> Preset Load Signal für den/die Counter

Wenn der Counter also auf 6 springt (beim hochzählen) springt er direkt 
auf 0.
Umgekehrt beim runterzählen von 0 auf 7 -> Load Preset
Preset muss demzufolge "5" sein.

Counter Value     A B C
0                 0 0 1
1                 0 1 1
2                 0 1 0
3                 1 1 0
4                 1 0 0
5                 1 0 1
6 -> Reset -> 0
7 -> Preset -> 5
Gast #3656264
Lesenswert?

Harry Up schrieb:

> Um 6 aufeinander folgende Steps vorwärts zu fahren, werden die Inputs
> wie folgt beschaltet:
>
> 001
> 011
> 010
> 111
> 100
> 101

Bist du sicher, daß du das richtig abgetippt hast? Meiner Meinung nach 
müßte das so aussehen:

001
011
010
110
100
101

Dann wird auch klar, was hier tatsächlich passiert: es werden drei, um 
120° gegeneinander verschobene Phasen generiert. Und angesteuert wird 
damit vermutlich kein klassischer Stepper, sondern ein brushless Motor.

Es wäre auch möglich, daß das eine von mir geänderte Bit tatsächlich 
richtig war und von dem Controller ausgefiltert und für irgendwelche 
Synchronisationsaufgaben verwendet wird.
>
> Danach gehts von vorne los. Rückwärts eben die Liste von unten nach
> oben.
>
> Ich denke, mit einem kleinen AVR ist das kein Thema, lieber wäre mir
> aber eine Hardwarelösung, sofern die mit irgendeinem Logik-Ic zu machen
> ist.
> Hat jemand 'ne gute Idee dazu?
> Grüssens & Dank, harry
Gast #3656335
Lesenswert?

Harry Up schrieb:
> 001
> 011
> 010
> 111
> 100
> 101

Ziemlich dämlich, weil hier

010
111

2 Leitungen gleichzeitig ihren Zustand ändern.
Das wird NIE gleichzeitig sein.
Und wenn der linke zuerst kommt

010
011
111

entspricht das einem Schritt zurück und 2 nach vorn.

Es müsste also wenn überhaupt dann so

010
110
111

passieren, wobei 110 und 111 dieselbe Position bedeuten
damit nicht ein Schritt mehr erfolgt.
Durch Zufall ? Oder hast du den vergessen ?

Ansonsten entpsricht das Problem der Umwandlung in Gary Code,
das hat man früher tatsächlich mit Logikbausteinen gemacht,
dann mit GALs.

Hier für 2 Kanäle
http://www.mikrocontroller.net/attachment/86864/Gray_Encoder.png
OP #3656366
Lesenswert?

...in der Lehre...
...Quad Core CPU...
...ziemlich dämlich...

ah, sind dir Trolle erwacht, moinsens Jungs, ausgeschlafen oder 
abgebrochen?
Dachte noch, ist das Forum vernünftig geworden, bislang nur konstruktive 
Ansätze, aber klar, dieses Forum bleibt dieses Forum, mit all seinen 
Mitmachern :)

MaWin, wenn du die vorgehenden Beiträge auch liest, stellst du fest, 
dass die 111 niemals auftaucht, war nur ein Eingabefehler, bis dahinb 
nix schlimmes. Aber du könntest Tektiv wie Herlock Sholmes werden, dir 
entgeht nicht die kleinste Kleinigkeit. ('Gary Code', so passiert's 
eben)

 Bissigmode Ende  & schönen Tach auch, harry
Gast #3656559
Lesenswert?

Anbei die Idee mit Counter.

Symbol des 74xx237 ist nicht ganz richtig, ich habe auf die Schnelle 
einfach das Symbol der invertierenden Variante 74xx137 genommen.

Das 3-fach OR könnte man auch einfach mit je 3 Schottky-Dioden lösen 
denke ich.
Angehängte Dateien:
Gast #3656585
Lesenswert?

Hi,
Du meinst wohl einen Gray-Zähler, nicht 'Gary'. Bei jedem Schritt darf
immer nur ein Bit umkippen.Ich würde ein CPLD nehmen, das ist leicht zu
ändern falls doch nicht gleich richtig sein sollte. Diskrete Logik ICs
dazu scheints nicht zu geben, Design zu Fuss mit KV DIagram und Gatter-
Bausteinen ist Steinzeit.
Nimm ein CoolRunner 2 oder so, billig und funktioniert gut.
LG
OP #3656687
Lesenswert?

Easylife, wow, danke, sieht toll und einfach aus, 'ne small but good 
solution eben. Ich denke, die sollte ich mal hinstricken. Eine diskrete 
Lösung ist für diesen Fall nicht verkehrt, im Moment tickt die Fräse mit 
einem kleinen µC Interface, auch auf die Schnelle hingetunt aus einer 
viel zu großen Steuerplatine.

...ES gibt immer Idioten die einem die Arbeit scheinbar abnehmen.....
UFFBASS: die Logik-ICs sind nicht meine Stärke, bin halt ein Analoger, 
der's eher mit Opamps und so'm Kram hat, das Prinzip ist schon klar mit 
all den Gatter und Inverters und Zähler und was es sonst alles gibt.
Aber so eine Schaltung auszuarbeiten erfordert zum einen viel Zeit - 
wenn man nicht im Thema zuhause ist, zum anderen muss ein gewisser 
Überblick der Materie bestehen, sonst sucht man sich zu Tode.
Jemand, der in diesem Thema zuhause ist, schiesst sowas aus der Hüfte, 
das passt dann auch, weil eigentlich kein großes Thema.

Und genau hierfür gibt es Foren, neben Blödlaberei - das ist der 
unerwünschte Nebeneffekt - dient es eigentlich dem Austausch von Infos 
und Wissen, nicht jeder Anwender muss das Rad neu erfinden, das macht 
einfach keinen Sinn.

Völlig sinnlos dagegen ist dein Kommentar, aber wie gesagt, 
Nebeneffekt...

Danke an alle
Gast #3656724
Lesenswert?

Kein_Idiot schrieb:
> ES gibt immer Idioten die einem die Arbeit scheinbar abnehmen.....

Sehr geehrter "Kein_Idiot", vielleicht denkst du nochmal kurz über deine 
Einstellung nach.

Meine Arbeit war es in 15 Min. eine Idee zusammenklickern.
Die eigentliche Arbeit hat Gary, der eine ordentliche (und mit 
Abblockkondensatoren versehene...) Schaltung aufbauen muss, sie testet 
und optimiert.
Das Forum ist aus meiner Sicht genau dazu da, solche Ideen gemeinsam zu 
Entwickeln.
Evtl. habe ich ja einen Denkfehler in der Schaltung, und jemand erkennt 
das und verbessert es.
Und irgendwann kommt dann nochmal jemand, der für genau das gleiche 
Problem eine Lösung sucht, und kann sich eine Menge Arbeit sparen.

Cheers.
#3656936
Lesenswert?

Harry Up schrieb:

> Lösung ist für diesen Fall nicht verkehrt, im Moment tickt die Fräse mit
> einem kleinen µC Interface,

?
Und diesem µC kann man diese eine Tabelle im Programm nicht mehr 
unterbringen, so dass er anstelle von 2 Ausgängen deren 3 gleich richtig 
ansteuert?

> und kann sich eine Menge Arbeit sparen.

Exakt. Indem er sich überlegt, ob es in Stein gemeisselt ist, dass die 
Vorstufe Schritt und Richtungs-signale generiert, anstatt gleich auf 3 
(anstelle von 2 Pins) die korrekten Spulen-Signale rauszugeben.

Jetzt treibt der µC Aufwand um aus der Schrittnummer (die er sicher 
intern irgendwo im Programm hat), Schritt und Richtungsinformation 
abzuleiten, die dann von einer externen Hardware, erst mal wieder auf 
eine laufende Schrittnummer zurückgeführt wird.
Also ich wüsste schon, wo ich da erst mal ansetze. Und das ist sicher 
nicht bei der Hardware, solange der µC genug Pins hat.


Edit: Die Richtungsinformation ist in der Hardware auch noch nicht 
ausgewertet. Schritt und Richtung ist nicht dasselbe wie StepUp und 
StepDown. OK, ist trivial zu realisieren, aber dennoch. Wieder 1 IC 
mehr.


Oder war
>  im Moment tickt die Fräse mit einem kleinen µC Interface,
so gemeint, dass im Moment der µC die Umsetzung von Schritt und Richtung 
auf die Spulensignale macht und du einen Ersatz dafür suchst? Wozu 
eigentlich? Kleiner und einfacher als mit einem µC wirds nicht.
OP #3657144
Lesenswert?

hi,
naja, der kleine µC (644P) macht seinen Job ganz patent, ist aber bissl 
oversized. Ging ja auch nur darum, die Kiste erstmal in's Laufen zu 
bekommen. Das tut sie, die Takt und Richtungssignale liefert die 
Software EMC2 unter Linux. Die Leistungs-Karten für die Stepper waren 
schon in der Fräse verbaut, sind aber ordentlich und satt dimensioniert, 
deswegen will ich so viel es geht erhalten davon. Die alte Steuerung 
fällt so langsam dank Folientastatur auseinander, ausserdem hat sie eine 
Macke. Deswegen der Umstieg auf EMC2, aber auch, weil es endlos nervig 
ist, eine etwas komplexe Form in G-Code via einer 'kastrierten Tastatur' 
von Hand einzutippen.
So, zurück zum Signal. Ich hatte ein wenig Bedenken, die Sache mit einem 
µC aufzuziehen, wenn 3 Taktsignale gleichzeitig angeflogen kommen, 
könnte es zu Schrittverlusten kommen, weil die Taktimpulse nur 5µsec 
lang sind. Klar, sollte reichen um einen ISR auszulösen (das macht ja 
das Taktsignal), Richtungssignale auszuwerten, Bestromungsmuster zu 
generieren und auszugeben um dann gleich wieder startklar für den 
nächsten Takt zu sein.
Verlängere ich die Takte, sinkt meine max. Frequenz und damit die mögl. 
Verfahrgeschwindigkeit, will ich nicht. Im Moment hat der µC brav bis 
6m/min mitgespielt, das reicht allemal, der bediente aber auch nur die 
x-Achse. Wenn nun noch Y,Z und ggfs A mit dazukommt, könnte es eng 
werden.
Eine Hardware macht das getrennt und absolut synchron zum Steuerrechner, 
ein µC vielleicht auch, aber so'n Risiko-Crack bin ich dann eben auch 
nicht.
Es müssen nebenbei auch noch Signale für Spindel, Kühlung, 
Stromabsenkung bei Motorstillstand und Endschalter mit verarbeitet 
werden, mal sehen, was dabei rauskommt. Eine Überlegung war, alles auf 
Tiny26 zu verteilen, davon habe ich hier noch viele im Lager, nicht 
vornehm, aber eben auch zeitsynchron.
Vielen Dank mal bis hierhin & schönen Abend, harry
Gast #3657211
Lesenswert?

Harry Up schrieb:
> weil die Taktimpulse nur 5µsec
> lang sind. Klar, sollte reichen um einen ISR auszulösen

Wenn die Signale bekannt und zeitkritisch sind ist ein Polling Loop 
sinnvoller als über Interrupts. Dann ist die Latenz nämlich definiert 
und konstant. Der Polling Loop kann natürlich über einen Timer-Interrupt 
gesteuert werden.

Und klar hat ein CPLD deutlich weniger Latenz als jeder uC, im Bereich 
von ns

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren