Sommario:

Cronografo per carabina ad aria compressa, cronoscopio. Stampa 3D: 13 passaggi
Cronografo per carabina ad aria compressa, cronoscopio. Stampa 3D: 13 passaggi

Video: Cronografo per carabina ad aria compressa, cronoscopio. Stampa 3D: 13 passaggi

Video: Cronografo per carabina ad aria compressa, cronoscopio. Stampa 3D: 13 passaggi
Video: How I repaired The Setra Air Rifle + Resulting Chronoscope Tests 2024, Luglio
Anonim
Image
Image
Caratteristica
Caratteristica

Ciao a tutti, oggi rivisiteremo un progetto che ho fatto nel 2010. Un cronografo per fucile ad aria compressa. Questo dispositivo ti dirà la velocità di un proiettile. Palline, pallini o anche pallina di plastica morbida ad aria.

Nel 2010 ho comprato un fucile ad aria compressa per divertimento. Colpiva lattine, bottiglie, mira. So che la velocità di questa pistola era al massimo di 500 piedi/s. Perché è la legge del Canada. Sono disponibili alcuni fucili ad aria compressa più potenti, ma è necessario disporre di una licenza e non è possibile acquistarli su Walmart.

Ora che avevo questa licenza, potrei comprarne un'altra. Ma per farla breve, la stessa pistola era disponibile per gli Stati Uniti a 1000 piedi/s. CHE COSA!? La stessa pistola? si… In Canada il tratto ha un buco e la molla è più morbida.

La prima cosa da fare è riempire il buco. Questo è quello che ho fatto con la saldatura. La prossima cosa da fare è stata ordinare una molla di ricambio. Ma aspetta… qual è la velocità attuale del mio nuovo giocattolo? La primavera è davvero necessaria? Non lo so e voglio saperlo. Voglio saperlo ora ma come?

Ecco perché ho realizzato questo progetto. Tutto ciò di cui avevo bisogno erano 2 sensori, un uC e un display e siamo in affari.

La scorsa settimana, ho visto il mio vecchio cronografo blu su uno scaffale e mi sono detto: "Perché non condividere questo e fare un'istruzione con esso?" E a proposito, potremmo aumentare la precisione e aggiungere un indicatore della batteria. Metti 1 pulsante invece di 2 per on/off. Tutto il montaggio di superficie. Siamo ormai nel 2020!

Ecco fatto… cominciamo!

Passaggio 1: funzionalità

-Velocità pellet

-Velocità

-20 mhz in esecuzione, enorme precisione

-Spegnimento automatico

-Tensione della batteria visualizzata

-schema disponibile

-pc disponibile

-elenco delle parti disponibile

-STL disponibile

-Codice C disponibile

Fase 2: Teoria del funzionamento e dell'accuratezza

-Abbiamo un uC in esecuzione a 20Mhz. L'oscillatore utilizzato è un TCX0 +-2,5 ppm

-Abbiamo 2 sensori a 3 pollici di distanza l'uno dall'altro.

-Il proiettile ha colpito il primo sensore. uC inizio conteggio (timer1)

-Il proiettile ha colpito il secondo sensore. uC smetti di contare.

-uC controlla il valore del timer1, fa i calcoli e visualizza la velocità e la velocità.

Sto usando timer1 a 16 bit + il flag di overflow tov1. 17 bit totali per 131071 "tic" per un conteggio completo.

1/20 mhz = 50 ns. Ogni tic è 50ns

131071 x 50 ns = 6,55355 ms per fare 3 pollici.

6,55355 ms x 4 = 26,21 ms per eseguire 12 pollici.

1/26.21 ms = 38.1472637 piedi/s

Questa è la velocità più lenta che il dispositivo può misurare.

Perché 20MHz? Perché non usare l'8 mhz interno o anche un cristal?

Il mio primo dispositivo utilizzava l'oscillatore interno. Funzionava ma questo non era abbastanza preciso. La variazione è troppo grande. Un cristal è migliore ma la temperatura varia di frequenza. Non possiamo fare un dispositivo di misurazione accurato con quello. Inoltre, più la frequenza è alta, più tic verranno conteggiati per la stessa velocità. Il campionamento sarà migliore per avere una precisione molto buona. Poiché un tic non è divisibile, la perdita è minima se il ciclo di lavoro è rapido.

A 20 MHz abbiamo passi di 50 ns. Sappiamo quanto sono precisi 50 ns per un proiettile a 38 piedi/s.

38.1472637 ft/s divide per 131071 = 0, 000291042 piedi

0, 0003880569939956207 piedi x 12 = 0, 003492512 pollici

1/0, 003492512 = 286,37 ". In altre parole. A 50 piedi/s abbiamo una precisione di +- 1/286 " o +- 0, 003492512 pollici

Ma se il mio oscillatore è il peggiore e funziona a 20 mhz +2,5 ppm va bene? Scopriamolo…

2,5 ppm di 20 000 000 è: (20000000/1000000) x 2,5 = 20000050 Hz

Quindi, nel peggiore dei casi, abbiamo 50 clock in più sui 20 mhz. Sono 50 orologio su 1 secondo. Quanti tic in più sul timer1 se il pellet sta facendo la stessa velocità (38,1472637 piedi/s o 6,55 ms)?

1/2000050 = 49,999875 ns

49.999875 ns x 131071 = 6, 553533616 ms

6, 553533616 ms x 4 = 26,21413446 ms

1/26.21413446 ms = 38.14735907 piedi/sec

Quindi abbiamo 38.14735907 piedi/s invece di 38.1472637 piedi/s

Ora sappiamo che 2,5 ppm non influiscono sul risultato.

Ecco qualche esempio di diversa velocità

Per 1000 piedi/s

1000 piedi/s x 12 è 12000 pollici/s

1 secondo per 12000 "quanto tempo per fare 3"? 3x1/2000 = 250 us secondi

250 us / 50 ns = 5000 tic.

Timer1 sarà a 5000

uC eseguire i calcoli e viene visualizzato 1000 piedi/s. Fin qui tutto bene

Per 900 piedi/s

900 piedi/s è 10800 /s

3x1/10800 = 277,77 us

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

Il timer 1 sarà a 5555

uC fai i conti e verrà visualizzato 900, 09 invece di 900

Come mai ? perché il timer 1 è a 5555 e 0, 5555 è perso. I tic sul timer non sono divisibili.

Abbiamo un errore per 0, 09 su 900 ft/s

0, 09/900x100 = 0, 01% solo errore

Per 1500 piedi/s 1500 piedi/s è 18000 /s 3x1/10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Il timer 1 sarà a 3333

uC fai i conti e verrà visualizzato 1500.15 invece di 1500 è.15/1500x100= 0, 01%

Per 9000 piedi/s

9000 x 12 = 180000 pollici/s

3x1/180000 = 27.7777 noi

27,77 us / 50 ns = 555, 555

Timer1 sarà a 555 e verrà visualizzato 4/(1/555x50ns) 9009, verrà visualizzato 00

Qui l'errore è di 9 piedi/s su 9000 = 0, 1%

Come puoi vedere, l'errore % aumenta quando la velocità è maggiore. Ma resta < 0,1%

Questi risultati sono molto buoni.

Ma la precisione non è lineare. A 10.000 piedi/s è 0, 1%. La buona notizia è che non testiamo mai un pellet da 10.000 piedi/s.

Un'altra cosa da tenere a mente. Quando si verifica un interrupt, uC termina sempre l'ultima istruzione prima di entrare in interrupt. Questo è normale e tutti gli uC lo fanno. Se codi arduino, in C o anche in assembler. La maggior parte delle volte aspetterai in un ciclo eterno… di aspettare. Il problema è che in un ciclo trascorriamo 2 cicli. Normalmente questo non è importante. Ma nel nostro caso. S, ogni tic è importante. Diamo un'occhiata a un ciclo infinito:

assemblatore:

ciclo continuo:

ciclo rjmp

In C:

mentre (1){}

Infatti il compilatore C usa l'istruzione rjmp. RJMP è di 2 cicli.

Ciò significa che se l'interruzione si verifica nel primo ciclo, perdiamo un ciclo (tic) (50 ns).

Il mio modo per risolvere il problema è aggiungere molte istruzioni nop nel ciclo. NOP è 1 ciclo.

ciclo continuo:

no

no

no

no

no

ciclo rjmp

Se l'interrupt si verifica su un'istruzione nop. Stiamo bene. Se succede al secondo ciclo di istruzione rjmp siamo a posto. Ma se succede al primo ciclo di istruzioni rjmp, perderemo un tic. Sì, sono solo 50 ns ma come puoi vedere sopra, 50 ns su 3 pollici non sono niente. Non possiamo correggerlo via software perché non sappiamo quando si verifica esattamente l'interruzione. Ecco perché nel codice vedrai molte istruzioni nop. Ora sono abbastanza sicuro che l'interruzione cadrà su un'istruzione nop. Se aggiungo 2000 nop ho 0, 05% per cadere sull'istruzione rjmp.

Un'altra cosa da tenere a mente. Quando si verifica l'interruzione. Il compilatore fa molti push and pull. Ma è sempre lo stesso numero. Quindi ora possiamo fare una correzione software.

Per concludere su questo:

La precisione per un pellet medio di 1000 ft/s è 0, 01%

100 volte più preciso dell'altro 1% sul mercato. La frequenza è più alta e con TCXO, più accurata

Ad esempio, l'1% di 1000 piedi/s è più o meno 10 piedi/s. È una differenza enorme.

Passaggio 3: schema e elenco delle parti

Schema e lista delle parti
Schema e lista delle parti

Qui ho implementato il mio circuito on/off con un solo pulsante. (vedi la mia ultima istruzione) Questo circuito è molto utile e funziona molto bene.

Sto usando un atmega328p. Questo è programmato in C.

Il display è uno standard lcd a 2 linee compatibile con HD44780. Viene utilizzata la modalità a 4 bit.

Un regolatore da 3,3 V viene utilizzato per fornire tensione al TCXO 20 mhz.

D1 è per la retroilluminazione dell'affissione a cristalli liquidi. Opzionale. La batteria durerà più a lungo se non installi D1.

Tutti i resistori e i cappucci sono in confezione 0805

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,2 k

R5 160

R6 160

R7 1M

R8 1M

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Display lcd 2 righe HD44780. Non è necessario acquistare il modulo i2c.

Sensori:

2x Emettitore OP140A

2x Ricevitore OPL530

Encoder: PEC11R-4215K-S0024 *Non dimenticare di aggiungere 4 resistori da 10k e 2x.01uf per il filtro dell'encoder. vedi l'immagine sotto

Passaggio 4: file Gerber PCB

File Gerber PCB
File Gerber PCB
File Gerber PCB
File Gerber PCB
File Gerber PCB
File Gerber PCB
File Gerber PCB
File Gerber PCB

Ecco i file gerber

Passaggio 5: saldare il PCB

Salda il tuo PCB
Salda il tuo PCB
Salda il tuo PCB
Salda il tuo PCB
Salda il tuo PCB
Salda il tuo PCB

Con l'aiuto schematico, salda tutti i tuoi componenti sul pcb. Ogni parte o scritta su pcb, r1, r2… e così via.

Non ho installato D1. Questo è per la retroilluminazione lcd. È bello ma la durata della batteria ne risente. Quindi scelgo di tenere spenta la retroilluminazione dell'LCD.

Passaggio 6: programmazione dell'Atmega328p

Programmazione dell'Atmega328p
Programmazione dell'Atmega328p

Controllare qui al punto 12 per programmare l'atmega328p. Fornisco qui il file.hex per questo.

Ecco il programma avrdude pronto per programmare file batch. Fai clic solo sul programma usbasp.bat e il tuo usbasp è installato correttamente. Tutto verrà eseguito automaticamente, incluso il bit del fusibile.

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

In questo progetto condivido anche il codice sorgente C. Tieni presente che alcune note possono essere in francese.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…

Passaggio 7: display LCD

Display LCD
Display LCD
Display LCD
Display LCD

Installa del nastro e collega pcb e lcd insieme

Passaggio 8: file STL

File STL
File STL
File STL
File STL
File STL
File STL

file stl

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

È necessario il supporto per custodia, tubo sensore e supporto per fucile.

Ho stampato tutto a 0,2 mm di altezza.

Passaggio 9: ENCODER ROTANTE

ENCODER ROTANTE
ENCODER ROTANTE
ENCODER ROTANTE
ENCODER ROTANTE
ENCODER ROTANTE
ENCODER ROTANTE

Questo codificatore rotante è collegato al connettore ISP. serve per modificare il peso del pellet e per accendere e spegnere il dispositivo.

vcc isp pin 2 (resistenza di pull up)

Il terminale A (giallo) va al pin 1 dell'ISP

Il terminale B (verde) va al pin 3 dell'ISP

Terminale C (terra) isp pin 6

Sto aggiungendo 2 immagini per vedere la differenza tra avere un filtro e nessun filtro. Puoi vedere facilmente la differenza tra i due.

Il pulsante va al connettore SW della scheda.

Passaggio 10: tubo sensore

Tubo sensore
Tubo sensore
Tubo sensore
Tubo sensore
Tubo sensore
Tubo sensore

IMPORTANTE:

Il tubo del sensore deve essere nero e il ricevitore del sensore deve essere nascosto

Il mio primo tentativo è stato quello di avere una bella pipa rossa. Ma questo è complicato! Non funzionava affatto. Ho capito che la luce esterna entrava dalla plastica e il sensore del ricevitore era sempre acceso.

Per avere un buon risultato non avevo scelta di cambiare il colore in nero.

Installa il ricevitore sopra. E nascondi la plastica trasparente con vernice nera, nastro adesivo o gomma, silicone nero.

Installare l'emettitore sul fondo. Controllare con una penna se i sensori rispondono bene. Forse il foro dell'emettitore dovrà essere allargato un po'. dipenderà dalla calibrazione della stampante.

Ho anche un risultato migliore all'ombra. Evitare la luce solare diretta.

Passaggio 11: alternativa al tubo del sensore

Alternativa al tubo del sensore
Alternativa al tubo del sensore
Alternativa al tubo del sensore
Alternativa al tubo del sensore

Se non hai una stampante 3D, puoi fare lo stesso con un tubo di rame. Funzionerà molto bene per. La cosa difficile da fare è il foro a esattamente 3 pollici e ricevitore ed emettitore devono essere allineati.

Passaggio 12: un pellet sull'oscilloscopio e calibrazione

Un pellet su oscilloscopio e calibrazione
Un pellet su oscilloscopio e calibrazione

Questo è un vero pellet che passa attraverso il tubo. La sonda 1 gialla è il sensore 1. La sonda 2 viola è il sensore 2.

Il tempo/div è 50 us.

Possiamo contare 6 divisioni di 50us. 50 us x 6 = 300 us (per 3 pollici). 300 us x 4 = 1.2 ms per 1 piede

1/1,2 ms = 833,33 piedi/s

Possiamo anche vedere che il sensore è normalmente a 5v. E possiamo bloccare la luce dell'emettitore, il sensore scende a 0.

È il modo in cui th uC avvia e ferma il suo contatore (timer1)

Ma per sapere esattamente se la velocità fosse accurata, avevo bisogno di un modo per misurarlo.

Per eseguire la calibrazione del software e testare la precisione di questo dispositivo, ho utilizzato un oscillatore di riferimento da 10 mhz. Vedi il mio GPSDO su altri istruibili.

Alimento un altro atmega328 con questo 10 mhz. E programma questo in assembler per inviarmi 2 impulsi ogni volta che premo un pulsante per simulare un pellet. Esattamente come abbiamo visto in foto ma invece ad avere un vero pellet era un altro uC che mi mandava 2 impulsi.

Ad ogni pressione del pulsante è stato inviato 1 impulso ed esattamente 4 ms dopo l'invio di un altro impulso.

In questo modo, sono in grado di bilanciare il compilatore software per visualizzare sempre 1000 piedi/s.

Passaggio 13: altro…

Di più…
Di più…
Di più…
Di più…

Questo è il mio primo prototipo del 2010.

Per qualsiasi domanda o segnalazione di errore puoi inviarmi un'e-mail. inglese o francese. Farò del mio meglio per aiutare.

Consigliato: