ncDP(.ino) - řídící systémek jednoduché NC děličky

arduino, teensy, atmega, pic a jine (software, hardware)
Uživatelský avatar
Thomeeque
Příspěvky: 8867
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

20. 4. 2017, 11:19

Netvrdim, že to nevíš, ale jen pro pořádek - je potřeba rozlišovat, kdy se bavíme o chybě 0.01° absolutní polohy (která asi bude trápit málokoho) a kdy o chybě 0.01° (resp. způsobené zaokrouhlením na 0.01°) na jeden segment dělení, která se na absolutní poloze kumuluje a při větším počtu segmentů už může být problém (např. 251 segmentů destkrát dokola - úhel na segment = 1.434262948.., chyba po zaokrouhlení na setinu 0.004262948.., krát 251 * 10 = 10.7° ~ 7.5 segmentů).

Pohodlné dělení 2°/1000 mě taky trochu překvapilo :)
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
lubbez
Příspěvky: 3146
Registrován: 21. 6. 2012, 9:26
Bydliště: Praha

20. 4. 2017, 1:57

N_krát znásobená chyba zaokrouhlením je jasná, tudy cesta nevede. Jde to ale i jinak. Kdysi dávno jsem dělal něco podobného, šlo o kotouč v hracím automatu, který měl něco zobrazovat. Protože počet kroků na otáčku nebyl dělitelný beze zbytku počtem okének a motor nebyl schopen mikrokrokování, vymysleli jsme to nakonec jinak. Jednoduše jsme ten zbytek, který se neprotočil sčítali a když to dalo viditelný pohyb, tak jsme pohnuli. A fungovalo to celé měsíce. Tady bych si to představoval stejně. Když bude posun třeba 5,0127 stupně tak poprvé, podruhé, potřetí a počtvrté otočím o 5,01 st. a po páté o 5,02 stupně a v pomocném registru mi zbude ještě 10, což je 0,0001 stupně a pohoda. V průběhu libovolně dlouhého otáčení mi relativní , ale i absolutní odchylka nepřesáhně 0,01 stupně. Myslím si, že podstatně větší problém budou vůle na šnekovém převodu a hlavně, kdyby se to mělo točit na obě strany. Tam by to chtělo kompenzaci, nebo zpětnou vazbu, na druhou stranu, nebudeme na Arduinu stavět mercedes.
Uživatelský avatar
elbarto
Příspěvky: 4861
Registrován: 22. 5. 2014, 10:27
Bydliště: Prague

20. 4. 2017, 2:18

Pekna prace !! Krmenicko pro Uno bude open source a bude ke stazeni mistre ? Pokud bys potreboval na testy nejake display, mam koukam v supliku:

LCD display HB161113-NGU-DYZ Hyundai chipset
LCD 97-44218-7 LMC1210BBSL Hitachi chipset
LCD Samsung chipset SEC 609B KS0066F00
LCD HC 16116NGU-DYZF with Hitachi chipset HD44780A00
LCD 97-44218-9 LMC1210BBSL with Hitachi chipset HD44780A00
LCD V0021220 rev. F - 2122STLDGYTN-M Hitachi HD44780A00
milan584
Příspěvky: 2130
Registrován: 12. 5. 2009, 2:17
Bydliště: na jihu

20. 4. 2017, 2:42

Thomeeque píše:Netvrdim, že to nevíš, ale jen pro pořádek - je potřeba rozlišovat, kdy se bavíme o chybě 0.01° absolutní polohy (která asi bude trápit málokoho) a kdy o chybě 0.01° (resp. způsobené zaokrouhlením na 0.01°) na jeden segment dělení, která se na absolutní poloze kumuluje a při větším počtu segmentů už může být problém (např. 251 segmentů destkrát dokola - úhel na segment = 1.434262948.., chyba po zaokrouhlení na setinu 0.004262948.., krát 251 * 10 = 10.7° ~ 7.5 segmentů).

Pohodlné dělení 2°/1000 mě taky trochu překvapilo :)
Myslím, že to vím :)
Ta elektronika musí fungovat tak, že pro danou polohu (úhel a nebo dílec) si napočítá "kolik pulsů od nuly to je" (s přesností na nejbližší celý puls) a při všech pohybech pak už musí jezdil pouze po pulsech a na jakýkoli výpočet "za pochodu" musí zapomenout - prostě jakékoli zaokrouhlování v úhlech je naprosto nepřípustné - celý to musí počítat s přesností na konkrétní správný puls (a to i v tom počtu pulsů jako u toho SIPu).
Mj, je to jako u děličky - mě absolutně nazajímá, jaký je úhel - spočítam počet otáček, počet děr na příslušném poloměru a pak točím klikou tak dlouho až zapadne kolik do příslušné díry - a je naprosto jedno, jestli to je zprava, zleva, poprvé nebo mezi tím bylo x pohybů kamkoli.
milan584
Příspěvky: 2130
Registrován: 12. 5. 2009, 2:17
Bydliště: na jihu

20. 4. 2017, 3:21

lubbez píše:N_krát znásobená chyba zaokrouhlením je jasná, tudy cesta nevede. Jde to ale i jinak. Kdysi dávno jsem dělal něco podobného, šlo o kotouč v hracím automatu, který měl něco zobrazovat. Protože počet kroků na otáčku nebyl dělitelný beze zbytku počtem okének a motor nebyl schopen mikrokrokování, vymysleli jsme to nakonec jinak. Jednoduše jsme ten zbytek, který se neprotočil sčítali a když to dalo viditelný pohyb, tak jsme pohnuli. A fungovalo to celé měsíce. Tady bych si to představoval stejně. Když bude posun třeba 5,0127 stupně tak poprvé, podruhé, potřetí a počtvrté otočím o 5,01 st. a po páté o 5,02 stupně a v pomocném registru mi zbude ještě 10, což je 0,0001 stupně a pohoda. V průběhu libovolně dlouhého otáčení mi relativní , ale i absolutní odchylka nepřesáhně 0,01 stupně. Myslím si, že podstatně větší problém budou vůle na šnekovém převodu a hlavně, kdyby se to mělo točit na obě strany. Tam by to chtělo kompenzaci, nebo zpětnou vazbu, na druhou stranu, nebudeme na Arduinu stavět mercedes.
Nějak mi s prominutím uniká CO jako řešíte.
ještě jednou a polopaticky - jakýkoli pohyb je na stále stejný puls, žádný úhly nezaokrouhluji, protože prostě nesmím - výpočet musí být tak přesný, jako je počet počet pulsů v daném aplikaci (teda u toho SIPu na těch cca jeden a pul milionu).
Prostě jakýkoli pohyb je pouze v pulsech, úhel je pouze v prvním kroku, než to vypočítá přesně číslo pulsu pro konec každého segmentu.
Tj. když chci dělit na 251 dílů a 360°je 1440000 pulsů, tak to jezdí po 1440000/251 zaokrouhleno na celé číslo a furt na stejné číslo - prostě počítám pouze v pulsech.
Ohledně vůlí v pohonu, nebo těch úvah :) o přesnostech pořádných čistě mechanických strojů (třeba toho otočného stolu od SIPu) - tak v prvé řadě je třeba zapomenout na tu "logiku" :roll: těch aktuálních současných čínských hračkových verglů.
Vůle u toho SIPu je nula - protože jako u všech pořádných měřících strojů a nebo otočných stolů točím odlehčeně s vůlí (aby se netrápil šnek a kolo) a když dojedu kličkou kam mám, tak excentrem na pohonu vymezím vůli na nulu (pootočím objímkou na doraz, celé to je u pořádné mašiny tak přesné, že vůle je totální nula - mj. lze na úhel jet zprava i zleva a v rámci optiky je to na naprosto stejném místě. Co se týče vlastní kinematické přesnosti toho šnekového pohonu - tak to má samozřejmě kompenzační masku (jako mají všechny staré SIPy a i tuším Moore a další), takže výsledná kinematická přesnost pohonu je daná pouze přesností s níž to výrobce dokázal změřit a vyrobit kompenzační masku - tj. cca ta 1/1000 z 2° a to v celém rozsahu (tj. 360°) toho stolu.
Uživatelský avatar
jova
Příspěvky: 2509
Registrován: 2. 11. 2007, 1:40
Bydliště: Chýnov to je kousek od Tábora
Kontaktovat uživatele:

20. 4. 2017, 9:27

To: Thomeeque
A jak vlastně to dělení na x segmentů z jedné otáčky počítáš?

Já to dělám na své děličce tak, že celkový počet impulsů vydělím požadovaným počtem segmentů a to číslo zaokrouhlené na celé pulsy od toho celkového čísla odečtu. Odkrokuji první segment. Číslo co mi zbylo po tom odečtu, vydělím zbývajícím počtem segmentů. Číslo zase zaokrouhlím na celé pulsy, odkrokuji další segment a zase odečtu od toho zbytku… Díky tomu mám každou celou otočku rozpočítanou stejně, vždy skončím na 0 a jednotlivé segmenty se liší ve velikosti maximálně o +/- 1 puls. :D
lubbez
Příspěvky: 3146
Registrován: 21. 6. 2012, 9:26
Bydliště: Praha

20. 4. 2017, 9:27

Tady s tebou nesouhlasím, tohle přesně zanese tu vlečnou chybu. Pokud něco zaokrouhlíš, musíš to posléze i kompenzovat.
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

20. 4. 2017, 9:39

lubbez píše:Tady s tebou nesouhlasím, tohle přesně zanese tu vlečnou chybu. Pokud něco zaokrouhlíš, musíš to posléze i kompenzovat.
To není pravda. Pokud jova v dalším výpočtu použije reálnou pozici (tj. tu zaokrouhlenou), tak žádnou vlečnou chybu do výpočtu nezavede.
Uživatelský avatar
jova
Příspěvky: 2509
Registrován: 2. 11. 2007, 1:40
Bydliště: Chýnov to je kousek od Tábora
Kontaktovat uživatele:

20. 4. 2017, 9:42

Ale já nic nezaokrouhluji v pravém slova smyslu. Já pouze s tím zlomkem pulsu nepočítám v rámci jednoho segmentu. A nový segment se mi počítá z toho zbytku pulsů po odečtu předcházejícího segmentu v celých pulsech. Díky tomu se mi velikost jednotlivých segmentů liší právě maximálně o ten 1 puls při libovolném dělení.
Matematicky to vypadá pak tak, jak je v přiložené tabulce. Ta hodnota segmentu ve žlutém poli se dá na zkoušku měnit a je docela zajímavé, jak se to ke konci výpočtu "zaokrouhlí" :roll:
Přílohy
krok.xls
(88 KiB) Staženo 250 x
milan584
Příspěvky: 2130
Registrován: 12. 5. 2009, 2:17
Bydliště: na jihu

21. 4. 2017, 5:04

jova píše:To: Thomeeque
A jak vlastně to dělení na x segmentů z jedné otáčky počítáš?

Já to dělám na své děličce tak, že celkový počet impulsů vydělím požadovaným počtem segmentů a to číslo zaokrouhlené na celé pulsy od toho celkového čísla odečtu. Odkrokuji první segment. Číslo co mi zbylo po tom odečtu, vydělím zbývajícím počtem segmentů. Číslo zase zaokrouhlím na celé pulsy, odkrokuji další segment a zase odečtu od toho zbytku… Díky tomu mám každou celou otočku rozpočítanou stejně, vždy skončím na 0 a jednotlivé segmenty se liší ve velikosti maximálně o +/- 1 puls. :D
Hm, a jak to funguje, když při přejezdu mezi segmentem 221 a 222 v půlce vypadne elektrika nebo se prostě cokoli xxxxxx?
Dílec můžu vyhodit :twisted: a začít znova :mrgreen:
Správný postup (nejsem programátor, takže netuším, jestli to tak jde v tom arduinu) podle mě je:
První krok - spočítám všechny polohy s maximální možnou přesností a ty pak zaokrouhlím na puls a ty výsledky někam uložím. Pokud je korekce (nula je jinde než na nule), tak počet korekční počet pulsů opět uložím Potom už jezdím pouze na uložené pulsy, nebo pulsy s korekcí, NIC nepočítám. Když se cokoli xxxxxx, tak zapnu zase elektriku, najedu nulu (to samozřejmě musím dokázat minimálně s mechanickou přesností na puls, ten velký, bez mikrokrokování) načtu korekci v pulsech (tu uloženou) a od té nové nuly jezdím zase jen na ty uložené pulsy zase NIC nepočítám.
Prostě je to dělička, takže to pouze dělí (sčítá, odčítá) jednou zjištěný správný počet pulsů na 360°, žádný úhly (zvěrstvo typu 1,235689° :roll: ani nekomentuju) mě vůbec nezajímají, korekci, co jsem jednou udělal, použji znova, protože mj. najíždět korekci znova je opět další nutná (a zcela zbytečná) nepřesnost.
Uživatelský avatar
jova
Příspěvky: 2509
Registrován: 2. 11. 2007, 1:40
Bydliště: Chýnov to je kousek od Tábora
Kontaktovat uživatele:

21. 4. 2017, 6:55

Osobně to používám na výrobu ozubených kol. Když mi jak píšeš, někde mezi segmentem 221 a 222 v půlce vypadne elektrika, tak si najedu na začátek na první zub, zadám si znova počet zubů a nechám těch prvních 221 zubů odkrokovat bez frézování. Pak pokračuji frézováním od stejného místa dál.
Pokud bych chtěl být pečlivka a pracovat s přesností na puls, stačí mi označit si na motoru 0lovou pozici a každé frézování pak začínat na ní. Pak by vrácení na počáteční pozici a srovnání motoru na tu 0 bylo absolutně přesné na krok.
Mimochodem s možným výpadkem v obdobném případě jsem se potýkal při programování hodin. Tam mám co jedna minuta, to 400 pulsů do motoru. Řeším to tam takto: jeden vstup hlídá síťové napětí a procesor je napájen z velkého kondenzátoru. Pokud mi při otáčení motoru vypadne to síťové napětí, procesor si v ten okamžik do paměti uloží aktuální počet odeslaných kroků a po obnovení napětí o ten počet kroků zase odkrokuje zpět.
lubbez
Příspěvky: 3146
Registrován: 21. 6. 2012, 9:26
Bydliště: Praha

21. 4. 2017, 7:08

Mex píše:
lubbez píše:Tady s tebou nesouhlasím, tohle přesně zanese tu vlečnou chybu. Pokud něco zaokrouhlíš, musíš to posléze i kompenzovat.
To není pravda. Pokud jova v dalším výpočtu použije reálnou pozici (tj. tu zaokrouhlenou), tak žádnou vlečnou chybu do výpočtu nezavede.
Tady jsme si nerozuměli, já reagoval na příspěvek Milana584. Postup Jovy je naprosto OK.
atlan
Příspěvky: 3341
Registrován: 7. 2. 2011, 9:12

21. 4. 2017, 8:06

Nejako mi unika pointa? Vzdy sa pocitaju pulzy kroky, a z nich sa vypocitava uhol ale ten ma iba informacny charakter kedze sa bude zaokruhlovat. Zada sa na aky pocet to chcem rozdelit a bud to bude delitelny pocet pulzov alebo nie. Ten vypadok elektriny by som tak neprezival. Ako bolo napisane od nulovej pozicie to ide odkrokovat vzdy. Lipol by to vyrieila plus plosacik s ciny s kontrolou nabijania a odpojenim pri kritickom vybiti.
Rozhodne by som tam dal referencnu nulu, a tlacidlo pre vygenerovanie vlastnej 0 stym ze tuto hodnotu by som radsej ukladal do eeprom ak nebude bateria.
Dufam ze coskoro bude video ako to funguje
milan584
Příspěvky: 2130
Registrován: 12. 5. 2009, 2:17
Bydliště: na jihu

21. 4. 2017, 8:48

jova píše:Osobně to používám na výrobu ozubených kol. Když mi jak píšeš, někde mezi segmentem 221 a 222 v půlce vypadne elektrika, tak si najedu na začátek na první zub, zadám si znova počet zubů a nechám těch prvních 221 zubů odkrokovat bez frézování. Pak pokračuji frézováním od stejného místa dál.
Pokud bych chtěl být pečlivka a pracovat s přesností na puls, stačí mi označit si na motoru 0lovou pozici a každé frézování pak začínat na ní. Pak by vrácení na počáteční pozici a srovnání motoru na tu 0 bylo absolutně přesné na krok.
Mimochodem s možným výpadkem v obdobném případě jsem se potýkal při programování hodin. Tam mám co jedna minuta, to 400 pulsů do motoru. Řeším to tam takto: jeden vstup hlídá síťové napětí a procesor je napájen z velkého kondenzátoru. Pokud mi při otáčení motoru vypadne to síťové napětí, procesor si v ten okamžik do paměti uloží aktuální počet odeslaných kroků a po obnovení napětí o ten počet kroků zase odkrokuje zpět.
Zajímalo by mě, JAK znovu najedeš s potřebnou přesností na ten první zub (respektive mezeru).
Pro představu - kolo je modul 0.5, 200 zubů, přesnost ozubení IT5.
Uživatelský avatar
fmodel
Příspěvky: 10101
Registrován: 26. 10. 2011, 10:37
Kontaktovat uživatele:

21. 4. 2017, 9:30

milan584 píše: Zajímalo by mě,
To je problém levných řešení ,byl by potřeba nkodér .
http://www.rm-reznicek.cz" onclick="window.open(this.href);return false;
Odpovědět

Zpět na „MCU“