aansturing 288 stappenmotoren ?

Hoi allemaal,

Voor een nieuw project dat ik net ben gestart, zoek ik een manier om 288 stappenmotoren aan te sturen. (de welbekende kleine 5V steppers met reductie op, 26BYJ-48 - trekken ongeveer 90 mA)

normaal kan ik 2 van die steppers op één ULN2803 aansluiten.
(een motor heeft één gemeenschappelijke voedingsdraad en 4 stuur-draden)
Nu, voor een stappenmotor heb ik dus 4 IO-pinnen van een MCU nodig,
wat in mijn geval op 1152 IO pinnen zou uitkomen !

Nu had ik al volgende 2 opties in gedachten:
- Een Arduino MEGA heeft 54 IO pinnen, als ik nu 12 stappenmotoren aansluit op één Arduino, dan heb ik 24 Mega's nodig. (komt dan nog mooi uit ook, heb namelijk 12 stappenmotoren in één rij zitten)
Overige pinnen kan ik gebruiken voor onderlinge communicatie met één master arduino ofzo.
(een Arduino Mega kost in China rond de 7 euro per stuk, dus die kosten zijn nog te overzien)

- ik heb nog enkele honderden PIC16F887A op voorraad. Rekening houdende dat ik nog een paar pinnen over moet houden voor communicatie met andere PICs, en er ook nog LEDs enzo moeten aangestuurd worden, zou ik 7 steppers kunnen aansluiten op één PIC.
Dit zou neerkomen op 42 PICs !

Voordeel van 1ste optie, is dat ik alles kant en klaar kan kopen.
Denk zelfs niet dat optie 2 goedkoper is, ik moet namelijk printjes gaan ontwerpen en laten maken. (ik frees normaal zelf m'n printen, maar door gezondheidsredenen zit dat er momenteel even niet in, de andere onderdelen van m'n project print ik gelukkig 3D)
Ook zijn er voor de arduino libs voorhanden om steppers en WS2812 LEDs aan te sturen, zodat ik zelf het wiel niet opnieuw hoef uit te vinden...

Zijn er nog andere opties om zo'n heleboel steppers aan te sturen ?
(ik moet ze namelijk wel allemaal gelijktijdig kunnen laten bewegen)

Ik heb nog wat tijd om over de sturing na te denken, het printen van alle onderdelen (bijna 6000), duurt op 2 3D printers - 24u/24u - namelijk best nog wel anderhalve maand ofzo.

groeten,
Kris

https://www.digitalplayground.be - Where fun meets technology ...
EricP

mét CE

Definieer 'gelijktijdig'. Als ze allemaal gelijktijdig hetzelfde moeten doen, dan zet je ze parallel. Maar dat is vast niet wat je bedoelt.

De aansturing is 1, maar je gelijktijdigheids-eis maakt het wat gecompliceerder. Daar zul je iets meer definitie aan moeten geven.

Stel je knoopt ze aan μC's of aan pic-dingen... Dan kun je een bus verzinnen met een protocol. Dat kan zijn 'motor x CW'. Of 'motor x y stappen CW'. Zodoende kan de 'controlling controller' het domme werk doen. Maar helemaal synchroon / gelijktijdig is het niet.
Een andere optie is dat je een set commando's voorbereid en je μC's of pic-dingen laat wachten op een 'go'. Dan kan het wel gelijktijdig, maar je hebt een set-up delay.

Als het allemaal niet zo kritisch is, kun je er ook nog een shift register-reeks voor gebruiken die je met een dikke kb aan data vol clockt voordat je een 'enable' geeft. Doe dat op 8 lijnen tegelijk, en dan heb je er niet eens zoveel achter elkaar zitten.

Veel hangt dus af van wat je precies aan eisen hebt hoe ingewikkeld je het wilt (moet) maken. Tevens of het een knutselproject is (en uren geen rol spelen) of dat het iets commercieels is en uren wel degelijk een rol spelen.

Ik denk dat je een stuk goedkoper uit bent als je een aantal shiftregisters in cascade zet.
De 74HC595 bijvoorbeeld.

