heb goede en beproefde unipolaire motorsturing.Schema in orcad 3.2 en pcb in layo1.Schema omgezet naar pdf ,voor iedereen leesbaar maar hoe krijg ik dit op deze site als bijlage ?
ludo
"Ik ben al heel wat jaren op mijn eentje bezig en probreer eigenlijk alles zelf te doen ,machine ,electronica,programmeren.
Mijn oude freesprogramma's werkte met DOS en het aansturen van de printerpoort was toen geen enkel probleem.Met windows kreeg ik het niet meer gedaan, de motors draaide met schokjes.Om dit op te lossen was mijn kennis onvoldoende,daarom ben ik maar overgeschakeld naar de seriele poort. Waaruit het volgende is ontstaan.
De controller 2313 ontvangt data van de PC en zet deze data om in klokpulsen en richting voor X,Y en Zas.Voor elke as is een eindtrap L297 nodig .
Het programma XY_algor1 is de broncode voor de controller.
Om deze schakeling te kunnen gebruiken moet U wel een programma hebben ,een voorbeeld met broncode in VB6 is win_frees.In dit programma heb ik een zeer eenvoudig 3D algoritme ontwikkeld.Hoe dit algoritme werkt zal ik later wel uitleggen.
De mircocontroller krijgt volgende info binnen:
1°.aantal stappen grootste afstand.
2°.toename1
3°.toename2
4°.resetbyte (met dit byte wordt ook de spindle motor in/uit geschakeld)
5°.grootste (1,2 of 3)
6°.Snelheid
7°.versnelling/vertraging
8°.Controlekarakter
Als de contoller deze info heeft ontvangen ,stuurt hij een "A" terug,De PC kan nu volgende coordinaten berekenen.
De microcontroller zal nu de stappenmotors X,Y en Z besturen .Als de bewerking gedaan is stuurt de controller een "R" naar de PC ,deze zend dan volgende data.
Als men de parallelpoort wenst te gebruiken (voor een ander programma bv) wordt met een omschakelaar P2 aan massa P4 gelegd,voor de seriele poort is dit P3.
Ik hoop dat deze korte uitleg enig licht werpt op de bedoeling."
Voor plotters gebruikte ik vroeger het Bresenham algoritme ,dit algoritme is vrijwel door iedereen gekend.
Toen ik met CNC begon bleek dat het Bresenham algoritme voor 3D te ingewikkeld was voor mij,daarom ben ik eens gaan nadenken of het niet eenvoudiger kon,ziehier mijn idee.
We gaan uit van een eenvoudig voorbeeld .
We nemen aan dat X=11 en Y=4 stappen.
Dus voor elke stap van de X motor moet de Ymotor 4/11 stap doen of 0.36363636.
Omdat de motoren alleen maar volle stappen kunnen doen ,zal de Ymotor moeten wachten totdat de Y-waarde groter of gelijk is aan 11/11.
In plaats van met een breuk te werken kunnen we gewoon Y telkens met 4 verhogen totdat Y_totaal >= 11
Als we dit nu even in een tabel zetten krijgen we het volgende.
Stap Xmotor Y_totaal Ymotor
1 1 4 0
2 2 4+4=8 0
3 3 12 1 y_totaal=Y_totaal-11= 1
4 4 1+4=5 0
5 5 9 0
6 6 13 1 Y_totaal=Y_totaal-11=2
7 7 6 0
8 8 10 0
9 9 14 1 Y_totaal=Y_totaal-11=3
10 10 7 0
11 11 11 1 Y_totaal=Y_totaal-11=0
X=11 Y=4 totaal
Om te testen of het werkte heb ik in een testprogramma alle mogelijke combinaties van x y en z laten uitvoeren.
Het algoritme werkt met een microcontroller,maar er is toch nog teveel rekenwerk,daarom wordt alles omgezet naar 16 of 24 bit
men moet dan enkel maar de carry vlag in de gaten houden. Als de carry vlag wordt gezet dan moet desbetreffende motor een stap doen.
De berekening van Y_totaal=Y_totaal-x is niet nodig omdat na de carry automatisch de rest overblijft.
Omdat we de controller aansturen via de seriele poort voert de PC de berekeningen uit.
We krijgen dan volgende psuedoVB code .Zoek eerst de grootste waarde .
Als X=grootste
Stap=x
Grootste=1
Inc1=((y_stappen/x_stappen) * 65535 ) +0.5
Inc2=((z_stappen/x_stappen) * 65535 ) +0.5
Als Y=grootste:
Stap=y
Grootste=2
Inc1=((x_stappen/y_stappen) * 65535 ) +0.5
Inc2=((z_stappen/y_stappen) * 65535 ) +0.5
Als Z=grootste:
Stap=z
Grootste=3
Inc1=((x_stappen/z_stappen) * 65535 ) +0.5
Inc2=((y_stappen/z_stappen) * 65535 ) +0.5
Zend via RS232 naar controller :
Zend=str(stap)+ str(inc1)+str(inc2)+grootste
Voor de microcontroller krijgen we volgend stukje code
Lus_Stappen:
Stap motor1
Totaal_1= totaal1+inc1
If carry set then stap motor 2 ‘wordt bepaald door vb routine!
Totaal2=totaal2+inc2
If carry set then stap motor 3 ‘wordt bepaald door vb routine!
Totaal=totaal-1
If totaal<>0 then goto Lus_Stappen
Zoals U ziet is het zeer eenvoudig.De volledige code is voor een AT90S2313 en is gedeeltelijk
in bascom en assembly gemaakt. Het program heet XY_algor1."
Ik ben met iets soortgelijks bezig. Ik zal binnenkort eens kijken wat je allemaal hebt ontwopren.
Waarom is 'ludo' zelf geen lid van het forum?
Ludo is zelf ook lid van het forum, maar had geen mogelijkheid de files te hosten. Dat heb ik voor hem gedaan en hier geplaatst. Ludo heeft daarna nog wat aanvullende info gestuurd wat ik er ook bij heb geplaatst.
Je kunt Ludo gewoon een PM of een e-mail sturen, zie de gebruikerslijst.