PICAXE a krokové motory

pgerla
Příspěvky: 400
Registrován: 11 dub 2013, 00:17

Re: PICAXE a krokové motory

Příspěvek od pgerla »

Nerozumí asi hlavní myšlence ...
Když vynechám konkrétní driver i mikroky tak mi zůstane signál DIR / STEP / Enable a motor NEMA23 (400 kroků na otočku).

Tedy proč používáte na generování STEP ... pin s PWM?
Jak chcete zastavit motor po 3 otáčkách (1200 kroků) pomocí časové konstanty?
Přepočítávat 1200 kroku na xyz mikrosekund po které bude proce PWM zapnuto?
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Problém je v tom, že když pustím do toho motoru plné kroky, pohybuje se poměrně „trhaně“. Musím proto mít nastavené ty mikrokroky a na jednu otočku tam pustit 200x16 kroků tj. 3200 pulsů. Samozřejmě by bylo pro mě jednodušší pustit tam přesný počet pulsů, spočítané třeba ve smyčce for-next, ale to se motor točí příliš pomalu. Těch 3,13kHz jak tu spočítal JRT dá jen cca 1otáčku za vteřinu.
Pokud využiji to PWM není problém se dostat na těch požadovaných 10kHz. Jiný příkaz jak se dostat na tu frekvenci u 20M2 bohužel neznám. :(
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Tak jsem se opět zasekl :cry:
Program je již skoro hotový a mě se hodně zkomplikovalo to odměřování ujeté dráhy. Celé by to mělo pohánět slider - pojezd na fotoaparát. Nacpal jsem tam možnost nastavovat plynulé rozjezdy, brždění, maximální rychlosti... a to jsou všechno věci, díky kterým je spočítat ujetou vzdálenost pomocí nastaveného času takřka nemožné. Neexistuje nějaká možnost jak počítat jednotlivé pulzy? Představuji si to zjednodušeně tak, že bych signál z PWM posílal na vstup, jednotlivé pulzy z něj bych sčítal a při dosažení hodnoty která by byla daná podle požadované ujeté dráhy, by byl vyslán povel na zastavení. Předpokládám, že by na to musel být vyčleněný samostatný procesor, ale nenalezl jsem programovací příkaz který by tohle řešil. To PWM mi posílá pulzy o frekvenci cca 10kHz. Co se týká celkové požadované přesnosti, tak na nějakém tom mm +/- zase nezáleží.
Pokud by vás napadlo i jiné řešení, tak se mu samozřejmě bránit nebudu.
Ještě ukázka toho plynulého rozjezdu. Obdobně je řešeno zastavení a mezi nimi to pak běží na těch maximálních otáčkách.

Kód: Vybrat vše

;plynulý rozjezd
start:							
setfreq m16
pwmout pwmdiv16, C.5,0,0
read 6,b12				;b12 určuje maximální rychlost a je cca 17
for b0= 255 to b12 step -1
let w2=b0*2 				
pwmout pwmdiv16, C.5,b0,w2
read 7,b13				;b13 určuje čas po který se motor zrychluje z min. na max.
pause b13	
next
Milops3
Příspěvky: 51
Registrován: 09 kvě 2013, 20:51

Re: PICAXE a krokové motory

Příspěvek od Milops3 »

vystup pwm pripojit na vstup timeru a pocitat pulzy
pridelat optickou signalizaci na tocici se casti
pouzit cidlo z opticke mysi a cist vzdalenost
magneticke pasky (jako elektronicka suplera)
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Milops3 píše:vystup pwm pripojit na vstup timeru a pocitat pulzy
Mohl by jsi to prosím tě trochu rozvést?
Jak to sčítat? Bude to těch cca 10kHz stíhat?
Ty další varianty bych zatím nechal na později.
Milops3
Příspěvky: 51
Registrován: 09 kvě 2013, 20:51

Re: PICAXE a krokové motory

Příspěvek od Milops3 »

nastavis si timer na externi zdroj (jako externi zdroj pouzijes to pwm) pak uz jen bedes cist ten timer, muzes si i nastavit preddelicku..
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Jestli jsem tě dobře pochopil, měl bych využít příkaz SETTIMER COUNT preload ?
Tady http://www.picaxe.cz/wp-content/uploads/Settimer.pdf
jsem se ale dočetl že není podporován na tom mém 20X2 :(
Takže sehnat jiný procesor?

Zatím jsem zkoušel " prošlapat slepou uličku" s tím časovým nastavením.
Tenhle kód dokáže krokový motor pootočit při jednom kroku o 1/3 otáčky nezávisle na tom, jaká je nastavená rychlost otáčení. Na slideru bude šroub se stoupáním 3mm, takže co krok to 1mm. Je tam nějaká nepřesnost, ale pohybuje se v řádu jednotek pulzů, což je pro dané použití zanedbatelné. Teď ještě nějak doladit ty rozjezdy a brždění. :roll:

Kód: Vybrat vše

;picaxe 20X2 driver nastaven na 16 mikrokroků.
						
setfreq m16
pwmout pwmdiv16, C.5,0,0
otacky:
readadc C.2,b0	;nastavení rychlosti otáčení 
let w2=b0*2 
let w3= b0+1*83/10;w3 = cca 1/3otáčky = 1mm dráhy 
let b1=b0/40	;korekce na upřesnění 1/3 otáčky 	
let w3=w3+b1	;korekce na upřesnění 1/3 1otáčky 
pwmout pwmdiv16, C.5,b0,w2
pause w3
gosub pause1
goto otacky
	
pause1:		;kontrolní zastavení
pwmout pwmdiv16, C.5,0,0
pause 1000
return
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Projekt byl snad zdárně dokončen: http://www.jova1.cz/ostatni/slider/slider.htm
Nakonec jsem tam nechal to odměřování pomocí času. Pro tohle použití to doufám nebude na závadu.
20X2 mám, tak budu ještě zkoušet to počítání jednotlivých pulzů.
Všem vám děkuji za rady.
Naposledy upravil(a) jova dne 15 říj 2015, 08:15, celkem upraveno 2 x.
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: PICAXE a krokové motory

Příspěvek od jrt »

Výborné, gratuluji!
jrt
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE a krokové motory

Příspěvek od jova »

Jak si tak hraji s těmi krokovými motory, chtěl jsem zkusit řízení od nulových otáček na obě strany. Vtvořil jsem jednoduchý prográmek který se chová trochu podivně. Pokud je hodnota na potenciometru pod 128 pro otáčení vpřed, funguje jak má. Pokud je hodnota nad 128 pro otáčky vzad a provede se uvedený výpočet, je výsledná hodnota velice nestabilní. Když jsem zapojil kontrolně LCD, lítá výsledek klidně i o 3, 4. Na motoru se to projevuje trhavou změnou otáček a motor „hraje“ jak ve Vynálezu zkázy :lol:
Ukázku jsem nahrál zde: https://youtu.be/YufUuTbI13s
Netušíte někdo v čem je problém?

Kód: Vybrat vše

setfreq m4

start:
pause 100
readadc c.4,b0
if b0<127 then vpred
if b0>129 then vzad
pwmout pwmdiv16, b.4, 0, 0 
goto start

vpred:
high b.5 
let b1=b0*2 
pwmout pwmdiv16,b.4,b0,b1
goto start

vzad:
low b.5 
let b0=255-b0
let b1=b0*2 
pwmout pwmdiv16,b.4,b0,b1
goto start
Naposledy upravil(a) jova dne 04 dub 2017, 14:27, celkem upraveno 1 x.
Odpovědět