zo kun je met een paar IO pennen op de controller vele outputs aansturen.
Elektor had er laatst ook een artikel over, als ik mij niet vergis om hiermee een parallel display aan te sturen.

In de bijlage een voorbeeldje.

RTFM, dan pas vragen...

Je zou nog kunnen denken aan een lang schuifregister om veel outputs te maken, zoals b.v. ook lichtkranten werken.

Ik heb het gevoel dat het simpeler is omdat het dan gewoon 144x dezelfde schakeling is met één dikke microcontroller om alles er in te duwen. Kom je snelheid te kort of is het handiger dan kun je er ook vier naast elkaar gebruiken zodat je de data voor de motoren er in één keer in kunt schuiven.

[edit] Te laat, maar we denken allen hetzelfde ;)

Mijn vrouw wil eigenlijk nieuwe verlichting boven onze eetkamertafel. Het wordt een vorm van 3D kinetic sculpture.
Gelukkig is ze "technisch" even gek als ik :-)
Misschien maakt een filmpje het iets duidelijker:

https://www.youtube.com/watch?v=ICixCazf6-k
(wel effe vooruit spoelen naar 01:00 en van daar beginnen kijken)

Het filmpje is trouwens versneld, maar ik denk dat ik ongeveer die snelheid wel kan halen IRL moet mijn systeempje.
(immers, het "wiel" waar de kabel op zit, heeft een diameter van 7 cm, wat betekend dat één omwenteling, de bal zo'n 22 cm verplaatst in de z-richting. anderhalve toer links en anderhalve toer rechts, zou een verplaatsing van 66 cm betekenen, meer dan genoeg, en ook meteen een reden om geen sleepringen te gebruiken voor de LEDs)

Uiteraard wordt onze display een stuk kleiner.
in de X-richting 12 ballen, in de Y-richting 24 ballen.
elk "blok" bestaat uit een bol van 7 cm diameter, terwijl het blok zelf 8x8 cm is. (totale afmetingen worden dus 96 x 192 cm)

Als ik het met de Arduino-oplossing zou doen:
- Die stepper lib, is "non-blocking", dus overige code wordt uitgevoerd, terwijl rustig data kan ingelezen worden.
- één arduino stuurt dus 12 motoren aan.
- ik heb 24 arduinos nodig (1 per Y-lijn)
- Ik kan vanop één hoofd-arduino, alle 24 arduinos tegelijk gaan bitbangen, op die manier blijven ze gemakkelijk sycroon.
- De slave-arduinos krijgen gewoon van elke stappenmotor de nieuwe Z-hoogte toegestuurd, intern in de Arduino wordt dan berekend hoeveel stappen elke motor moet maken.
- na die update, laat ik elke slave zich terugmelden naar de master, zodat de master "wacht" op het versturen van het volgende commando, tot alle slaves hun sequentie hebben afgewerkt.

Of zou ik toch maar voor die TPIC of 74HC595 gaan ?

groeten,
Kris

https://www.digitalplayground.be - Where fun meets technology ...

Ik zou een TPIC6B595 (Power Logic 8-Bit Shift Register) nemen, kan 150mA continue per uitgang aan. Voor de prijs hoef je het niet te laten, neem even contact met me op, heb nog een paar stangen liggen.

The TPIC6B595 device is a monolithic, high-voltage, medium-current power 8-bit shift register designed for use in systems that require relatively high load power. The device contains a built-in voltage clamp on the outputs for inductive transient protection, so it can also drive relays, solenoids, and other medium-current or high-voltage loads

http://www.ti.com/lit/ds/symlink/tpic6b595.pdf

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
elmowww

Golden Member

Klinkt uitdagend :) Ik zou voor de verdeelde oplossing gaan denk ik. (meerdere MCU`s).

Heb je nagedacht over je standby verbruik? Want 288 steppers stil laten hangen vraagt wel wat energie.

PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling

Een klassieke stepper driver als de polulu stepstick heeft maar 2 draadjes per motor nodig. Het enige is dat je 4, 5, 6 en 8 pins steppers hebt, en dat ie er maar 1 type niet kan aansturen.... De vijf pins, zoals de 26BYJ-nogwat. :-/

Wat mijn voorkeur zou hebben is iets met een modulaire aanpak. Dan is "een arduino per 12 motoren" 1 optie, een andere is om iets met schuifregisters te maken. Die Roland van Leusden chippies zijn dan nuttig. 2 motoren per chipje. 6 chipjes per module, 24 van die modules. En dan lekker simpel: alles op 1 microcontroller. Vraag is even: Kan je het kwa performance aan. Ik zou denken van wel: Die steppers willen helemaal niet zo heel vaak een stapje zien. Zeker als je onder de pull-in snelheid blijft, heb je zat aan op 1kHz die 1100 bitjes naar buiten schuiven. Doe dat op 8MHz met de SPI module en het zou in 10% van de tijd moeten kunnen. (worst case doe je gewoon in je timer routine iets met wacht tot vorige byte verstuurd, nieuwe byte er in, herhaal, busywaiting: voordat je de volgende byte hebt opgehaald, heb je maar iets van 16 cycles!)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

standby verbruik gaat meevallen.
De steppers gebruiken max 90 mA, met een 26A voeding red ik dat wel. Die steppers hebben ook een reductie-kast, dus als ze moeten
stil hangen, haal ik de stroom er gewoon af, verbruik in ruststand zal dus nul zijn :-)

Bedankt allemaal voor het meedenken, ik ga eens wat experimenteren denk ik :-)
"distributed computing" gaat volgens mij nog het snelst van al gaan. Anders krijgt die ene MCU het wel zwaar te verduren :-)
(constant posities berekenen en LEDs aansturen enz ...)

Jullie horen nog van me, zodra er wat te zien valt :-)

groeten,
Kris

https://www.digitalplayground.be - Where fun meets technology ...
Lambiek

Special Member

Hallo Kris, ten eerste hoe gaat het met je.

Wel een verschrikkelijk gaaf project moet ik zeggen.
Ik zou voor een stepstick gaan, daar zit ook een stroomregeling op. Met een ULN2803 kan het ook natuurlijk, maar dan heb je geen stroomregeling. Je zou dan nog iets met een weerstand kunnen doen in de voeding van de stappenmotor.

Vergis je niet in de aansturing van het geheel, iedere motor moet apart aangestuurd worden, en hoe meer motoren je aanstuurt hoe langzamer ze gaan draaien. Maar dat is een questie van uit proberen natuurlijk.

Misschien kan je hier nog iets uithalen.

Stappenmotorbesturing met Profilab en DRV8825.pdf

DRV8825 Stepstick.pdf

De pic heeft een serieel signaal nodig, hier komt het uit het Profilab programma, maar dat kan ook anders zijn natuurlijk.

Als je haar maar goed zit, GROETEN LAMBIEK.

Persoonlijk zou ik waarschijnlijk een FPGA nemen; afhankelijk van het type bordje heb je veel of heel veel I/O pinnen, en het genereren van het stappenpatroon en zo is natuurlijk heel simpel.

Als je voor full step drive gaat (altijd 2 fasen aan), wordt het patroon als volgt:

code:

1 1 0 0
0 1 1 0
0 0 1 1
1 0 0 1

Waarbij direct opvalt dat de 1ste uitgang altijd tegengesteld is aan de 3de, en de 2de tegengesteld aan de 4de. Als je inverterende drivers gebruikt (zoals de ULN2803D), kun je de ingang van de 3de en 4de driver dus aan de uitgang van de 1ste en 2de maken, zodat je elke motor met 2 I/O pinnen kunt besturen.

Dat kan natuurlijk ook met een microcontroller, maar het voordeel van een FPGA lijkt me dat het veel gemakkelijker is om redelijk hoge stapfrequenties te halen, en om verschillende motoren op verschillende snelheden te laten lopen, door een snellere interne clock per motor apart te delen. Met een microcontroller is het waarschijnlijk veel moeilijk om vrij hoge stapfrequenties te halen en tegelijkertijd de snelheid van elk motortje apart te kunnen regelen.

Je zou natuurlijk kunnen bekijken of je die motortjes kunt multiplexen, alsof het een LED matrix is; als je elk motortje een diode in serie geeft met zijn fase aansluitingen, en een vrijloopdiode naar zijn eigen middenaftakking, zou je er een aantal parallel kunnen schakelen met een set van 4 low-side MOSFETs per rij, en per kolom motortjes 1 high-side MOSFET. Door steeds een kolom te selecteren, en van alle motortjes die je wilt laten stappen de low-side MOSFETs aan te sturen, kun je met veel minder transistors en I/O pinnen toch een heleboel motoren aansturen. Hier heb je waarschijnlijk wel een FPGA voor nodig, met een microcontroller zou het wel eens lastig kunnen worden, maar het ligt er een beetje wat je maximale stapfrequentie moet zijn, en hoe nauwkeurig je de snelheid wilt kunnen varieren.

Als je wilt, heb ik nog wel ergens een Verilog projectje liggen waarmee meerdere stappenmotoren aanstuurd zouden worden op verschillende snelheden, al is dat, geloof ik, nooit verder getest van in de simulator.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Lambiek, Die stepsticks gaat dus niet werken als je niet alle 288 motortjes wil openschroeven (was het maar zo simpel!) om een baantje door te krassen. En netjes dicht willen ze dan ook niet meer. :-(

Sparky: Hoge stapfrequenties wordt het zowiezo niet. Die dingen gaan niet zo hard.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek

Special Member

Op 28 juli 2015 16:27:48 schreef rew:
Lambiek, Die stepsticks gaat dus niet werken als je niet alle 288 motortjes wil openschroeven (was het maar zo simpel!) om een baantje door te krassen. En netjes dicht willen ze dan ook niet meer. :-(

Die snap ik even niet rew? Of bedoel je daarmee dat hij al unipolaire motoren heeft?

EDIT:
Ik zie het al, het zijn unipolaire motoren (26BYJ-48) ja dan gaat een stepstick inderdaad niet op.

EDIT_1:
Zijn die motoren niet in bipolair te verkrijgen dan, anders zou het wel gaan met een stepstick.

Als je haar maar goed zit, GROETEN LAMBIEK.

Wat een cool project weer! :-)

Je idee van een berg Arduino mega's of PIC's te gebruiken lijkt mij ook het handigste. Divide et impera.

Het voordeel is dan ook dat je niet 1 controller hebt die timings moet genereren voor 288 stappenmotoren tegelijk (hoewel peanuts voor een FPGA). Je kan namelijk elke submodule de timings voor zijn eigen stappenmotoren laten maken. De master controller moet dan alleen maar "delegeren".

Bijvoorbeeld: de master controller stuurt een commando naar arduino mega nr 1: "beweeg stappenmotor 1 naar positie 200 in een tijd van 500ms, stappenmotor 2 naar positie 180, stappenmotor 3 naar ... ". De arduino mega kan dan zelfstandig de timings voor de motortjes gaan maken. In de master controller hou je een zee van CPU tijd over voor mooie animaties.

PS. hoeveel lawaai maakt dat, 288 stappenmotoren die tegelijk bewegen? Moet je niet microsteppen om het geluidsniveau wat acceptabel te houden?

@Lambiek, met mij gaat het ondertussen beter, bedankt voor het informeren.
De unipolaire stappenmotoren zijn al besteld. (tenminste, de eerst 30 zijn geleverd, en de volgende levering van 50 is onderweg - met zo'n aantallen kom je op minder dan 1 euro per motor uit) Ik durf ze niet allemaal tegelijk bestellen, dan worden ze zeker tegengehouden door de douane, en kan ik invoerrechten gaan betalen)
Stepsticks is dus inderdaad geen optie.

@ SparkyGSX , FGPA lijkt me beetje overkill, die dingen draaien max. 8 RPM :-) (en daarvoor is m'n FPGA kennis trouwens niet meer voldoende, allée, ben ooit intensief met FPGAs bezig geweest, maar is ook al weer enige jaren geleden, dit durf ik dus niet aan, ik wil dit project afgerond hebben voor Kerstmis)

Dat het een gaaf project is, daar zijn we het blijkbaar allemaal grotendeels over eens :-)

Heb ondertussen een ebay dealer gevonden die me complete ULN stuurprintjes kan leveren voor rond de 6 euro per 40 stuks. Voor die prijs kan ik niet zelf aan de slag gaan. En dan een paar Arduinos erbij, dan hoef ik dit jaar alvast geen printjes meer te frezen :-)
12 steppers op één Arduino, dat moet nog vlot te doen zijn qua snelheid enzo ...

Het meest "tijdrovend" is het printen van de "boxen". (288 boxen)
Ik kan ze per 2 printen, en rekening houdende dat ik nog moet gaan werken en ook moet slapen enzo, kom ik op 4 x2 boxen per dag om te printen. (5u per dubbele box, dus een job om 7u 's ochtends, een job starten tijdens het middageten (gelukkig woon ik kort bij m'n werk) - een job 's avonds starten, en een job voor het slapengaan starten) Komt uit op 36 dagen fulltime printen op één printer, alleen voor die boxen. (de rest van de onderdelen zijn met meerdere tegelijk te printen, volle plates, alsook véél sneller klaar)

groeten,
Kris

https://www.digitalplayground.be - Where fun meets technology ...
High met Henk

Special Member

ik zou een stepper naar bus verbinding doen

en dan denk ik aan RS485- achtig... Of DMX ofzo. en dan elke motor een eigen adres geven.... ja, hoop printjes, hoop werk, maar 100% modulair..

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???

8rpm aan de uitgaande as? Dat geeft dus 32 hele stappen * 64 = 2048 stappen per omwenteling, dus een stapfrequentie van 273Hz. Dat valt alles mee.

Daarmee lijkt het me dus juist weer mogelijk om het geheel te multiplexen, en het dus met veel minder transistors (of transistor arrays) en I/O pinnen te doen.

Aan de andere kant: 6 euro voor 40 (!) bordjes met ULN's erop?!? Ik wist dat Chinese meuk goedkoop was, maar dat is wel HEEL weinig. Daarmee kun je natuurlijk alsnog het trucje gebruiken dat ik eerder aanhaalde; ingang van driver 3 kan aan de uitgang van driver 1, en nummer 4 kan aan 2, zodat je nog maar 2 pinnen met motor nodig hebt. In combinatie met de lading PICs die je nog had liggen, samen op een SPI bus of zo, moet dat toch haalbaar zijn.

Hoe ga je het geheel van commando's voorzien? Via een PC of RasPi of zo?

Hoe ga je de positie van alle cubes vaststellen als het ding opgestart is?

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

het truukje met die pinnen van die ULN, ga ik zeker toepassen,
zo kan ik 4 stappenmotoren op één printje aansluiten :-)
(die ULNs hebben 8 Inputs/outputs hé)

Aansturing met een Arduino Mega met ESP8266 op.
Verder schrijf ik een HTML5 applicatie voor de iPad, zodat ik daarop animaties kan aanmaken en die animaties kan doorsturen naar de Mega.
Heb hier eventueel nog een paar Xmega's liggen, misschien gebruik ik die wel :-)

groeten,
Kris

https://www.digitalplayground.be - Where fun meets technology ...

zo een pak motoren stelt dat ook geen bijzondere eisen aan de voeding (ontstoring)?

mijn "natte vinger getal" voor "kale steppers" was 300 steps per sec, dus dat komt overeen.

Voor dit soort aantallen, zou ik toch veel liever 12 printjes voor 24 steppers hebben rondslingeren dan 288 van die ULN drivers. (evt "slechts" 144, als het je lukt om de andere 4 poorten op de ULN te gebruiken). Met een doorlooptijd van "best case" 36 dagen, heb je nog een paar weken de tijd om de printjes te ontwerpen en dan in china te laten maken.

Aargh... Voor op "posten" te drukken afgeleid: Heb effe een printje getekend. Per 5x5 printje 4 motoren. Modulair: click er twee aan mekaar en in 10x5 heb je 8 motoren. 5 draden naar je arduino. Of bijvoorbeeld een ARM als CPU. Dan zet je periodiek gewoon de SPI module aan het werk, die dan via DMA gewoon de 1152 bits naar buiten duwt (op 10MHz of nog meer.)

(die ULNs hebben 8 Inputs/outputs hé)

Ja, natuurlijk Nee zeven. D'r zit een 2003 op..... Maar die "stappenmotorsturing" printjes van de chinezen hebben maar vier aangesloten....

Verder snap ik niet hoe je op 4 per ULN printje ZOU kunnen komen: je hebt per motor twee stuursignalen, 2 inverters en 4 ULN poorten nodig, toch?

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Zat te denken hoe je het 0 punt gaat afregelen nadat de spanning is weggevallen, nog 288 contacten erbij?

LDmicro user.

Die goedkope bordjes hebben een ULN2003 met idd maar 4 poorten gebruikt zoals REW ook al stelde.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

En toch is het HEEL simpel om die steppermotoren om te zetten van Unipolar 5 draden naar Bipolar 4 draden zonder ze uit elkaar te halen.
Slechts het blauwe kapje open maken, baantje doorkrassen en klaar!
Zo aan te sluiten op polulu/stepstick.

Hier is een voorbeeld: https://www.youtube.com/watch?v=jHLyJbNgcDo

TonHek

Blauwe afdekplaatje evt. met klein drupje hotglue weer vastzetten.

[Edit]
@Kris hieronder.
Soms gaat het goed, soms ook niet. De eerste ging dus goed, na nog eens 288 287 motortjes heb je de smaak pas echt goed te pakken :-)
Lopende band werk van maken. Drie personen naast elkaar: openen, dremeltje, sluiten :+ .

The fastest way to succeed is to double your failure rate.

heb nog ergens 50 stepsticks liggen, toch eens proberen vanavond :-)
In't ergste geval heb ik één motor opgeofferd.

mijn bordjes hebben ULN2803 aan boord, en die hebben toch echt wel 8 Inputs/Outputs :-)

Nul-afregeling doe ik met 12 laser-diodes en BPW34 (zo uit het hoofd, geen idee of die juist is)
één laser-diode dedecteert een hele rij op X-as, ik laat 12 motoren van 1 Y-as de ballen "omhoog" bewegen, en als de laser-straal onderbroken wordt, stopt de motor met draaien, en keert die terug omlaag, tot die laserstraal net niet meer onderbroken is.
Zo heb ik dan 24x dit truukje te herhalen, één keer per complete Y-rij dus ...

EDIT: nu ik erover nadenk, ik denk toch dat ik best bij die ULN2803-oplossing blijf. Heb ik ook maar 2 IO-pinnen per motor nodig, en die ULN-oplossing is toch goedkoper dan zo'n heleboel stepsticks. (1 ULN per 4 motoren t.o.v. een stepstick per motor)

@Tonhek, deze middag even zo'n kleine stappenmotor geopend.
Zelfs geen hotglue nodig om terug te monteren :-) Kapje past er gewoon terug op, als je die clipjes met een klein schroevendraaiertje terug op hun plaats drukt ...

groeten,
Kris

[Bericht gewijzigd door ActiveHouse op woensdag 29 juli 2015 13:10:16 (11%)

https://www.digitalplayground.be - Where fun meets technology ...

Je kunt maar 2 motoren per ULN aansluiten; de INGANG van driver 3 en 4 sluit je aan op de UITGANG van driver 1 en 2. Je hebt dus alsnog 4 drivers per motor nodig, maar je hoeft alleen drivers 1 en 2 aan een I/O pin te hangen.

Het lijkt me wel een goed idee om dit toch even goed te testen, want de snelheid wordt wat beperkt; de uitgang van een driver is hoog (via de spoel van de motor) als die driver uit is en er geen stroom loopt terwijl de motor stilstaat. Als de motor wel draait, of de stroom door de spoel nog niet helemaal teruggevallen is naar 0, kan het signaal ook hoog zijn.

Ik bedenk nu trouwens dat de motor, als je hem eerst op 2 spoelen bekrachtigd, tussen 2 volledige stappen in staat, en maar waarschijnlijk terugvalt naar een van beide (hopelijk de juiste) zodra je hem stroomloos maakt.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken