Heidenhain TE-355-A => Arduino => EasyCAT => LinuxCNC

Odpovědět
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

25. 12. 2021, 8:30

Tak tu mám další pokračování. Po drobném zápasu, se mi podařilo rozchodit externí GPIO MCP23S17 a dostal jsem se k analogovým vstupům pro potenciometry FEED a SPEED.
20211225_212333.jpg
Nejdříve to ukazovalo šílený rozptyl a kmitání. Po prostříkání Kontoxem se potenciometr začal chovat umírněněji.
Potenciometr-graf1.PNG
Ovšem při zvětšení hodnoty potenciometru stále kmitají.
Potenciometr-graf2.PNG
Zkusil jsem potenciometry odpojit:
Potenciometr-graf-odpojene_potenciometry.PNG
Poté jsem do analogového vstupu připojil GND:
Potenciometr-graf_0V.PNG
a nakonec 5V:
Potenciometr-graf_5V.PNG
Řekl bych, že na požadovanou funkci je rozkmit 0.4% v pohodě. Ovšem těmito potenciometry nebudu řídit nějakou počítačovou hru, ale CNC stroj. Bylo by docela nepříjemné, kdyby se z ničeho nic při požadavku na drobné zvýšení FEED stroj nečekaně zrychlil daleko víc a nebo aby z důvodu stárnutí potenciometru stroj začal jezdit trhaně. Jak se v praxi řeší odcházení potenciometrů? Softwarovým filtrem? Softwarovým hlídáním hodnot, které vybočují z řady?

Říkal jsem si, že bych posbíral třeba 100 hodnot a zprůměroval je. Následně bych spočítal maximální odchylku od střední hodnoty a vyhodnocoval, zda už se jedná o chybu hardwaru, nebo o rychlý pohyb ruky. Ale nechci vymýšlet kolo.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

25. 12. 2021, 8:36

Zkus komponentu lowpass
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

25. 12. 2021, 11:29

Dík za radu.

Zkoušel jsem si s tím lowpass filtrem hrát. Přepsal jsem si ho do Arduina a zkoušel, jak se to bude chovat při různých hodnotách gain. Neustále je to kompromis mezi vyhlazením při záchvěvu a reakcí na požadovanou hodnotu. Upravil jsem si ten lowpass filtr tak, že při zvýšení hodnoty má nižší gain než při snížení rychlosti. Spoustu operátorů používá poťák FEED místo TOTAL STOPu a tak potřebuji aby reakce na snížení rychlosti byla okamžitá.

Takto se to chová při otáčení rukou:
Potenciometr-graf_ruka.PNG
A takto seto chová při skokových změnách (šroubovákem zkratuji výstup z encoderu s 5V a GND):
Potenciometr-graf_zkrat.PNG
Na vyhlazení vln, které jsou vidět až po velkém zvětšení se lowpass filtr nedal použít, tak jsem použil obyčejné zaokrouhlení na 0.5%
Potenciometr-graf_zaokrouhleni.PNG
Modrá barva = před použitím filtru
Červená barva = po použití filtru

Stále to není to, co bych chtěl, ale nevím, jestli to co bych chtěl, je vůbec možné.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

26. 12. 2021, 7:27

Kolik čteš těch vstupů? Pořád jeden nebo je střídáš?
Obecný problém s multiplexovaným ADC je, že musíš po přepnutí vstupu počkat na ustálení vstupní hodnoty.
Každý vstup má nějakou kapacitu. A když ji budíš ze zdroje s vysokou impedancí, tak ustálení hodnoty trvá příslušně dlouho.

Pokud se Ti nechce hrabat do knihoven Arduina (nebo v čem to píšeš) a protáhnout čas mezi přepnutím vstupu a jejím změřením, tak zkus udělat nějaké pokusy.
Buď čti stejný vstup několikrát, např. 3x, (bez přepnutí na jiný vstup) a použij až poslední hodnotu.
Případně si to změř: místo potenciometru tam dej odporový dělič. Napřed třeba 100k/100k, pak 1k/1k a nakonec třeba 100R/100R.
A uvidíš, jestli se naměřené průběhy liší nebo ne.
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

26. 12. 2021, 9:40

