Innholdsfortegnelse:

CNC feed-rate måleverktøy laget av skrot: 5 trinn
CNC feed-rate måleverktøy laget av skrot: 5 trinn

Video: CNC feed-rate måleverktøy laget av skrot: 5 trinn

Video: CNC feed-rate måleverktøy laget av skrot: 5 trinn
Video: Foxalien Vasto XXL Cnc Router - Ballscrews, Linear Rails Build, Test & Review 2024, Juli
Anonim
CNC feed-rate måleverktøy laget av skrot
CNC feed-rate måleverktøy laget av skrot

Har noen noen gang ønsket å måle den faktiske matingen på en CNC-maskin? Sannsynligvis ikke før fresebitene er intakte etter en CNC -jobb … men når de begynner å gå i stykker regelmessig, er det kanskje på tide å undersøke. I denne instruksjonsboken kan du følge et oppdrag for å bestemme den faktiske matingshastigheten til en CNC-maskin. Det vil dekke den omvendte konstruksjonsdelen av en skriver, arduino-fastvare, PC-programvare og resultatene jeg fikk ved hjelp av mine kolleger, og søppel ble til skatt.

Trinn 1: Materialer, verktøy, enheter som brukes for å få prosjektet i gang

Da jeg begynte å jobbe med dette, tenkte jeg ut en kort liste over tingene vi trenger:

  • demontert skrivervognmekanisme
  • håndverktøy for å justere det
  • loddejern, loddetinn, ledninger
  • multimeter
  • oscilloskop eller logisk analysator - dette er ikke absolutt nødvendig
  • strømforsyning
  • mikroskop
  • Arduino nano + pinout
  • PC med Arduino IDE, Visual Studio 2008 Express + MS kartverktøy installert
  • (MPU6050 - jeg endte opp med å ikke bruke dette)
  • villig til å søke etter alt du ikke vet hvordan du gjør

I begynnelsen trodde jeg at et MPU6050-kort vil tillate meg å måle fôrhastigheten på alle tre aksene samtidig. Da jeg hadde akselerometeret inne, var jeg sikker på at oppsummering av akselerometerdata vil gi meg ønsket verdi - hastigheten på hver akse. Etter å ha lastet ned og endret en Arduino -kodebit som viste rådata på den serielle skjermen, skrev jeg et lite PC -program i Visual Studio som behandlet dataene, og plottet det på et diagram for lettere tolkning. Jeg måtte laste ned både Visual Studio C# Express 2008 og kartverktøyene for dette.

Etter å ha kodet en stund og slått opp alle tingene jeg trengte for seriell kommunikasjon, endte jeg opp med verdiene plottet, men uansett hva jeg gjorde, var det ikke brukbart. Små, men plutselige bevegelser ville resultere i store pigger, mens lengre reiser ikke engang ville dukke opp på listene. Etter to dager med hamring av MPU6050 ga jeg til slutt opp og vendte meg til noe annet - en demontert skriverens tilbakemeldingsmekanisme for posisjon.

Trinn 2: Maskinvare som må gjøres

Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres
Maskinvare som må gjøres

Reverse Engineering

Selvfølgelig hadde skrivermekanismen ikke noe delenummer jeg kunne ha brukt for å bestemme dens eksakte egenskaper. Det var behov for litt omvendt konstruksjon for å komme dit vi ønsket. Etter å ha undersøkt mekanismen og elektronikken nøye, bestemte jeg meg for at det første må være identifiseringen av de optiske sensorpinnene. Dette måtte gjøres for å koble det hele til Arduino. Jeg demonterte den svarte plastdelen, tok ut kretskortet og undersøkte sensoren: den hadde ROHM RPI-2150 skrevet på den. Det gjorde meg glad, håpet var stort at jeg finner et datablad. Dessverre er dette enten en gammel eller tilpasset del - det var ingen datablad å finne noe sted på nettet. Dette betydde at jeg måtte ta saken i egne hender: vel vitende om at disse sensorene vanligvis har en infrarød LED og to fototransistorer inni, tok jeg et multimeter, satte det til diodemåling og begynte å måle mellom pinner.

Kraftpinnene er vanligvis enkle å finne - de vil ha kondensatorer over seg, og de er vanligvis forbundet med brede spor på PCB -ene. Jordspor er ofte koblet til flere pads for bedre støyavvisning.

Inngangs- og utgangspinnene er imidlertid ikke så trivielle. Når du måler over en diode, vil måleren vise fremspenningen i den ene retningen og overbelastning (uendelig) i den andre. Jeg klarte å identifisere fire dioder mellom pinnene, jeg konkluderte med at den fjerde dioden må være en slags zener eller TVS -diode, som den var rett mellom strømpinnene på komponenten. Det var enkelt å finne den infrarøde senderen, det var en 89R -motstand i serie med den. Jeg satt igjen med to diodemålinger på de to gjenværende pinnene, de måtte være de to mottakerne.

Merk: Disse sensorene har to mottakere for å kunne bestemme bevegelsesretningen i tillegg til å bestemme posisjonen ved å telle pulser. Disse to utgangsbølgeformene er 90 ° ute av fase, denne brukes til å produsere en opptelling eller en nedtellingspuls. Ved å følge antallet av disse pulser, kan den eksakte posisjonen til skrivehodet bestemmes.

Da senderen og de to mottakerne ble funnet, loddet jeg ledninger på pinnene deres, slik at jeg kan koble sensoren til Arduino. Før jeg gjorde det, forsynte jeg sensoren med 3,3V, trakk stripen mellom sensoren et par ganger og observerte firkantbølgen på utgangene. Frekvensen til firkantbølgen varierte med bevegelseshastigheten, og jeg konkluderte med at målesystemet nå er klart for å bli koblet til Arduino.

Koble til Arduino

Det er veldig enkelt å koble til denne nye 'sensoren'. Bare koble sensorutgangene til D2 og D3 (pinner som kan bryte!), Og strømforsyningslinjene, og kodingen kan begynne.

Trinn 3: Arduino -koding

Arduino koding
Arduino koding

Arduino -koden er ganske enkel. Jeg tildelte en funksjon som utføres hver gang D2 ser en stigende kant, dette er funksjonen forløp fra Arduino -koden jeg festet. Hvis du tar en titt på signalene til en kvadratisk encoder, vil du se dette:

  • i en retning fase A er logisk høyt på hver fase B stigende kant
  • i den andre retningen fase A er logisk lav på hver fase B stigende kant

Dette var egenskapen til koderen jeg tok fordel av: siden funksjonen forløp utføres hver gang D2 har en stigende kant, skrev jeg bare en hvis den øker en teller når D3 er høy, og reduserer den når D3 er lav. Dette fungerte ved første forsøk, jeg sendte tellerverdien ut til den serielle skjermen, og så den øke/minke da jeg flyttet skriverhodet på akselen.

Lang historie kort, fastvaren gjør følgende i loop -funksjonen:

  1. sjekker den serielle mottaksbufferen for innkommende data
  2. hvis det er innkommende data, sjekk om det er en 1 eller ikke
  3. hvis det er en '1', betyr det at PC -programvaren ber om telleverdi
  4. sende tellerverdien til PC -en via seriell
  5. start på nytt fra 1.

Med dette er ballen i PC -programvarens bane nå. La oss gå inn på det!

Trinn 4: Visual Studio C# programvare

Hensikten med VS C# -programmet var å flytte beregningsbyrden fra Arduino til PC. Denne programvaren mottar dataene Arduino gir, beregner og viser hastigheten i form av en graf.

Det jeg først gjorde var å google hvordan jeg gjør seriell kommunikasjon i C#. Jeg fant mye god info på MSDN.com sammen med et godt eksempel, så kastet jeg bare ut det jeg ikke trengte - i utgangspunktet alt unntatt lesedelen. Jeg konfigurerte COM-porten og hastigheten for å matche Arduino-hastigheten, så ga det bare et par forsøk og dumpet alt som kom på serieporten i en tekstlinje med flere linjer.

Etter at verdiene ble lest, kunne jeg bare bruke readto & split -funksjonene til å isolere én måling fra hverandre og fra skilletegn. Disse ble plottet på en diagramkontroll, og verdiene begynte å vises på skjermen.

Hvis du ikke kan se diagramkontrollen i VS -verktøykassen, kan du google problemet og finne løsningen her (se etter svar nr. 1): lenke

Måleprinsippet

For å finne sammenhengen mellom antall tellinger og avstanden hodet går, nullførte vi telleverdien, flyttet skriverhodet 100 mm for hånd og observerte endringen i tellinger. Vi kom til slutt opp med følgende proporsjon: 1 count = 0.17094mm.

Siden vi kan spørre om avstanden og vi kan måle tiden mellom prøvene, kan vi beregne hastigheten som posisjonsskiftet skjer med - vi kan beregne hastigheten!

Det er en grov programvaretiming på 50 ms takket være TMR0, men vi observerte at disse tidspunktene ikke var for nøyaktige. Faktisk, etter noen programvarehastighetsmålinger, fant vi ut at tidsbestemt 50ms ikke er 50ms i det hele tatt. Dette betydde at prøvene ikke ble tatt med et fast intervall, så hastighetsberegningen kunne heller ikke bruke en fast tidsbase. Når vi fant dette problemet, var det lett å gå videre: vi tok forskjellen i distanse og tidsforskjell og beregnet hastigheten som D_distance/D_time (i stedet for D-distanse/50ms).

Fordi ligningen vår ville returnere hastigheten i enheter på mm/50 ms, må vi multiplisere dette med 1200 for å få avstanden hodet ville gå på ett minutt, i [mm/minutt].

Merk: Mach 3 CNC-fresekontrollprogramvare definerer matingshastighetene i enheter på [mm/minutt]

Filtrering

Fra dette tidspunktet syntes målingene å være ganske nøyaktige, men det var noe støy på det målte signalet. Vi mistenkte at dette skyldtes mekaniske uoverensstemmelser i akselen, akselkoblingen osv., Så vi bestemte oss for å filtrere den ut for å få en fin gjennomsnittsverdi av det som måles.

Fine justeringer av programvaren

For å endre prøvehastigheten og filterhastigheten under kjøretid ble rullefelt lagt til - en for hver. Evnen til å skjule tomtene ble også introdusert.

Trinn 5: Resultater

Resultater
Resultater
Resultater
Resultater
Resultater
Resultater
Resultater
Resultater

Etter at maskinvare- og programvaredelene var klare, kjørte vi tre sett med målinger med mach 3 + my programvare, du kan se resultatene på de vedlagte bildene. Senere eksperimenter viste bedre nøyaktighet, med både filter- og prøvehastigheter økt. Plottene viser målt hastighet med solid rød, og gjennomsnittet med dash-stiplet blå.

Når det er sagt, ser det ut til at Mach 3 håndterer disse hastighetsinnstillingene ganske nøyaktig, men nå vet vi det sikkert:)

Jeg håper du likte denne korte instruksjonen om reverse engineering og å gjøre vann til vin!

Jubel!

Anbefalt: