Índice:

Cronógrafo de rifle de ar, cronoscópio. Impresso em 3D: 13 etapas
Cronógrafo de rifle de ar, cronoscópio. Impresso em 3D: 13 etapas

Vídeo: Cronógrafo de rifle de ar, cronoscópio. Impresso em 3D: 13 etapas

Vídeo: Cronógrafo de rifle de ar, cronoscópio. Impresso em 3D: 13 etapas
Vídeo: How I repaired The Setra Air Rifle + Resulting Chronoscope Tests 2024, Dezembro
Anonim
Image
Image
Recurso
Recurso

Olá a todos, hoje revisitaremos um projeto que realizei em 2010. Um cronógrafo de rifle de ar. Este dispositivo irá lhe dizer a velocidade de um projétil. Pellet, BB ou mesmo bola de plástico BB macio de ar.

Em 2010 comprei uma espingarda de ar comprimido para me divertir. Estava batendo em latas, garrafas, pontaria. Eu sei que a velocidade desta arma era de no máximo 500 pés / s. Porque é a lei do Canadá. Um rifle de ar mais forte está disponível, mas você precisa ter uma licença e não pode comprá-lo no Walmart.

Agora que eu tinha essa licença, poderia comprar outra. Mas, resumindo, a mesma arma estava disponível para os EUA a 1000 pés / s. O QUE!? A mesma arma? sim… No Canadá, o curso tem um buraco e a mola é mais macia.

A primeira coisa a fazer é preencher o buraco. Foi o que fiz com a solda. A próxima coisa a fazer foi pedir uma mola de reposição. Mas espere … qual é a velocidade atual do meu novo brinquedo? A mola é realmente necessária? Não sei e quero saber. Eu quero saber agora, mas como?

É por isso que fiz este projeto. Tudo que eu precisava era de 2 sensores, um uC e um display e estamos no negócio.

Semana passada, vi meu velho cronógrafo azul em uma prateleira e falei comigo mesmo: "Por que não compartilho isso e faço um instrutivo com ele?" E, a propósito, poderíamos aumentar a precisão e adicionar um indicador de bateria. Coloque 1 botão em vez de 2 para ligar / desligar. Toda montagem em superfície. Estamos agora em 2020!

Então aí está … vamos começar!

Etapa 1: recurso

- Velocidade da pelota

-Velocidade

-20 mhz em execução, grande precisão

-Auto off

- Tensão da bateria exibida

- esquemático disponível

-pcb disponível

-lista de peças disponível

-STL disponível

-C código disponível

Etapa 2: Teoria de Operação e Precisão

-Temos um uC rodando a 20Mhz. O oscilador usado é um TCX0 + -2,5 ppm

-Temos 2 sensores a 3 polegadas de distância um do outro.

-O projétil atingiu o primeiro sensor. uC começar a contar (cronômetro1)

-O projétil atingiu o segundo sensor. uC pare de contar.

-uC verifique o valor do timer1, faça as contas e exiba a velocidade e a velocidade.

Estou usando o timer1 de 16 bits + o sinalizador de estouro tov1. Total de 17 bits para 131071 "tique" para uma contagem completa.

1/20 MHz = 50 ns. Cada tique é de 50 ns

131071 x 50 ns = 6,55355 ms para fazer 3 polegadas.

6,55355 ms x 4 = 26,21 ms para fazer 12 polegadas.

1 / 26,21 ms = 38,1472637 pés / s

Esta é a velocidade mais lenta que o dispositivo pode medir.

Por que 20 MHz? Por que não usar 8 MHz interno ou mesmo um cristal?

Meu primeiro dispositivo estava usando o oscilador interno. Estava funcionando, mas este não era preciso o suficiente. A variação é muito grande. Um cristal é melhor, mas a temperatura varia com a freqüência. Não podemos fazer um dispositivo de medição preciso com isso. Além disso, quanto mais alta a frequência, mais tiques serão contados para a mesma velocidade. A amostragem será melhor se tiver uma precisão muito boa. Como um tique não é divisível, a perda é pequena se o ciclo de trabalho for rápido.

Em 20 MHz, temos etapas de 50 ns. Nós sabemos o quão preciso é 50 ns para um projétil a 38 pés / s.

38,1472637 pés / s dividido por 131071 = 0, 000291042 pés

0, 0003880569939956207 pés x 12 = 0, 003492512 polegadas

1/0, 003492512 = 286,37 ". Em outras palavras. A 50 pés / s, temos uma precisão de + - 1/286" ou + - 0, 003492512 polegadas

Mas se meu oscilador for o pior e rodar a 20 MHz +2,5 ppm, está tudo bem? Vamos descobrir…

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

Portanto, na pior das hipóteses, temos mais 50 relógios em 20 MHz. São 50 horas em 1 segundo. Quantos tiques a mais no timer1 se o chumbo estiver na mesma velocidade (38,1472637 pés / s ou 6,55ms)?

1/20000050 = 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 pés / s

Portanto, temos 38,14735907 pés / s em vez de 38,1472637 pés / s

Agora sabemos que 2,5 ppm não afeta o resultado.

Aqui está um exemplo de velocidade diferente

Para 1000 pés / s

1000 pés / s x 12 é 12000 polegadas / s

1 segundo para 12000 "quanto tempo para fazer 3"? 3x1 / 12000 = 250 us segundos

250 us / 50 ns = 5000 tique.

Timer1 estará em 5000

uC faça as contas e 1000 pés / s é exibido. Até agora tudo bem

Para 900 pés / s

900 pés / s é 10800 / s

3x1 / 10800 = 277,77 us

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

O cronômetro 1 estará em 5555

uC faça as contas e 900, 09 será exibido em vez de 900

Porque ? porque o temporizador 1 está em 5555 e 0, 5555 está perdido. Tic on timer não é divisível.

Temos um erro de 0, 09 em 900 pés / s

0, 09 / 900x100 = 0, 01% de erro apenas

Para 1.500 pés / s 1.500 pés / s é 18.000 / s 3x1 / 10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Timer 1 estará em 3333

uC faça as contas e 1500,15 será exibido em vez de 1500 é 0,15 / 1500x100 = 0, 01%

Para 9000 pés / s

9000 x 12 = 180000 polegadas / s

3x1 / 180000 = 27,7777 us

27,77 us / 50 ns = 555, 555

Timer1 estará em 555 e 4 / (1 / 555x50ns) será exibido 9009, 00 será exibido

Aqui o erro é de 9 pés / s em 9.000 = 0, 1%

Como você pode ver, a porcentagem de erro aumenta quando a velocidade é maior. Mas fique <0,1%

Esses resultados são muito bons.

Mas a precisão não é linear. A 10.000 pés / s, é 0, 1%. A boa notícia é que nunca testamos uma pelota de 10.000 pés / s.

Outra coisa a ter em mente. Quando uma interrupção acontece, uC sempre termina a última instrução antes de entrar na interrupção. Isso é normal e todos os uC fazem isso. Se você codificar arduino, em C ou mesmo em assembler. Na maioria das vezes você vai esperar em um loop eterno … para esperar. O problema é que em um loop passamos 2 ciclos. Normalmente, isso não é importante. Mas no nosso caso. SIM, cada tique é importante. Vejamos um loop infinito:

montador:

ciclo:

loop rjmp

Em C:

enquanto (1) {}

Na verdade, o compilador C usa a instrução rjmp. RJMP é de 2 ciclos.

Isso significa que se a interrupção acontecer no primeiro ciclo, perdemos um ciclo (tic) (50ns).

Minha maneira de consertar isso é adicionar muitas instruções nop no loop. NOP é 1 ciclo.

ciclo:

nop

nop

nop

nop

nop

loop rjmp