Co se týče frekvence čtení, tak čtu 20Hz. Proč? Protože jsem nevěděl kolik je potřeba a zkusil nějakou výchozí hodnotu a jelikož jsem začal používat lowpass filtr, tak jsem chtěl nějakou stabilní frekvenci, která nebude závislá na tom, co se právě má v nekonečné smyčce spočítat.

Nikde v kódu nepoužívám funkci delay, ale vždy si vytvořím událost:
"pokud současný čas je vyšší než předchozí čas + perioda, tak ...."

Zatím je to takový bordel kód, jen na ověření hardwaru a zjistil jsem, že v něm čtu analogový vstupy A6, A7, A6, A7 v jedné smyčce. Tak jsem to překopal na čtení jen jednou A7, ale vůbec to nepomohlo:
Potenciometr-graf_blikání.PNG
Ovšem co pomohlo, tak jsem okomentoval příkazy, které měly na starosti blikání ledkama na výstupech A0, A1, A2, A3, D5. A najednou stal se zázrak:
Potenciometr-graf_vse_vypnuto.PNG
Dnes už valím spát, zítra budu pokračovat a přemýšlet o závěrech tohoto pokusu.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

27. 12. 2021, 12:53

Tak jsem bádal dál a přišel jsem na to, že když měřím z obou vstupů (A6, A7) tak se výsledek trošku zhorší (levá část grafu). Zkoušel jsem dávat pauzy mezi jednotlivými čteními analogových vstupů, nebo je i číst vícekrát, ale nepomohlo to. Ovšem největší binec do toho vrazí ty obyčejné blikající ledky (pravá část grafu). Ovšem bavíme se stále o chybě do 0.5% z rozsahu, takže vliv na funkci rostlináře to mít nebude.
Potenciometr-graf_blikání.PNG
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

27. 12. 2021, 3:36

To mcu ma asi nejaky vref pro referovani a/d prevodniku. Jak ho mas vyreseny?
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

29. 12. 2021, 6:32

robokop píše: 27. 12. 2021, 3:36 To mcu ma asi nejaky vref pro referovani a/d prevodniku. Jak ho mas vyreseny?
V příloze přikládám elektroschema. Jedná se pin AVCC.
0S01-01_HEID_TE-355-A_2021_12_29.pdf
(205.53 KiB) Staženo 77 x
MCU-AVCC.PNG
Každopádně už jsem našel jednoho z viníků problému. Je to tepelná pojistka TH2.
TH2.PNG
Na následujícím grafu jsou zobrazeny analogové vstupy A5-zelená (korekce TH2) a potenciometry A6 a A7.
Potenciometr-graf_blikání.PNG
Levá část grafu je přemostěná pojistka TH2.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

29. 12. 2021, 6:43

to funguje jako nejaky sumovy clen, zajimave
Vsechna prava na chyby vyhrazena (E)
s7ama7
Příspěvky: 1
Registrován: 23. 7. 2020, 4:10

20. 2. 2022, 8:59

Ahoj ,
zajímavý projekt. Je tam pokrok?
Můžete sdílet soubory?
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

20. 2. 2022, 9:14

Pokrok momentálně žádný. Co se týče softwaru, tak mám jen takový testovací na ověření funkčnosti vstupů výstupů. Co se týká hardwaru, tak už jsem zde dával vše co mám v předchozím příspěvku (KiCAD). Zatím je to akorát takové drahé arduino :-) Myslím si, že na to budu mít čas zase až o vánočních svátcích.
LinuxCNC - MESA 7i96
zz912.webnode.cz
atlan
Příspěvky: 3345
Registrován: 7. 2. 2011, 9:12

21. 2. 2022, 10:54

Max vstipna hodnota na AD vstup je tusim 10k, pozri datasheet. Pri prepnuti na iny vstup musis chvilku pockat a az tak spustit prevod.
K tomu 1uF co mas na vyhladenie napetna na AD vstupy by som skor pridal 100nF.
Pouzivas orevod na 10bit? Tak spodny byt zahid 9bit bude plne postacovat, niekedy aj 256hodnot staci.

Mas na polasku spinane zdroje, tak sa necudujze to beha. Inak vid datasheet AD prevodnik.
Odpovědět

Zpět na „Ostatní elektronika“