Innehållsförteckning:

Luftgevärs kronograf, kronoskop. 3D -tryckt: 13 steg
Luftgevärs kronograf, kronoskop. 3D -tryckt: 13 steg

Video: Luftgevärs kronograf, kronoskop. 3D -tryckt: 13 steg

Video: Luftgevärs kronograf, kronoskop. 3D -tryckt: 13 steg
Video: Ежелгі Македония 2024, November
Anonim
Image
Image
Funktion
Funktion

Hej alla, idag kommer vi att besöka ett projekt jag har gjort 2010. En luftgevärskronograf. Denna enhet kommer att berätta hastigheten på en projektil. Pellet, BB eller till och med luftmjuk BB -plastboll.

2010 köpte jag ett luftgevär för skojs skull. Slog till burkar, flaskor, sikta. Jag vet att hastigheten på denna pistol var högst 500 fot/s. För det är kanadas lag. Några starkare luftgevär finns tillgängliga men du måste ha en licens för och du kan inte köpa den saken på Walmart.

Nu hade jag den här licensen, jag kunde köpa en till. Men novell, samma pistol var tillgänglig för USA vid 1000 fot/s. VAD!? Samma pistol? ja … I Kanada har slaget ett hål i det och fjädern är mjukare.

Det första du ska göra är att fylla hålet. Det är vad jag gjorde med lödning. Nästa sak att göra var att beställa en ersättningsfjäder. Men vänta … vad är nuvarande hastighet för min nya leksak? Är våren verkligen nödvändig? Jag vet inte och jag vill veta. Jag vill veta nu men hur?

Det var därför jag gjorde det här projektet. Allt jag behövde var 2 sensorer, en uC och en display och vi är i affärer.

Förra veckan såg jag min gamla blå kronograf på en hylla och jag pratar med mig själv: "Varför inte dela detta och göra en instruerbar med det?" Och förresten, vi kan öka noggrannheten och lägga till en batteriindikator. Sätt 1 knapp istället för 2 för på/av. Allt ytmonterat. Vi är nu 2020!

Så där är det … låt oss börja!

Steg 1: Funktion

-Pellets hastighet

-Hastighet

-20 mhz körning, enorm noggrannhet

-Automatisk avstängning

-Batterispänning visas

-schematisk tillgänglig

-PCB tillgängligt

-dellista tillgänglig

-STL tillgänglig

-C -kod tillgänglig

Steg 2: Teori om drift och noggrannhet

-Vi har en UC som körs på 20 Mhz. Den använda oscillatorn är en TCX0 +-2,5 ppm

-Vi har 2 sensorer på 3 tum långt från varandra.

-Projektilen träffade den första sensorn. uC börja räkna (timer1)

-Projektilen träffade den andra sensorn. uC sluta räkna.

-uC kontrollera timer1 -värdet, beräkna och visa hastighet och hastighet.

Jag använder 16 bitars timer1 + överflödesflaggan tov1. 17 bitars totalt för 131071 "tic" för en fullständig räkning.

1/20 mhz = 50 ns. Varje tic är 50ns

131071 x 50 ns = 6,55355 ms för att göra 3 tum.

6,55355 ms x 4 = 26,21 ms för att göra 12 tum.

1/26,21 ms = 38,1472637 fot/s

Detta är den långsammaste hastighet som enheten kan mäta.

Varför 20 mhz? Varför inte använda den interna 8 mhz eller ens en kristall?

Min första enhet använde den interna oscillatorn. Fungerade men den här var inte noggrann nog. Variationen är för stor. En kristall är bättre men temperaturen varierar ofta. Vi kan inte göra en exakt mätapparat med det. Dessutom är frekvensen högre, mer tic räknas för samma hastighet. Provtagningen blir bättre för att ha en mycket bra noggrannhet. Eftersom en tic inte är delbar är förlusten liten om arbetscykeln är snabb.

Vid 20 MHz har vi steg på 50 ns. Vet vi hur mycket exakt det är 50 ns för en projektil vid 38 ft/s.

