Forum: Mikrocontroller und Digitale Elektronik Logikcracks gefragt! Job für µC oder Logik-Ic? Schrittmotor ansteuern


von Harry U. (harryup)


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

von Falk B. (falk)


Lesenswert?

Ist ein einfacher Zähler, wenn gleich in einer "komischen" Zählfolge. 
Ein Mehrfach FlipFlop ala 74HC273 und ein paar NAND, NOR, INverter, 
fertig ist die Laube.

Hier ist der prinzipielle Ablauf.

Beitrag "Re: pulse direction signal zu encoder a b?"

von Easylife (Gast)


Lesenswert?

bist du sicher, dass der 4. wert nicht
110
heissen muss?

von Easylife (Gast)


Lesenswert?

bin fast sicher es gibt fuer sowas 1-chip loesungen.
ansonsten:
- up/down counter
- 3x 8:1 mux

von Easylife (Gast)


Lesenswert?


von R. F. (rfr)


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.

von Harry U. (harryup)


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

von Possetitjel (Gast)


Lesenswert?

Harry Up schrieb:

> Ich denke, mit einem kleinen AVR ist das kein Thema, lieber
> wäre mir aber eine Hardwarelösung,

Lösung ist immer gut. Für welches Problem eigentlich?

Kombinatorische Kode-Umsetzung?
Fünfachs-Fräsmaschine?

von Possetitjel (Gast)


Lesenswert?

Harry Up schrieb:

> und klar, die Zählfolge mutet bissl eigenartig an, hab
> keine Idee, wie man auf sowas kommt.

Nun ja, das ist im Prinzip ein Schieberegister.

Am verblüffendsten finde ich, dass es sich offenbar um einen
3-Strang-Schrittmotor handelt.

von Chr. M. (snowfly)


Lesenswert?

Harry Up schrieb:
> hab keine Idee, wie
> man auf sowas kommt.

Könnte es sowas sein?
http://de.wikipedia.org/wiki/Gray-Code

von Sascha W. (arno_nyhm)


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.

von Lothar (Gast)


Lesenswert?

Harry Up schrieb:
> lieber wäre mir aber eine Hardwarelösung,
> sofern die mit irgendeinem Logik-Ic zu machen

Anstatt Digitalschaltung würde es natürlich auch ein kleines CPLD tun:

XC9572 5V 44 pins 2 EUR

XC2C64 3.3V 44 pins 2 EUR

Aber immer noch teurer als ein kleiner uC ...

von Harry U. (harryup)


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

von Harry U. (harryup)


Lesenswert?

ah, noch einer: geht nicht um's Geld dabei, soll morgen (heute) laufen 
:)

von Max H. (hartl192)


Angehängte Dateien:

Lesenswert?

Ich hab mal die Übergangsfunktionen minimiert. Ich hoffe ich habe keinen 
Fehler eingebaut.
Das Ganze könnte man dann mit drei D-Flipflops und ein paar Gattern 
umsetzten.

: Bearbeitet durch User
von Easylife (Gast)


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

von Easylife (Gast)


Lesenswert?

Harry Up schrieb:
> ah, noch einer: geht nicht um's Geld dabei, soll morgen (heute) laufen
> :)

Na, dann beauftrage doch einfach jemanden, der dir das in einen CPLD 
programmiert.

10 Zeilen Verilog und fertig.

von c-hater (Gast)


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

von Stefan Noack (Gast)


Lesenswert?

Man kann das auch mit einem Schieberegister mit parallelem Ausgang 
hinbekommen:
1
+-----------------------------+
2
|                             |
3
+=>[ 1 | 1 | 1 | 0 | 0 | 0 ]--+
4
     |       |       |
5
     V       V       V
6
    (A)     (B)     (C)

von Matthias L. (Gast)


Lesenswert?

In der Lehre nannten wir sowas Zählersynthese. Da baust Du Dir aus D 
oder JK-Flipflops Deinen eigenen Zähler, der genauso zähjlt wiwe Du 
brauchst.

von Klaus (Gast)


Lesenswert?

Um eine Tabelle mit 8 3-Bitwerten auszugeben, sollte man sich am besten 
einen Full Custom Chip bauen lassen. Intern am besten eine Quad-Core 
CPU, damits richtig metert

MfG Klaus

von MaWin (Gast)


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

von Harry U. (harryup)


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

von Easylife (Gast)


Angehängte Dateien:

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.

von Kein_Idiot (Gast)


Lesenswert?

ES gibt immer Idioten die einem die Arbeit scheinbar abnehmen.....

von karlchen-m (Gast)


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

von Harry U. (harryup)


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

von Easylife (Gast)


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.

von Easylife (Gast)


Angehängte Dateien:

Lesenswert?

Noch schöner wird's dann doch mit 3-fach ORs statt der Dioden, die den 
Pegel unschön werden lassen. Ist vermutlich auch weniger Lötarbeit.

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Harry U. (harryup)


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

von Lothar (Gast)


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

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.