Kreslení kružnice
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
Dobrý den,
prosím o pomoc, dostavěl jsem svoje CNC a momentálně jsem téměř hotový s programem pro řídící jednotku. Typ není je to dělané na koleně s mikrokontrolérem Atmel.
Potřebuji naučit jednotku jak použít příkaz kružnice tedy X Y I J K tedy pro zatím stačí I a J pro frézování plošných spojů je to dostačující.
Problém je v tom, že nemůžu přijít na to jakým způsobem, když to řeknu jednoduše posunovat osy tak abych dosáhl kružnice.
Pravděpodobně je třeba vypočítat vždy před krokem každé osy budoucí bod pro danou osu ale nevím jak. Našel jsem na internetu zajímavý vzorec ale nejsem si jistý jak ho použít
x = cx + r * cos(a)
y = cy + r * sin(a)
našel jsem ho zde
http://stackoverflow.com/questions/8398 ... cumference" onclick="window.open(this.href);return false;
cx bych pochopil začátek souřadnic r je rádius ten by taky asi nebyl problém když je rádius v podstatě polovina poloměru. Ale jak má program vypočítat a=což by měl být úhel.
No možná že jsem celkově mimo s mojím postupem.
prosím o pomoc, dostavěl jsem svoje CNC a momentálně jsem téměř hotový s programem pro řídící jednotku. Typ není je to dělané na koleně s mikrokontrolérem Atmel.
Potřebuji naučit jednotku jak použít příkaz kružnice tedy X Y I J K tedy pro zatím stačí I a J pro frézování plošných spojů je to dostačující.
Problém je v tom, že nemůžu přijít na to jakým způsobem, když to řeknu jednoduše posunovat osy tak abych dosáhl kružnice.
Pravděpodobně je třeba vypočítat vždy před krokem každé osy budoucí bod pro danou osu ale nevím jak. Našel jsem na internetu zajímavý vzorec ale nejsem si jistý jak ho použít
x = cx + r * cos(a)
y = cy + r * sin(a)
našel jsem ho zde
http://stackoverflow.com/questions/8398 ... cumference" onclick="window.open(this.href);return false;
cx bych pochopil začátek souřadnic r je rádius ten by taky asi nebyl problém když je rádius v podstatě polovina poloměru. Ale jak má program vypočítat a=což by měl být úhel.
No možná že jsem celkově mimo s mojím postupem.
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
Můžete mi víc poradit nejsem specialista na matiku ani CNC začal jsem s tím abych si mohl dělat plošné spoje. Potřeboval bych vís vysvětlit jak teda vypočítat x a y v případě třeba příkazu X100 Y100 I50 J50. Ano můj atmel umí sin a cos.
- robokop
- Site Admin
- Příspěvky: 22404
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
urcite to umi atmel nebo to pocita ejaka knihovna v C?
v realu se to prave dela o dost jinak napocitas si tabulku sinu a cosinu treba po 1 stupni pomoci softwarove knihovny nekdy v dobe kdy incializujes procesor
pak ty hodnoty prokladas useckama
to je +- dost presne na spoustu pouziti
zavolat knihovni (nehardwarove) sin/cos v dobe kdy generujes kroky by nebylo moc dobre
v realu se to prave dela o dost jinak napocitas si tabulku sinu a cosinu treba po 1 stupni pomoci softwarove knihovny nekdy v dobe kdy incializujes procesor
pak ty hodnoty prokladas useckama
to je +- dost presne na spoustu pouziti
zavolat knihovni (nehardwarove) sin/cos v dobe kdy generujes kroky by nebylo moc dobre
Vsechna prava na chyby vyhrazena (E)
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
Proč ne v runtime?
A jinak nejde prostě spočítat jaká má být další souřadnice pro X a Y před uskutečněním kroku motoru?
A jak teda vytvořit tabulku sinu a cosinu? tuším asi 2dimensionální array a do něho dosadit pomocí sin a cos hodnoty?
A jinak nejde prostě spočítat jaká má být další souřadnice pro X a Y před uskutečněním kroku motoru?
A jak teda vytvořit tabulku sinu a cosinu? tuším asi 2dimensionální array a do něho dosadit pomocí sin a cos hodnoty?
Proč nepoužiješ něco hotového ?
Třeba https://github.com/grbl/grbl/wiki
Třeba https://github.com/grbl/grbl/wiki
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
Ten Github vypadá celkem zajímavě díky ale nicméně právě že je to hotové chtěl bych to mít celé vlastní silou popřípadě s pomocí ostatních
Jinak snažím se najít jestli to neumí nějaká knihovna ale zatím jsem našel jen abych použil sin a cos s rádiusem a uhlem.
Jinak snažím se najít jestli to neumí nějaká knihovna ale zatím jsem našel jen abych použil sin a cos s rádiusem a uhlem.
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
A ten Github zdá se že nepodporuje Atmega16 nebo tam nikde aspoň nevidím jestli ano. A navíc asi by se mi tam další knihovna nemusela vejít jsem na 67% místa pro program a ještě mi tam nějaké funkce chybějí.
Spocitej si nejprve jestli to vubec stihnes v realnem case vypocitat. Pokud das posuv rekneme 3m/min, sroub se stoupanim 5mm, 16xmikrokrok, tak ti mezi pulzy ktere posilas driveru krokace zbyde nekolik malo stovek taktu hodin procesoru (ATmega prilis neznam, ale vykonem zrovna neoplyva).
-
- Sponzor fora
- Příspěvky: 8167
- Registrován: 16. 7. 2006, 12:33
- Bydliště: Praha Bohnice + Roudnice nad Labem
- Kontaktovat uživatele:
Taky se dá použít algoritmus, který se používal v dávnověku, kdy byly řídící systémy stavěné z TTL obvodů. Takový hardwarový kvadratický interpolátor je jenom kaskáda sčítaček, kde do registru X2 se pořád přičítá konstanta, například 1 (takže hodnota X2 je postupně 1, 2, 3, 4, 5, ...) a do registru X1 se přičítá hodnota X2 (takže X1 je postupně 0, 1, 3, 6, 10, 15, ...). Obdobně, ale v obráceném sledu se totéž dělá s Y2 a Y1. Vektor [X1, Y1] tak postupně obsahuje souřadnice bodů ležících na jednom kvadrantu kružnice, mezi nimiž se již interpoluje lineárně. Z toho je taky krásně vidět, proč jsou v G-kódu od samého počátku funkce G17, G18, G19 (jen přepínaly se kterými dvěma ze tří registrů se pracuje) a proč se kruhový oblouk přednostně programuje formou počátek, konec, radius, smysl (konec oblouku určuje jednoduchý komparátor a nic se nemusí vypočítávat, radius se zase přímo použije jako druhá diference).
Aleš Procháska
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
-
- Sponzor fora
- Příspěvky: 8167
- Registrován: 16. 7. 2006, 12:33
- Bydliště: Praha Bohnice + Roudnice nad Labem
- Kontaktovat uživatele:
Tohle se obvykle řeší tak, že když koncový X, Y neleží (skoro) přesně na kružnici dané poloměrem R a souřadnicemi středu I, J tak má přednost R a udělá to oblouk z aktuální pozice na pozici X, Y o poloměru R a na I, J se to vykašle. Jinými slovy, pokud víš R, nemusíš už vypočítávat souřadnice středu a ani je do příkazu psát. Pokud naopak víš jen I, J, nemusíš dopočítávat R.
Pokud takový oblouk pomocí X, Y, R nejde zkonstruovat, řs zpravidla hlásí chybu.
Ale můžeš to udělat i jinak, G kód není zrovna moc jednotný Jedna z možností je například zastavení interpolace v okamžiku, kdy jedna ze souřadnic dosáhne buď X nebo Y, i když bod X,Y přímo neleží na oblouku.
Pokud takový oblouk pomocí X, Y, R nejde zkonstruovat, řs zpravidla hlásí chybu.
Ale můžeš to udělat i jinak, G kód není zrovna moc jednotný Jedna z možností je například zastavení interpolace v okamžiku, kdy jedna ze souřadnic dosáhne buď X nebo Y, i když bod X,Y přímo neleží na oblouku.
Aleš Procháska
-
- Příspěvky: 8
- Registrován: 14. 4. 2016, 6:10
No v podstatě mi jde o to, abych pochopil chování simulátoru na tento příkaz a naprogramoval stejně můj řídící mikrokontrolér který tuto proceduru bude provádět. Jinak příkazy psát já nebudu jsou generované automaticky z programu na převod například z obr do GCODE takže jestli je tam místo R použito I a J musí to podle toho jet.
Takže bych potřeboval vědět jak je možné že simulátor přejede přímku mezi X0,Y0 a X50,Y50_?
Když to řeknu ještě takto jak přišel simulátor na to že má jet ještě x bodů pod přímku vždyť příkazem X50 Y50 I30 J10 neudávám zvlášt délku oblouku ale jen rádius daný I a J takže by měl automaticky končit na té přímce ne?
Takže bych potřeboval vědět jak je možné že simulátor přejede přímku mezi X0,Y0 a X50,Y50_?
Když to řeknu ještě takto jak přišel simulátor na to že má jet ještě x bodů pod přímku vždyť příkazem X50 Y50 I30 J10 neudávám zvlášt délku oblouku ale jen rádius daný I a J takže by měl automaticky končit na té přímce ne?
-
- Sponzor fora
- Příspěvky: 8167
- Registrován: 16. 7. 2006, 12:33
- Bydliště: Praha Bohnice + Roudnice nad Labem
- Kontaktovat uživatele:
Aha, já odpovídal asi na něco trochu jiného než se ptal, myslel jsem, že píšeš ten simulátor.
S tím simulátorem na obrázku mi to taky není moc jasné. Asi nastal ten případ, kdy si to autor může vyřešit tak chce, protože chování v případě, kdy ta kružnice nevychází přesně, není definováno. Případá mi to, jako kdyby kreslil oblouk po segmentech a v okamžiku, kdy zjistil, že se na konec nedostane obloukem (hodnota x začala klesat, takže je jasné, že na konec už nikdy nedojede), tak to vzal přímo Obecně nemusí na spojnici bodů končit, už proto, že to je výpočetně složité.
S tím simulátorem na obrázku mi to taky není moc jasné. Asi nastal ten případ, kdy si to autor může vyřešit tak chce, protože chování v případě, kdy ta kružnice nevychází přesně, není definováno. Případá mi to, jako kdyby kreslil oblouk po segmentech a v okamžiku, kdy zjistil, že se na konec nedostane obloukem (hodnota x začala klesat, takže je jasné, že na konec už nikdy nedojede), tak to vzal přímo Obecně nemusí na spojnici bodů končit, už proto, že to je výpočetně složité.
Aleš Procháska