Arduino Uno RC filter grbl CNC 1.1

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Bjornski1976
Berichten: 1130
Lid geworden op: 01 feb 2013 14:10
Locatie: Gorinchem

Arduino Uno RC filter grbl CNC 1.1

Bericht door Bjornski1976 »

Voor een Arduino Uno in combinatie met grbl CNC 1.1 heb ik een rc filtertje toe moeten passen.

Hiervoor heb ik een 4.7k weerstand en 330nF condensator gebruikt, wat eigenlijk 100nF moest zijn om de input storing te filteren.

Het werkt en heb nu de limit switches werkend gekregen zonder telkens een alarm te krijgen.

Als ik het filtertje bereken met 100nF en 330nF met dezelfde weerstand dan zou dat respectievelijk een filtertje van 338.63 Hz en 102.61 Hz zijn.

Omdat het iets is wat ik van het internet heb over genomen begrijp ik niet hoe zoiets gekozen wordt, wie kan uitleggen hoe je eigenlijk zoiets bepaald?

Arduino krijgt spanning van een 24/12Vdc omvormer. De voeding is een geschakeld type 220Vac50Hz. De baudrate rate is 11520 tussen pc en Arduino. Drivers zijn DM556.
Kennis en wijsheid zijn relatief, gevormd door perceptie & invloed van anderen, Ik wens je veel wijsheid toe bij het toepassen van je kennis.
Kjelt
Donateur
Berichten: 6324
Lid geworden op: 14 jun 2007 21:51
Locatie: Eindhoven

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door Kjelt »

Teveel om even uit te typen, hier staat het goed uitgelegd.
Belangrijkste is om in te zien dat een analoog filter niet alles boven die frequentie keihard wegfilterd maar zeer geleidelijk, dat is die aflopende lijn.

https://en.wikipedia.org/wiki/Low-pass_filter
Goudgele
Berichten: 518
Lid geworden op: 21 jul 2020 12:56

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door Goudgele »

Ik pak ook vaak dit soort dingen bij Arduino projectjes. Daar zit al een filtertje ingebouwd. Voor een CNC zou ik deze niet pakken, dan zou ik voor een wat meer robuuste sensor kiezen.
https://www.123-3d.nl/123-3D-Mechanisch ... -t324.html
FreesKever
Berichten: 641
Lid geworden op: 15 apr 2019 01:01

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door FreesKever »

Als je de weerstand waarde van een weerstand vermenigvuldigd met de capaciteit van een condensator, dan heb je ee RC tijd constante.

In jouw geval is dit 4k7 * 100nF = 4700*100e-9 = 0.00047

(De "e" staat hier voor exponent, machten van 10).

De betekenis van de tijd constante is dat als je op tijstip "0" spanning op de weerstand zet, dat dan aan het einde van de tijdconstante de spanning staat op 63% van de eindwaarde. (Deze 63% is niet willekeurig gekozen, daar zit een heleboel wiskunde achter)

Een handige methode om met Wisselspanning te werken is in een circkel.
Er zitten sinussen en cosinussen in cirkels, en door de wisselspannig te "bevriezen" door een pijl (vector) te tekenen in de cirkel kun je gemakkelijk rekenen aanfase verschuivingen.

Een cirkel kun je onder verdelen in 360 graden, maar die 360 is een nogal willekeurig gekozen getal (Ik geloof dat militairen "400" gebruiken).
In de wiskunde houd men niet zo van "willekeurige getallen", en daarom word daar gerekend met radialen. Een cirkel heeft dan 2*pi radialen.

Als je dan de tijdconstante van 0.00047 vermenigvuldigt met 2*pi krijg je:
0.00047 * 2 * pi = 0.0029530970943744054

Dit is nog steeds een tijd.
Een "freqentie" is de invese van tijd. dus "1 / tijd".
1/0.00295309 = 338.628 Hz.

Op de nederlandse wikipedia hebben ze dit wat formeler uitgewerkt naar

Fk = 1/(2*pi*R*C)

https://nl.wikipedia.org/wiki/RC-kring

(Ook hebben ze daar de complexe getallen erbij gehaald (" j ") Het klopt allemaal, maar dat is weer een heel apart verhaal als je dat wilt begrijpen.
Heel in 't kort:
"j" staat voor een fase verdraaiing van 90 graden (voor de condensator) en de uiteindelijke impedantie kun je uitrekenen door de vectoren bij elkaar op te tellen, en dit doe je door een paralellogram (of in dit geval een rechthoek) te tekenen en de lengte van de diagonaal uit te rekenen.

Voor jou maak het allemaal niet veel uit.
Of een signaal van een eindschakelaar 3 milli seconden of 10 milli seconden wordt vertraagd.
Zelfs als je een snelle ijlgang hebt van 10 meter per minuut, dan geeft een vertraging van 10 milli seconden een verschil van slechts
10000/60/100 = 1.666 mm
De afstand om te accelereren en weer tot stilstand te komen is veel groter (En daarom worden eindschakelaars opgezocht met een lage snelheid).
Gebruikersavatar
DaBit
Donateur
Berichten: 11040
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door DaBit »

Bjornski1976 schreef: 15 dec 2021 07:56 Omdat het iets is wat ik van het internet heb over genomen begrijp ik niet hoe zoiets gekozen wordt, wie kan uitleggen hoe je eigenlijk zoiets bepaald?
Dat begint met de vraag 'wat moet er wel doorheen komen?'. Wat er tegengehouden moet komen is dan de rest, al loont het vaak ook wel de moeite om de vraag te stellen 'wat is de sterkste stoorbron?'.

Heb ik een drukknopje dat door een mens bediend word, dan is meer dan 5x drukken per seconde niet realistisch, dus alles onder de 5Hz moet doorgelaten worden, alles boven de 5Hz mag weg. Wil ik stap-pulsen doorlaten, dan is alles tot 200kHz zinvol en alles daarboven niet, bijvoorbeeld.

Kwa stoorbronnen: in een CNC-machine zijn de netfrequentie (50Hz), schakelfrequenties van de VFD (~10kHz) en schakelfrequenties van de motordrives (~25kHz) de voornaamste stoorbronnen.

In geval van een limietschakelaar zou alles boven de 0,1Hz blokkeren al genoeg zijn, want zo vaak word die niet beroerd.
Echter, zoals altijd krijg je in de engineering niets voor niets... Als je filtert, voeg je ook vertraging toe. Met zo'n RC filter goed te beredeneren; via de weerstand loopt een stroompje dat de condensator op/ontlaad, en dat duurt even. Zou je daadwerkelijk op 0,1Hz filteren dan duurt het seconden voor de switch reageert.

Nu, als die tijd constant is en je kunt ervoor compenseren dan is dat niet erg. Dan is alleen de variatie van die vertraging van belang. Maar ik vrees dat dat met Grbl niet kan, dus is het filter een balanceer-act tussen voldoende rejectie van storingen en voldoende lage vertraging.

Die 100-300Hz van je doet niet bijster veel met 50Hz storing, maar is wel effectief voor de gemene storingen afkomstig van VFD en motordrives. Ik zou zelf ergens rond de 2-3kHz gaan zitten aangezien er tussen de 50Hz en ~10kHz niet zoveel storing zit, en een hogere kantelfrequentie minder vertraging (en spreiding op de vertraging in absolute tijdseenheden gezien, nog belangrijker...) oplevert.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
FreesKever
Berichten: 641
Lid geworden op: 15 apr 2019 01:01

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door FreesKever »

Wat GRBL betreft...

In de loop van tijd zijn er veel varianten van GRBL gemaakt voor verschillende microcontrollers.
Er is ook veel code toegevoegd aan GRBL en het past simpelweg niet meer in een "arduino uno".
De ATMEGA328 heeft ook serieuze snelheids beperkingen om een CNC machine aan te sturen. Hierdoor kun je maar beperkt gebruik maken van micro stepping, en ook de maximale snelheid van de ijlgangen is beperkt.

Hardware verschillen:
* ATMEGA328 20MHz max -> Snelle microcontrollers tot > 400MHz.
* ATMEGA328 32kB Flash geheugen. -> Tegenwoordig 256kB Flash (Of zelfs meer als nodig).
* ATMEGA328 2kB RAM. -> 64kB ram of meer als nodig.
* ATMEGA328 heeft geen Floating point coprocessor, terwijl moderne microntrollers die wel hebben.
* ATMEGA328 heeft geen hardware USB, terwijl modernere microntrollers dit geintegreerd hebben (Of zelfs ingebouwde Ethernet of WiFi).
* ATMEGA328 heeft maar 1 interrupt nivo, terwijl modernere microcontrollers meerder interrupt nivo's hebben.

GRBL is echt voorbij de ATMEGA328 gegroeid. Als je GRBL op een "arduino uno" draait, weet je zeker dat je een verouderde versie van GRBL hebt.

Er wordt nog steeds veel door ontwikkeld aan GRBL.
Sinds een paar jaar zijn de verschillende varianten van GRBL weer bij elkaar gebracht in het project:

https://github.com/grblHAL

(HAL staat voor "Hardware Abstraction Layer").
GRBL is hierbij in 2 stukken verdeeld.
Een stuk bevat de "kern" met alle G-code berekeningen zoals accelearie, cirkel interpolatie, enz. en het andere gedeelte is de HAL. Een stuk code dat ervoor zorgt dat de uiteindelijke hardware van de microcontroller wordt aangestuurd.

In GrblHAL zijn meer dan 10 verschillende microcontroller families bij elkaar gebracht.

GrblHAL werkt ook met "plugins". Dit zijn extra modules die je toe kunt voegen als je er gebruik van maakt.
Er is b.v. een module om een frequentie regelaar via MODBUS aan te sturen.
Ook is er een plugin om de intensiteit van een laser tijdens graveren aan de graveer snelheid aan te passen en er zijn er nog meer.

Zo een veel snellere microntroller hoeft niet duur te zijn.
Je kan b.v. een STM32F411 ontwikkelbordje van WeAct kopen voor ong. EUR 8.

Als je tevreden bent met je "arduino uno" dan kun je die natuurlijk gewoon blijven gebruiken, maar als je meer wilt, dan zijn er met GrblHAL heel veel mogenlijkheden. Met al die mogenlijkheden en keuzes is het ook wel een stuk komplexer geworden.
hfjbuis
Donateur
Berichten: 3090
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door hfjbuis »

Bjornski1976 schreef: 15 dec 2021 07:56 Voor een Arduino Uno in combinatie met grbl CNC 1.1 heb ik een rc filtertje toe moeten passen.
Een beetje (te)laat, maar de arduino Uno en Mega hebben een software debounce filter dat dit soort problemen kan verhelpen. Standaard is het uitgeschakeld maar je kunt het inschakelen door in het bestand config.h een regel te wijzigen en hierna de firmware opnieuw op de Uno te zetten. Als je dan een terminal opent en het command $I geeft, krijg je de build informatie te zien. De hoofdletter S geeft aan dat software debounce enabled is.

Hieronder de regel (regelnummer 500 ongeveer) zoals die moet zijn:

Code: Selecteer alles

// A simple software debouncing feature for hard limit switches. When enabled, the interrupt 
// monitoring the hard limit switch pins will enable the Arduino's watchdog timer to re-check 
// the limit pin state after a delay of about 32msec. This can help with CNC machines with 
// problematic false triggering of their hard limit switches, but it WILL NOT fix issues with 
// electrical interference on the signal cables from external sources. It's recommended to first
// use shielded signal cables with their shielding connected to ground (old USB/computer cables 
// work well and are cheap to find) and wire in a low-pass circuit into each limit pin.
#define ENABLE_SOFTWARE_DEBOUNCE // Default disabled. Uncomment to enable.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Bjornski1976
Berichten: 1130
Lid geworden op: 01 feb 2013 14:10
Locatie: Gorinchem

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door Bjornski1976 »

Bedankt allen zover voor de informatie, dit is behoorlijk veel.

Ik heb het redelijk begrepen en bevestigde ook mijn vermoeden met tijd vertraging en bron van storing.

Tijdens het droog testen, zonder drives onder spanning werkte alles goed. Zodra deze aan gingen ontstond de storing. Dit komt hoogst waarschijnlijk van de drives en/of van de voeding en omvormertje.

Voorlopig zal het bij een Arduino Uno blijven maar ja, we weten allemaal dat het beter kan :mrgreen:
Kennis en wijsheid zijn relatief, gevormd door perceptie & invloed van anderen, Ik wens je veel wijsheid toe bij het toepassen van je kennis.
hfjbuis
Donateur
Berichten: 3090
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: Arduino Uno RC filter grbl CNC 1.1

Bericht door hfjbuis »

Bjornski1976 schreef: 15 dec 2021 17:33 Voorlopig zal het bij een Arduino Uno blijven maar ja, we weten allemaal dat het beter kan
Mijn draaibanken draaien op een uno en een mega, de verdeeltafel op een ESP32, de 3d printer weer op een mega en de slijptafel op een nano. Het functioneert allemaal prima en ik heb arm borden in overvloed liggen, maar zie daar nu nog geen voordeel in.
There are only 2 limits, the sky and your imagination
Plaats reactie