Se a interrupção acontecer em uma instrução nop. Nós estamos bem. Se isso acontecer no segundo ciclo da instrução rjmp, tudo bem. Mas se acontecer no primeiro ciclo da instrução rjmp, perderemos um tique. Sim, são apenas 50 ns, mas como você pode ver acima, 50 ns em 3 polegadas não é nada. Não podemos corrigir isso por software porque não sabemos exatamente quando a interrupção aconteceu. É por isso que no código você verá muitas instruções nop. Agora tenho quase certeza de que a interrupção cairá em uma instrução nop. Se eu adicionar 2000 nop, tenho 0, 05% para cair na instrução rjmp.

Outra coisa a ter em mente. Quando a interrupção acontecer. O compilador faz muitos push e pull. Mas é sempre o mesmo número. Agora podemos fazer uma correção de software.

Para concluir:

A precisão para uma pelota média de 1000 pés / s é 0, 01%

100x mais preciso do que outro 1% do mercado. A frequência é maior e com TCXO, mais precisa

Por exemplo, 1% de 1000 pés / s é mais ou menos 10 pés / s. É uma grande diferença.

Etapa 3: esquema e lista de peças

Esquemático e lista de peças
Esquemático e lista de peças

Aqui eu implementei meu circuito de um botão liga / desliga. (veja meu último instrutível) Este circuito é muito prático e funciona muito bem.

Estou usando um atmega328p. Este é programado em C.

A tela é compatível com lcd HD44780 padrão de 2 linhas. O modo de 4 bits é usado.

Um regulador de 3,3 V é usado para fornecer tensão ao TCXO 20mhz.

D1 é para luz de fundo do LCD. Opcional. A bateria vai durar mais se você não instalar o D1.

Todos os resistores e tampas são pacote 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,2k

R5 160

R6 160

R7 1M

R8 1M

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Display LCD de 2 linhas HD44780. Não há necessidade de comprar o módulo i2c.

Sensores:

2x Emissor OP140A

2x Reciever OPL530

Codificador: PEC11R-4215K-S0024 * Não se esqueça de adicionar 4 resistores de 10k e 2x.01uf para fazer o filtro do codificador. veja a foto abaixo

Etapa 4: Arquivo Gerber PCB

Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB
Arquivo Gerber PCB

Aqui estão os arquivos gerber

Etapa 5: Solde seu PCB

Solde seu PCB
Solde seu PCB
Solde seu PCB
Solde seu PCB
Solde seu PCB
Solde seu PCB

Com ajuda esquemática, solde todos os seus componentes na pcb. Cada parte ou escrita em pcb, r1, r2 … e assim por diante.

Eu não instalei o D1. Isso é para a luz de fundo do LCD. É lindo, mas a vida da bateria é afetada. Então, eu escolho manter a luz de fundo do LCD desligada.

Etapa 6: Programando o Atmega328p

Programando o Atmega328p
Programando o Atmega328p

Verifique aqui na etapa 12 para programar o atmega328p. Eu forneço aqui o arquivo.hex para isso.

Aqui está o programa avrdude pronto para programar o arquivo em lote. Apenas clique no programa usbasp.bat e o seu usbasp será instalado corretamente. Tudo será feito automaticamente, incluindo o bit de fusível.

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

Neste projeto estou compartilhando também o código-fonte C. Esteja ciente de que algumas notas nele podem estar em french.https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Etapa 7: display LCD

Tela de LCD
Tela de LCD
Tela de LCD
Tela de LCD

Instale um pouco de fita e conecte pcb e lcd juntos

Etapa 8: Arquivo STL

Arquivo STL
Arquivo STL
Arquivo STL
Arquivo STL
Arquivo STL
Arquivo STL

arquivo stl

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

O suporte é necessário para o invólucro, o tubo do sensor e o porta-rifle.

Todos imprimi com 0,2 mm de altura.

Etapa 9: CODIFICADOR ROTATIVO

CODIFICADOR ROTATIVO
CODIFICADOR ROTATIVO
CODIFICADOR ROTATIVO
CODIFICADOR ROTATIVO
CODIFICADOR ROTATIVO
CODIFICADOR ROTATIVO

Este codificador rotativo é conectado ao conector ISP. é usado para alterar o peso do pellet e para ligar e desligar o dispositivo.

vcc isp pino 2 (resistor pull up)

Terminal A (amarelo) vá para o pino 1 do ISP

Terminal B (verde) vá para o pino 3 do ISP

Terminal C (gnd) ISP pino 6

Estou adicionando 2 fotos para ver a diferença entre ter um filtro e nenhum filtro. Você pode ver facilmente a diferença entre os dois.

O botão de pressão vai para o conector PCB SW.

Etapa 10: tubo sensor

Tubo Sensor
Tubo Sensor
Tubo Sensor
Tubo Sensor
Tubo Sensor
Tubo Sensor

IMPORTANTE:

O tubo do sensor deve ser preto e o receptor do sensor deve ser escondido

Minhas primeiras tentativas foram fazer um lindo cachimbo vermelho. Mas isso é complicado! Não estava funcionando de jeito nenhum. Eu descobri que a luz externa estava entrando pelo plástico e o sensor do receptor estava sempre ligado.

Para ter um bom resultado não tive escolha de mudar a cor para preto.

Instale o receptor na parte superior. E esconda o plástico transparente com tinta preta, fita ou goma de silicone preto.

Instale o emissor na parte inferior. Verifique com uma caneta se os sensores estão respondendo bem. Talvez o orifício do emissor precise ser um pouco alargado. dependerá da calibração da sua impressora.

Também tenho melhor resultado na sombra. Evite luz solar direta.

Etapa 11: Alternativa de tubo sensor

Alternativa de tubo sensor
Alternativa de tubo sensor
Alternativa de tubo sensor
Alternativa de tubo sensor

Se você não tiver uma impressora 3D, pode fazer o mesmo com um tubo de cobre. Vai funcionar muito bem para. A coisa difícil de fazer é o orifício com exatamente 3 polegadas e o receptor e o emissor devem estar alinhados.

Etapa 12: Um Pellet no Osciloscópio e Calibração

Uma pastilha no osciloscópio e calibração
Uma pastilha no osciloscópio e calibração

Esta é uma pelota real passando pelo cano. A sonda 1 amarela é o sensor 1. A sonda 2 roxa é o sensor 2.

Tempo / div é 50 us.

Podemos contar 6 divisões de 50us. 50 us x 6 = 300 us (para 3 polegadas). 300 us x 4 = 1,2 ms para 1 pé

1 / 1,2ms = 833,33 pés / s

Também podemos ver que o sensor está normalmente em 5v. E podemos bloquear a luz emissora, o sensor cai para 0.

É a maneira como você inicia e interrompe seu contador (temporizador1)

Mas, para saber exatamente se a velocidade era exata, eu precisava encontrar uma maneira de medir isso.

Para fazer a calibração do software e testar a precisão deste dispositivo, usei um oscilador de referência de 10 MHz. Veja meu GPSDO em outro instrutível.

Eu alimento outro atmega328 com esse 10 mhz. E programe este aqui no assembler para me enviar 2 pulsos cada vez que eu apertar um botão para simular um chumbinho. Exatamente como vimos na foto, mas em vez de ter uma pelota real, foi outro uC me enviando 2 pulsos.

Cada vez que o botão era pressionado, 1 pulso era enviado e exatamente 4 ms após o envio de outro pulso.

Dessa forma, posso balancear o compilador de software para ter sempre 1000 pés / s exibidos.

Etapa 13: Mais …

Mais…
Mais…
Mais…
Mais…

Este é meu primeiro protótipo de 2010.

Para qualquer dúvida ou relatório de erro, você pode me enviar um e-mail. Inglês ou francês. Vou fazer o meu melhor para ajudar.

Recomendado: