PICAXE a krokové motory
Re: PICAXE a krokové motory
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?
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?
Re: PICAXE a krokové motory
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.
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.
Re: PICAXE a krokové motory
Tak jsem se opět zasekl
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.
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
Re: PICAXE a krokové motory
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)
pridelat optickou signalizaci na tocici se casti
pouzit cidlo z opticke mysi a cist vzdalenost
magneticke pasky (jako elektronicka suplera)
Re: PICAXE a krokové motory
Mohl by jsi to prosím tě trochu rozvést?Milops3 píše:vystup pwm pripojit na vstup timeru a pocitat pulzy
Jak to sčítat? Bude to těch cca 10kHz stíhat?
Ty další varianty bych zatím nechal na později.
Re: PICAXE a krokové motory
nastavis si timer na externi zdroj (jako externi zdroj pouzijes to pwm) pak uz jen bedes cist ten timer, muzes si i nastavit preddelicku..
Re: PICAXE a krokové motory
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í.
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í.
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
Re: PICAXE a krokové motory
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.
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.
Re: PICAXE a krokové motory
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
Ukázku jsem nahrál zde: https://youtu.be/YufUuTbI13s
Netušíte někdo v čem je problém?
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.