Innehållsförteckning:
- Steg 1: Funktion
- Steg 2: Teori om drift och noggrannhet
- Steg 3: Schematisk och delar lista
- Steg 4: PCB Gerber -fil
- Steg 5: Löd din PCB
- Steg 6: Programmering av Atmega328p
- Steg 7: LCD -skärm
- Steg 8: STL -fil
- Steg 9: ROTERANDE KODARE
- Steg 10: Sensorrör
- Steg 11: Alternativ för sensorrör
- Steg 12: En pellet om oscilloskop och kalibrering
- Steg 13: Mer …
Video: Luftgevärs kronograf, kronoskop. 3D -tryckt: 13 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:38
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
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
Här är gerber -filer
Steg 5: 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
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
Installera lite tejp och anslut PCB och LCD tillsammans
Steg 8: 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
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
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
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
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 …
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:
Arduino Car Reverse Parking Alert System - Steg för steg: 4 steg
Arduino Car Reverse Parking Alert System | Steg för steg: I det här projektet kommer jag att utforma en enkel Arduino Car Reverse Parking Sensor Circuit med Arduino UNO och HC-SR04 Ultrasonic Sensor. Detta Arduino -baserade bilomvändningsvarningssystem kan användas för autonom navigering, robotavstånd och andra
Steg för steg PC -byggnad: 9 steg
Steg för steg PC -byggnad: Tillbehör: Hårdvara: ModerkortCPU & CPU -kylarePSU (strömförsörjningsenhet) Lagring (HDD/SSD) RAMGPU (krävs inte) CaseTools: Skruvmejsel ESD -armband/mathermisk pasta med applikator
Tre högtalarkretsar -- Steg-för-steg handledning: 3 steg
Tre högtalarkretsar || Steg-för-steg-handledning: Högtalarkretsen förstärker ljudsignalerna som tas emot från miljön till MIC och skickar den till högtalaren varifrån förstärkt ljud produceras. Här visar jag dig tre olika sätt att göra denna högtalarkrets med:
Nerf kronograf och eldhastighet: 7 steg
Nerf Chronograph and Rate of Fire Barrel: Introduktion Som pysslare är det alltid mycket tillfredsställande att se de numeriska resultaten av din pyssling. Många av oss har modifierat Nerf -vapen tidigare och vem älskar inte att slänga skumbitar över huset med över 100 fps? Efter att ha ändrat många Nerf -g
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)