38.1472637 ft/s dividera med 131071 = 0, 000291042 fot

0, 0003880569939956207 fot x 12 = 0, 003492512 tum

1/0, 003492512 = 286,37 ". Med andra ord. Vid 50 fot/s har vi en noggrannhet på +- 1/286" eller +- 0, 003492512 tum

Men om min oscillator är värst och kör på 20 mhz +2,5 ppm är det ok? Låt oss ta reda på…

2,5 ppm på 20 000 000 är: (20000000/1000000) x 2,5 = 20000050 Hz

Så i värsta fall har vi ytterligare 50 klockor på 20 MHz. Klockan är 50 på 1 sekund. Hur många tic mer på timer1 om pelleten gör samma hastighet (38,1472637 fot/s eller 6,55 ms)?

1/20000050 = 49,9999875 ns

49.999875 ns x 131071 = 6, 553533616 ms

6, 553533616 ms x 4 = 26.21413446 ms

1/26.21413446 ms = 38.14735907 fot/s

Så vi har 38.14735907 fot/s istället för 38.1472637 fot/s

Nu vet vi att 2,5 ppm inte påverkar resultatet.

Här är ett exempel på olika hastigheter

För 1000 ft/s

1000 ft/s x 12 är 12000 tum/s

1 sekund för 12000 "hur lång tid ska jag göra 3"? 3x1/12000 = 250 us sekunder

250 us / 50 ns = 5000 tic.

Timer1 blir 5000

uC beräkna och 1000 ft/s visas. Än så länge är allt bra

För 900 fot/s

900 fot/s är 10800 tum/s

3x1/10800 = 277,77 oss

277, 77 ns / 50 ns = 5555, 5555 tic

Timer 1 är 5555

uC gör matten och 900, 09 kommer att visas istället för 900

Varför ? eftersom timern 1 är vid 5555 och 0 förloras 5555. Tic on timer kan inte delas.

Vi har ett fel för 0, 09 vid 900 ft/s

0, 09/900x100 = 0, endast 01% fel

För 1500 ft/s 1500 ft/s är 18000 /s 3x1/10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Timer 1 kommer att vara 3333

uC beräkna och 1500.15 visas istället för 1500, det är.15/1500x100 = 0, 01%

För 9000 ft/s

9000 x 12 = 180000 tum / s

3x1/180000 = 27.7777 oss

27,77 us / 50 ns = 555, 555

Timer1 kommer att vara på 555 och 4/(1/555x50ns) kommer att visas 9009, 00 kommer att visas

Här är felet 9 fot/s på 9000 = 0, 1%

Som du kan se % stiger felet när hastigheten är högre. Men stanna <0,1%

De resultaten är mycket bra.

Men noggrannheten är inte linjär. Vid 10000 ft/s är det 0, 1 %. Bra nytt är att vi aldrig testar en pellets på 10 000 fot/s.

En annan sak att tänka på. När ett avbrott inträffar, avslutar uC alltid sista instruktionen innan du går in i avbrottet. Detta är normalt och alla uC gör detta. Om du kodar arduino, i C eller till och med assembler. För det mesta kommer du att vänta i en evig loop … att vänta. Problemet är att vi i en slinga tillbringar 2 cykler. Normalt är detta inte viktigt. Men i vårt fall. JA, varje tic är viktig. Låt oss titta på en oändlig slinga:

assemblerare:

slinga:

rjmp loop

I C:

medan (1) {}

Faktum är att C -kompilatorn använder rjmp -instruktion. RJMP är 2 cykler.

Det betyder att om avbrottet händer med den första cykeln förlorar vi en cykel (tic) (50ns).

Mitt sätt att fixa det är att lägga till många nop -instruktioner i slingan. NOP är 1 cykel.

slinga:

nej

nej

nej

nej

nej

rjmp loop

Om avbrottet sker på en nop instruktion. Vi är okej. Om det händer på den andra cykeln av rjmp -instruktion är vi ok. Men om det händer under den första cykeln av rjmp -instruktion, kommer vi att tappa en tic. Ja det är bara 50 ns men som du kan se ovan är 50 ns på 3 inches ingenting. Vi kan inte korrigera detta med programvara eftersom vi inte vet när exakt avbrottet inträffar. Det är därför i koden du kommer att se en hel del instruktioner. Nu är jag ganska säker på att avbrottet kommer att falla på en ingen instruktion. Om jag lägger till 2000 nop har jag 0, 05% att falla på rjmp -instruktionen.

En annan sak att tänka på. När avbrott inträffar. Kompilatorn gör många push och pull. Men det är alltid samma nummer. Så nu kan vi göra en programkorrigering.

För att avsluta detta:

Noggrannheten för en genomsnittlig pellet på 1000 ft/s är 0, 01%

100x mer exakt än andra 1% på marknaden. Frekvensen är högre och med TCXO, mer exakt

Till exempel är 1% av 1000 ft/s mer eller mindre 10 ft/s. Det är en enorm skillnad.

Steg 3: Schematisk och delar lista

Schematisk och delar lista
Schematisk och delar lista

Här implementerade jag min på/av -krets med en knapp. (se min sista instruerbara) Denna krets är mycket praktisk och fungerar mycket bra.

Jag använder en atmega328p. Den här är programmerad i C.

Displayen är en standard med 2 linjer LCD HD44780 -kompatibel. 4 bitars läge används.

En 3.3v regulator används för att ge spänning till TCXO 20mhz.

D1 är för lcd -bakgrundsbelysning. Frivillig. Batteriet håller längre om du inte installerar D1.

Alla motstånd och lock är 0805 -paket

C1.1uf 25v

C2 1uf 16v

C3 2.2uf 10v

C4.1uf

C5.1uf

C6.1uf

C7 1uf

C8.1uf

C9.1uf

C10.1uf

D1 1n4148 SM SOT123

D2 5.1v SOT123

IC1 ATMEGA328p

IC2 MIC5225-5.0YM5-TR TPS70950DBVT SOT23-DBV

OSC1 TXETDCSANF-20.000000

R1 1M

R2 1M

R4 2,2k

R5 160

R6 160

R7 1M

R8 1M

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Display LCD 2 -radig HD44780. Du behöver inte köpa i2c -modulen.

Sensorer:

2x Emitter OP140A

2x mottagare OPL530

Kodare: PEC11R-4215K-S0024 *Glöm inte att lägga till 4x 10k motstånd och 2x.01uf för att göra pulsfiltret. se bild nedan

Steg 4: PCB Gerber -fil

PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil

Här är gerber -filer

Steg 5: Löd din PCB

Löd din PCB
Löd din PCB
Löd din PCB
Löd din PCB
Löd din PCB
Löd din PCB

Med schematisk hjälp, löd hela din komponent på kretskortet. Varje del eller skrivs på PCB, r1, r2 … och så vidare.

Jag har inte installerat D1. Detta är för LCD-bakgrundsbelysningen. Det är vackert men batteritiden påverkas. Så jag väljer att hålla LCD-bakgrundsbelysningen avstängd.

Steg 6: Programmering av Atmega328p

Programmering av Atmega328p
Programmering av Atmega328p

Kontrollera här i steg 12 för att programmera atmega328p. Jag tillhandahåller här.hex -filen för detta.

Här är avrdude -programmet redo att programmera batchfil. Klicka bara på programmet usbasp.bat och din usbasp är korrekt installerad. Allt görs automatiskt inklusive säkringsbit.

1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…

I detta projekt delar jag också C -källkoden. Tänk på att en anteckning i den kan vara på franska. Https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E …

Steg 7: LCD -skärm

LCD skärm
LCD skärm
LCD skärm
LCD skärm

Installera lite tejp och anslut PCB och LCD tillsammans

Steg 8: STL -fil

STL -fil
STL -fil
STL -fil
STL -fil
STL -fil
STL -fil

stl -fil

1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…

Stöd behövs för kapsling, sensorrör och gevärhållare.

Jag har skrivit ut på.2 mm hög.

Steg 9: ROTERANDE KODARE

ROTERANDE KODARE
ROTERANDE KODARE
ROTERANDE KODARE
ROTERANDE KODARE
ROTERANDE KODARE
ROTERANDE KODARE

Denna roterande kodare är ansluten till isp -kontakten. den används för att ändra pellets vikt och för att slå på och stänga av enheten.

vcc isp pin 2 (pull up resistor)

Terminal A (gul) går till ISP -stift 1

Terminal B (grön) går till ISP pin 3

Terminal C (gnd) ISP -stift 6

Jag lägger till 2 bilder för att se skillnaden mellan att ha ett filter vs inget filter. Du kan enkelt se skillnaden mellan båda.

Tryckknappen går till PCB SW -kontakten.

Steg 10: Sensorrör

Sensorrör
Sensorrör
Sensorrör
Sensorrör
Sensorrör
Sensorrör

VIKTIG:

Sensorröret måste vara svart och sensormottagaren måste vara gömd

Mina första försök var att ha en vacker röd pipa. Men det här är knepigt! Det fungerade inte alls. Jag kom på att det kom utljus, plast- och mottagarsensorn var alltid på.

För att få ett bra resultat hade jag inget val att ändra färgen till svart.

Installera mottagaren ovanpå. Och dölj den klara plasten med svart färg, tejp eller tuggummi, svart silikon.

Installera sändaren på undersidan.. Kontrollera med en penna om sensorerna svarar bra. Kanske måste sändarens hål förstoras lite. Det beror på din skrivarkalibrering.

Jag har också bättre resultat i skuggan. Undvik direkt solljus.

Steg 11: Alternativ för sensorrör

Sensorrör alternativ
Sensorrör alternativ
Sensorrör alternativ
Sensorrör alternativ

Om du inte har en 3d -skrivare kan du göra samma sak med ett kopparrör. Det kommer att fungera mycket bra. Svårt att göra är hålet på exakt 3 tum och mottagaren och sändaren måste justeras.

Steg 12: En pellet om oscilloskop och kalibrering

En pellet om oscilloskop och kalibrering
En pellet om oscilloskop och kalibrering

Detta är en riktig pellet passerar kasta röret. Sond 1 gul är sensor 1. Sond 2 lila är sensor 2.

Tid/div är 50 us.

Vi kan räkna 6 divisioner på 50us. 50 us x 6 = 300 us (för 3 tum). 300 us x 4 = 1,2 ms för 1 fot

1/1.2ms = 833.33 ft/s

Vi kan också se att sensorn normalt är på 5v. Och kan vi blockera sändarljuset, sensorn faller till 0.

Det är sättet som uC startar och stoppar sin conter (timer1)

Men för att veta exakt om hastigheten var korrekt behövde jag ett sätt att mäta detta.

För att göra mjukvarukalibrering och testa enhetens noggrannhet använde jag en 10 mhz referensoscillator. Se min GPSDO på andra instruerbara.

Jag matar en annan atmega328 med denna 10 mhz. Och programmera den här i assembler för att skicka mig 2 pulser varje gång jag trycker på en knapp för att simulera en pellet. Precis som vi såg på bilden men istället för att ha en riktig pellet var det ett annat uC som skickade mig 2 pulser.

Varje gång tryckknappen trycktes skickades 1 puls och exakt 4 ms efter att en annan puls skickades.

På så sätt kan jag balansera programvarukompilatorn så att den alltid visar 1000 ft/s.

Steg 13: Mer …

Mer…
Mer…
Mer…
Mer…

Detta är min första prototyp av 2010.

För eventuella frågor eller felrapporter kan du mejla mig. Engelska eller franska. Jag ska göra mitt bästa för att hjälpa.

Rekommenderad: