STEP/DIR vezérlés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

STEP/DIR vezérlés

Hozzászólás Szerző: gerry »

Üdv!

Akkor ide írom. :)

Oly sokat hallani és olvasni elektronikai fórumokon hobbycnc gépekről.
De ez az, hogy csak olvasgatni lehet, mert aki épít is az megörzi a titkát, vagy jó pénzért árusítja.
Arra gondoltam , hogy ki kellene fejleszteni Bascomban egy programot amellyel léptetőmotort lehet vezérelni Step/Dir üzemmódban.
Emlékeimben kutatgattam :) és találtam is stepmotor vezérlőt, még a C64-es korszakomból, ami step/dir üzemmódban vezérelt (SAA1027).
De mivel már nem nagyon lehet kapni, arra gondoltam megírom a programot ami leszimulálja a vezérlést. De mivel a programozási szintem megragadt a ledek és LCD-k vezérlésénél és infrajelek dekódolásánál, a ti segítségeteket kérném.

Müködése a dolognak annyira egyszerű, hogy egyszerübb már nem is lehetne, csak sajna az én szellemi szintemet meghaladja.
Adott a PWM jel, ami frekvenciában növekszik, csökken, illetve teljesen leáll és adott egy "DIR" vezérlő láb amely "H" vagy "L" szinten van attól függően, merre forog a motor, "L" egyik irány "H" másik irány.
A motor a PWM jel "H" szintjére lép egyet sttól függően, hogy a "DIR" milyen szinten van . ÉS van amikor a PWM leáll akkor az adott pontban a motor megáll és elkezdi rezegtetni a motor tekercsét, tehát nem adja ki állandóan a feszültséget, mint forgás közben, mert leégetné a motort. <-- Ez sztem a legkomplikáltabb rész.


Ja és a motort half-step-ben kellene működtetni.

Addig eljutottam a konfigurálásokon túl, hogy a motort tudom forgatni PWM jellel ,de csak egy irányban. Már csak a forgásirány és a rezegtetést kellene beépíteni, de nem tom. Mert ha int megszakítást használom a PWM felfutó élére, akkor hogyan fogja venni a Dir parancsot, azt is tegyem megszakításba?

Na ebben kérném a programozózsenik segítségét.

üdv
Robert-

Hozzászólás Szerző: Robert- »

Ez alkatrésztemető.
A hobbyCNC oldalon van fenn egy pár jó anyag. Amire jutottam:
- önállóan alkatrésztemetőként megépíteni olcsóbb (1/2 ár) mint félvezetőICként megvenni. Viszont IC oldalról barominagy szívás mindent leprogramozni.

Ami járható út: Rádiótechnika 1994/11 544-547. oldal. Itt az alapok nagyon jól le vannak írva. Illetve: Googleban a "Stepper motor basic"-ra keress rá. Jó irodalmat ad. Az első találat végén ott van a vezérlési tábla.

A féllépéses ill a teljes lépéses mód is. Semmi extra....



A step/DIR elv inkább kontrollerICkhez kifejlesztett. Nézd meg az L297/L298 IC párost. Az adatlapjukban minden benne van. Az ST gyártó AN470 adatlapja "The L297 Stepper motor controller" néven fut. Itt teljes belső szerkezet, működési leírás ott van.

A PWMet felejtsd el első körben. Szoftveresen lépegettesd. A PWM négyszögjelet jelent csak...


A programkérdésedre visszaérve (kóddal/kódrészlettel elölréb lennénk...):
Az INTen belül a láb állapotát a Pina.7 (A.7-es láb) le tudod kérdezni. Innen az INTen belül meg van a DIR irányjeled is....
Robert-

Hozzászólás Szerző: Robert- »

Lásd milyen vagyok:

AVRre leírás (ASM) + alapelvek
http://www.atmel.com/dyn/resources/prod ... OC3045.PDF

Mindenféle:
http://www.galilmc.com/training/webconf.html

Motorvezérlés, adatlap, leírás, firmware és minden egyéb:
http://www.bright.net/~agarb/STMD/AVR_STMD.html

Nagy gyűjtemény, AVR is van benne:
http://www.eio.com/public/stepper/

Időzítések:
http://www.elecdesign.com/Articles/Inde ... cleID=5842

Sokminden, stepper is:
http://www.interq.or.jp/japan/se-inoue/e_menu.htm


Itt PICre van némi infó:
http://www.mastincrosbie.com/mark/electronics.html
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Üdv!

Szép lassan halad a project, de azért halad.
Programrészletet, még nem igen írnák le, csak ha már végkép nem megy a dolog, ami sztem szép lassan el is következik, de még küzdök rendesen.

A következő lenne a problémám.
Sikeresen galyra jettem egy 90s2313-at, valami feszt nem odatettem ahova kell, pótoltam tiny2313-mal, de ez már már kiborít.
Sikeresen átégettem a programot, de a t2313 megzavarodik, lefagy vagy nem tom mit csinál. Rendesen fut a program, gombnyomásra lépeget a motor, és egyszercsak leáll, lefagy, csak reset után hajlandó elindulni.
(minek kell átvariállni egy jól müködő mikrokontrollert?(gyártónak)).
A lényeg, hogy az int0 használom a STEP lábként. (ami egyben PWM jel is)
Azért PWM mert a cnc program tudja lassabban-gyorsabban is vezérelni a step motorokat, attól függően milyen frekvencián STEPelget. :)
A legnagyobb gondot a DIR(forgásirány) okozza majd, mert a "megszakításban nincs megszakítás". Ha úgy oldanám meg, hogy a forgásirányt, hogy a DIR láb állapotát figyelném H vagy L és ha magas szintre ugrik, akkor kikapcsolnám az interrupot utána egy másik programrészre ugranék ahol a számolás visszavele történik, majd interrupt enable és megint venné az int0-ról a Step-jelet és ugyanígy vissza, ez működhet? Ezt ki is próbálom, ha hazaértem .

Megnéztem ezt a rotare right/left utasítást, de egyszerübbnek látom egy Data sorban megadni a port bitjeinek állapotát, majd azt visszaolvastatni egy Portb=X(c)-vel. A "c" értéket léptetve változik a portb állapota.

Ha mondjuk 4Mhz-n járatom a tiny2313-at és 2 másodperc időt szeretnék késleltetni egy Do-Loop ciklusban akkor az "A" értéke mennyi kell legyen?

Do
A=A+1
if A=xxxxxxxx then Call Rezgés
Loop

köszi
Robert-

Hozzászólás Szerző: Robert- »

A T2313 a 90S2313-l felülről kompatibilis.
Különbségek:
- A DIV8 biztosítékbit ne legyen bekapcsolva.
- Külső órajlforrás/kvarc/ esetén a minőségre érzékenyebb, mint a 90S2313. A 90S 4Vcs-cs, míg a T2313 0,1V kilengést visz. ezt valamelyik biztosítékbittel lehet megnövelni.
- A chipre a 10-20 lábak közé 100nF kerámia kell.
- BOD 2.7Vra vagy egyáltalán ne legyen bekapcsolva.


A T2313 eléggés stabil, a 90Shez képest különösképp. Gyártástechnológia és tudás változott, de a kompatibilitás megmaradt. Kb 10-15 programom fut ami 90Sre íródott, és most már T2313ban futkorászik. A HEX file ugyanaz:)..

A kvarc mellett ne menjen nagyáramú vezeték, mert keresztbe indukálhat. A kapcsolásban lehet valami bibi.

Az INT kilépés után bele a másikba nem túl szerencsés. Nem igazán jó üzemszerű állapot. A legbiztosabb, ha a láb állapotát a PINPort.Láb paraméterrel lekérdezed. Minek ehhez újabb INT.

2 másodperc késleltetés:

Kód: Egész kijelölése

wait 2
[code]

De ezeket az INT felfüggeszti!


A Mintádban a Call rezetés ideje nem ismert.... Így nem lehet wait-ra értéket adni...
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Szia Robi!

Írtam egy kezdetleges programot egy külső PWM-ről léptetett steppmotorhoz.

$regfile = "ATtiny2313.dat"
$crystal = 10700000

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Byte
Dim X(4) As Byte

Config Portb = Output
Config Pind.2 = Input
Config Int0 = Rising

Restore Program
For B = 1 To 4
Read X(b)
Next

On Int0 Stepper
Enable Interrupts
Enable Int0


Do
If C = 4 Then C = 0
Loop


Program:
Data 1 , 2 , 4 , 8

Stepper:
C = C + 1
Portb = X(c)
Return

Ezzel a programmal tudom egyik irányba léptetni a motort külső PWM-ről, amit egy 555-ös icből építettem. Alapban 200khz-en ketyeg, de tudom növelni 500-ig és a motor is tudja követni egy darabig :) . Természetesen a CNC progik nem ilyen gyorsan vezérelnek, csak úgy 50khz-ig asszem. De legalább működik.


CNC vezérlőprogi úgy működik, hogy elször kiválasztja a forgási irányt "L" vagy "H" és utána kezdi meg a léptetést.

Az lenne a kérdésem, hogy hogyan lehetne egy forgásirányt beépíteni ebbe a programocskába?

köszi!

Amúgy megnéztem az L297-8 párost és elég jóknak tűnnek és az ára is elérhető mindkettőnek.

köszi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Stepper:
C = C + 1
Portb = X(c)
Return

Ezt a részt átszabva:
A prg elején:
portd.1 a bemenet (Dir)
condig portd.1=input
portd.1=1 'felhuzoellenallas....

Es a stepper resz:
Stepper:
if pind.1=0 then
C = C + 1
else
C = C - 1
End if
Portb = X(c)
Return
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Üdv Robi!

Kijavítottam a programot a fentebb leírtakkal és teljesen jól müködik. Kiegészitettem még két sorral, hogy ne számoljon a végtelenségig.

Azért nem mertem belenyúlni annyira a megszakitás rutinba, mert írtad, hogy mindig törekedjünk arra, hogy a megszakítás legyen rövid, tömör, stb... Aztán rájöttem, hogy a föprogramban úgy sem csinál semmit a program (Do-Loop). ezért miért ne lehetne kibővíteni a megszakítás részt.

Mivel a program így tökéletesen működik, ezzel felvet újjabb problémákat, amiket próbálok megoldani, de nehezen jutok egyről a kettőre.

Problémám a következő: Szeretném a CNC végállásait szoftveresen megoldani. Erre fel is áldoznék két portot (Pind.0 és 3). Azt szeretném elérni, hogy ha pind.0 értéke "L" akkor megálljon a program ha egyik irányba számlál, de ettől még ha pind.1 értéke megváltozik, akkor visszavele elinduljon. Probáltam "if"-ekkel kikapuzni, "stoppal" megállítani a programot, de ha stoppal állítottam meg nem indult el, ha meg a végállásokra adtam egy "return" parancsot, ami a megszakításból visszalépést jelent, akkor visszalépett és meg is állt a program, de a forgásirány váltásra nem indult el, mivel mindig visszalépés volt a parancs a végállás miatt.

Az IF-THEN-ELSE utasításban sem találtam olyan kitételt és "parancsot", hogy "AND" "OR" ,mint a C64-ben. Létezik ilyen kitétel? . Ezzel talán közelebb lennék a megoldáshoz.

köszi

üdv

$regfile = "ATtiny2313.dat"
$crystal = 10700000

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Byte
Dim X(4) As Byte

Config Portb = Output
Config Pind.0 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Int0 = Rising

Restore Program
For B = 0 To 3
Read X(b)
Next

On Int0 Stepper
Enable Interrupts
Enable Int0

Do

Loop

Program:
Data 1 , 2 , 4 , 8

if pind.1=0 then
C = C + 1
else
C = C - 1
End if
if c > 3 then c = 0
If c < 0 then c = 3
Portb = X(c)
Return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

if a=1 and b=2 then....
Az igy nez ki:

Kód: Egész kijelölése

if a =1 then
    if b=2 then
    .
    .
    end if
end if

Az OR esetén a lefuttatatndó kódnak 2x kell szerelepnie.



Azaz ha eleri a veget es ujabb step-et kap, akkor mintha a DIR megfordulna? En nem epitenek bele ilyet. Ezzel csak azta hamis latszatot kelted, hogy még lépked.

Amit én alkalmazok (majd) beépítésre:
http://www.avrprojects.net/articles.php?lng=en&pg=65

Csak két-két ULN kaput összekötök, így 1A-ig terhelhető.
A végálláskapcsolóban simán az történik, hogy a léptetés előtt levizsgálom, hogy aktív e a láb vagy sem. Ha nem, akkor simán lenyeli az utasítást. Ha meg nincs a végén, léphet.
És optokaput karok a végére, mert az kevésbé koszolódik, és a prall jelenséggel sem kell számolni.
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Üdv!

Elkezdtem nyákba ültetni a vezérlőmet, néhány kép róla.

Kép

Meg még egy!

http://img485.imageshack.us/my.php?image=controlfk9.jpg

Nem mérek áramot, meg valóban lépett e. Azt majd a dc motorosnál. Kezdem kapizsgálni a müködését a dc motorosnak. Kell a motortengely végére egy enkóder tárcsa (legalábbis így nevezik). A vezérlés maradna step/dir csak éppen a pc-ből jövő adatot a proci úgy értékelné, hogy iránymeghatározás(dir) utána leméri a steppet mennyi impulzus(fordítás) kiadja a motorra a megfelelő polaritásu dc feszt és elkezdi mérni az enkóderből visszajövő impulzust, és leállítja a forgást, ha ez megvan. Persze a megállás után még forog a motor, namost ide képzelek egy mánesféket, vagy akár ellenáramu fékezés is lehetne egy impulzussal, lenne biztos 1-2-3-4Amper :). De ez csak az én feltevésem lehet nem is így működik.

üdv
A hozzászólást 1 alkalommal szerkesztették, utoljára gerry 2006. november 29. szerda, 19:30-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Amiket olvastam: Ugye PC vezérel. Itt ami kritikus, hogy az LPT porton át jön a jel. Ez meg lassú! Azaz a Step/Dir esetén nehézkes kezelni... Viszont így a soroson jó ha vissza tud jönni, hogy _tényleg_ mennyit lépett...

Az elkóder+tárcsára 5-10eFt induló és csillagoség végső árat láttam. A mechanikus kivitel meg elkopik:(.

A DC motorok áramerőssége télleg szép nagy. A végpont előtt szoktakl vagy ellenütemű vezérlést adni neki (megrántja a gépet), vagy lassítás-gyorsítás szakaszokra bontják a mozgatást. ez barátságosabb, viszont sokkommutatoros motort igényel. Azzaz folyamatosan kaphasson vezérlést és a felvett áram ne nagyon függjön az elhelyezkedéstől (fordulattól).

Az álló helyzetben is jó ha van tartása a rendszernek. Erre a léptetőmotorok jók, mert fesz alatt tartod őket, és meg van oldva. Ez viszont a DC motoroknál hiányzik!

Nálam a fejlesztés ezért megy az inkább lassabb, de stabilabban pozícionálható léptetőmotoros vezérlés felé. Meg 12V-1A-es motorok beszerezhetőbbek. (Unipoláris esetben ez egy db. ULN2308A meghajtóchipet jelent, 2-2 csatornát összefogva). Igaz kell külső dióda hozzá!
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Meg 12V-1A-es motorok beszerezhetőbbek. (Unipoláris esetben ez egy db. ULN2308A meghajtóchipet jelent, 2-2 csatornát összefogva). Igaz kell külső dióda hozzá!
Kell ám biza. Nekem is jobb létre szenderült egy ULN, mert nem raktam diódát :(
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az ULNekben van belül védődióda - elvileg. Viszont apróbetű alul, két oldallal később, hogy a reverse voltage max. 50V lehet! Ezt meg egy kisebb relé/szelep lazán tudja:(. A paneleken a biztos ha betervezem, és beültetődik (én 400x-et rakok általában, de láttam már 4148-at is...).

Most a léptetővezérlésen tesztelem az ULN chipeket... A Floppymotorok csak bírják:).
Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

Hozzászólás Szerző: gerry »

Robert írta:Az ULNekben van belül védődióda - elvileg. Viszont apróbetű alul, két oldallal később, hogy a reverse voltage max. 50V lehet! Ezt meg egy kisebb relé/szelep lazán tudja:(. A paneleken a biztos ha betervezem, és beültetődik (én 400x-et rakok általában, de láttam már 4148-at is...).

Most a léptetővezérlésen tesztelem az ULN chipeket... A Floppymotorok csak bírják:).
hááát, nekem pont a nagyfloppymotor verte ki az uln chipet, igaz csak 1,et raktam rá és lefogtam a motort is, hogy mekkora a nyomatéka 12v-on :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Egy csatorna 0,5A-t tud. Nálam kettesével vannak. És az ULN chip foglalatban:). Készültem....
Válasz küldése