Inhaltsverzeichnis:

Luftgewehr-Chronograph, Chronoskop. 3D gedruckt - Gunook
Luftgewehr-Chronograph, Chronoskop. 3D gedruckt - Gunook

Video: Luftgewehr-Chronograph, Chronoskop. 3D gedruckt - Gunook

Video: Luftgewehr-Chronograph, Chronoskop. 3D gedruckt - Gunook
Video: Geschoss-Geschwindigkeits-Messgerät (Chrony) mit ohne Namen. 2024, November
Anonim
Image
Image
Besonderheit
Besonderheit

Hallo zusammen, heute besuchen wir ein Projekt, das ich 2010 durchgeführt habe. Ein Air Rifle Chronograph. Dieses Gerät sagt Ihnen die Geschwindigkeit eines Projektils. Pellet-, BB- oder sogar luftweicher BB-Kunststoffball.

2010 habe ich mir zum Spaß ein Luftgewehr gekauft. Schlagte Dosen, Flaschen, zielen. Ich weiß, dass die Geschwindigkeit dieser Waffe maximal 500 Fuß/s betrug. Weil es das kanadische Gesetz ist. Einige stärkere Luftgewehre sind erhältlich, aber Sie benötigen eine Lizenz und können diese nicht bei Walmart kaufen.

Jetzt hatte ich diese Lizenz, ich konnte mir eine andere kaufen. Aber kurze Geschichte, die gleiche Waffe stand den USA mit 1000 Fuß / s zur Verfügung. WAS!? Die gleiche Waffe? ja… In Kanada hat der Hub ein Loch und die Feder ist weicher.

Das erste, was zu tun ist, ist das Loch zu füllen. Das habe ich mit Lötzinn gemacht. Als nächstes musste eine Ersatzfeder bestellt werden. Aber warte… wie hoch ist die aktuelle Geschwindigkeit meines neuen Spielzeugs? Ist die Feder wirklich notwendig? Ich weiß es nicht und ich möchte es wissen. Ich will es jetzt wissen, aber wie?

Deshalb habe ich dieses Projekt gemacht. Alles was ich brauchte waren 2 Sensoren, ein uC und ein Display und wir sind im Geschäft.

Letzte Woche sah ich meinen alten blauen Chronographen in einem Regal und rede mit mir selbst: "Warum teile ich das nicht und mache eine Anleitung damit?" Übrigens könnten wir die Genauigkeit erhöhen und eine Batterieanzeige hinzufügen. Setzen Sie 1 Taste anstelle von 2 zum Ein-/Ausschalten. Alle Oberflächenmontage. Wir sind jetzt im Jahr 2020!

Da ist es also… fangen wir an!

Schritt 1: Funktion

-Pelletgeschwindigkeit

-Geschwindigkeit

-20 MHz Laufen, enorme Genauigkeit

-Automatisch aus

-Batteriespannung angezeigt

-Schema vorhanden

-Platine verfügbar

-Stückliste vorhanden

-STL verfügbar

-C-Code verfügbar

Schritt 2: Betriebstheorie und Genauigkeit

-Wir haben einen uC mit 20Mhz. Der verwendete Oszillator ist ein TCX0 +-2,5 ppm

-Wir haben 2 Sensoren, die 3 Zoll voneinander entfernt sind.

-Das Projektil traf den ersten Sensor. uC Zählen starten (Timer1)

-Das Projektil traf den zweiten Sensor. uC hör auf zu zählen.

-uC Timer1-Wert überprüfen, rechnen und Geschwindigkeit und Geschwindigkeit anzeigen.

Ich verwende 16-Bit-Timer1 + das Überlauf-Flag tov1. 17 Bit insgesamt für 131071 "tic" für eine vollständige Zählung.

1/20 MHz = 50 ns. Jeder Tic ist 50ns

131071 x 50 ns = 6,55355 ms für 3 Zoll.

6,55355 ms x 4 = 26,21 ms für 12 Zoll.

1/26.21 ms = 38.1472637 Fuß/s

Dies ist die langsamste Geschwindigkeit, die das Gerät messen kann.

Warum 20 MHz? Warum nicht die internen 8 MHz oder gar einen Kristall verwenden?

Mein erstes Gerät benutzte den internen Oszillator. Hat funktioniert, aber dieser war nicht genau genug. Die Variation ist zu groß. Ein Kristall ist besser, aber die Temperatur variiert in der Frequenz. Damit können wir kein genaues Messgerät machen. Je höher die Frequenz ist, desto mehr Tics werden für die gleiche Geschwindigkeit gezählt. Die Probenahme wird besser sein, um eine sehr gute Genauigkeit zu haben. Da ein Tic nicht teilbar ist, ist der Verlust gering, wenn der Arbeitszyklus schnell ist.

Bei 20 MHz haben wir Schritte von 50 ns. Wissen wir, wie genau 50 ns für ein Projektil bei 38 ft/s sind?

38,1472637 Fuß/s geteilt durch 131071 = 0, 000291042 Fuß

0, 0003880569939956207 Fuß x 12 = 0, 003492512 Zoll

1/0, 003492512 = 286,37". Mit anderen Worten. Bei 50 ft/s haben wir eine Genauigkeit von +- 1/286" oder +- 0, 003492512 Zoll

Aber wenn mein Oszillator der schlechteste ist und mit 20 MHz +2,5 ppm läuft, ist das in Ordnung? Lass es uns herausfinden…

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

Im schlimmsten Fall haben wir also 50 weitere Takte auf 20 MHz. Es ist 50 Uhr auf 1 Sekunde. Wie viele Ticks mehr auf Timer1, wenn Pellet die gleiche Geschwindigkeit macht (38,1472637 Fuß/s oder 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 Fuß/s

Wir haben also 38,14735907 Fuß/s statt 38,1472637 Fuß/s

Jetzt wissen wir, dass 2,5 ppm das Ergebnis nicht beeinflussen.

Hier ist ein Beispiel für unterschiedliche Geschwindigkeiten

Für 1000 Fuß/s

1000 ft/s x 12 ist 12000 Zoll/s

1 Sekunde für 12000 "Wie oft muss ich 3" machen? 3x1/12000 = 250 us Sekunden

250 us / 50 ns = 5000 tic.

Timer1 wird bei 5000. sein

uC machen die Mathematik und 1000 ft/s wird angezeigt. So weit, ist es gut

Für 900 ft/s

900 ft/s ist 10800 /s

3x1/10800 = 277,77 us

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

Timer 1 wird bei 5555. stehen

uC mach die Mathematik und 900, 09 wird anstelle von 900. angezeigt

Wieso den ? weil Timer 1 bei 5555 und 0 ist, geht 5555 verloren. Tic auf Timer sind nicht teilbar.

Wir haben einen Fehler von 0, 09 auf 900 ft/s

0, 09/900x100 = 0, 01% nur Fehler

Für 1500 ft/s1500 ft/s ist 18000 /s 3x1/10800 = 166,66 us

166,66 us / 50 ns = 3333,333 Tic Timer 1 wird auf 3333. stehen

uC mach die Mathematik und 1500.15 wird anstelle von 1500 angezeigt, es ist.15/1500x100= 0, 01%

Für 9000 Fuß/s

9000 x 12 = 180000 Zoll / s

3x1/180000 = 27.7777 us

27,77 us / 50 ns = 555, 555

Timer1 wird auf 555 stehen und 4/(1/555x50ns) wird angezeigt 9009, 00 wird angezeigt

Hier beträgt der Fehler 9 Fuß/s bei 9000 = 0, 1%

Wie Sie sehen, steigt der Fehler in %, wenn die Geschwindigkeit höher ist. Aber bleib < 0,1%

Diese Ergebnisse sind sehr gut.

Aber Genauigkeit ist nicht linear. Bei 10000 ft/s sind es 0, 1 %. Eine gute Neuigkeit ist, dass wir nie ein 10 000 ft/s Pellet testen.

Eine andere Sache, die Sie beachten sollten. Wenn ein Interrupt auftritt, beendet uC immer die letzte Anweisung, bevor ein Interrupt eingegeben wird. Dies ist normal und alle uC tun dies. Wenn Sie Arduino codieren, in C oder sogar Assembler. Die meiste Zeit wirst du in einer ewigen Schleife warten… um zu warten. Das Problem ist, dass wir in einer Schleife 2 Zyklen verbringen. Normalerweise ist dies nicht wichtig. Aber in unserem Fall. JA, jeder Tic ist wichtig. Schauen wir uns eine Endlosschleife an:

Monteur:

Schleife:

rjmp-Schleife

In C:

während (1){}

Tatsächlich verwendet der C-Compiler den rjmp-Befehl. RJMP ist 2 Zyklen.

Das heißt, wenn der Interrupt im ersten Zyklus passiert, verlieren wir einen Zyklus (tic) (50 ns).

Mein Weg, dies zu beheben, besteht darin, viele nop-Anweisungen in die Schleife einzufügen. NOP ist 1 Zyklus.

Schleife:

nein

nein

nein

nein

nein

rjmp-Schleife

Wenn der Interrupt bei einem nop-Befehl auftritt. Uns geht es gut. Wenn es im zweiten Zyklus des rjmp-Befehls passiert, sind wir in Ordnung. Aber wenn es beim ersten Zyklus des rjmp-Befehls passiert, verlieren wir einen Tic. Ja, es sind nur 50 ns, aber wie Sie oben sehen können, sind 50 ns auf 3 Zoll nichts. Wir können dies nicht per Software korrigieren, da wir nicht genau wissen, wann der Interrupt passiert. Aus diesem Grund sehen Sie im Code viele nop-Anweisungen. Jetzt bin ich mir ziemlich sicher, dass der Interrupt auf einen nop-Befehl fällt. Wenn ich 2000 nop hinzufüge, habe ich 0, 05%, um auf die rjmp-Anweisung zu fallen.

Eine andere Sache, die Sie beachten sollten. Wenn Unterbrechung passieren. Compiler tun viele Push und Pull. Aber es ist immer die gleiche Nummer. Jetzt können wir eine Softwarekorrektur vornehmen.

Um dies abzuschließen:

Die Genauigkeit für ein durchschnittliches Pellet von 1000 ft/s beträgt 0, 01%

100x genauer als andere 1% auf dem Markt. Die Frequenz ist höher und mit TCXO genauer

Zum Beispiel ist 1 % von 1000 ft/s mehr oder weniger 10 ft/s. Es ist ein riesiger Unterschied.

Schritt 3: Schaltplan und Teileliste

Schaltplan und Teileliste
Schaltplan und Teileliste

Hier habe ich meine Ein- / Aus-Schaltung mit einem Druckknopf implementiert. (Siehe mein letztes instructable) Diese Schaltung ist sehr praktisch und funktioniert sehr gut.

Ich verwende einen atmega328p. Dieser ist in C programmiert.

Das Display ist mit einem standardmäßigen 2-Zeilen-LCD-HD44780 kompatibel. Es wird der 4-Bit-Modus verwendet.

Ein 3,3-V-Regler wird verwendet, um den TCXO 20 MHz mit Spannung zu versorgen.

D1 ist für LCD-Hintergrundbeleuchtung. Optional. Der Akku hält länger, wenn Sie D1 nicht installieren.

Alle Widerstände und Kappen sind 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,2 k

R5 160

R6 160

R7 1M

R8 1M

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

LCD-Display mit 2 Zeilen HD44780. Das i2c-Modul muss nicht gekauft werden.

Sensoren:

2x Sender OP140A

2x Empfänger OPL530

Encoder: PEC11R-4215K-S0024 * Vergessen Sie nicht, 4x 10k Widerstände und 2x.01uf hinzuzufügen, um den Encoderfilter zu machen. siehe Bild unten

Schritt 4: PCB-Gerber-Datei

PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei
PCB-Gerber-Datei

Hier sind Gerber-Dateien

Schritt 5: Löten Sie Ihre Leiterplatte

Löten Sie Ihre Leiterplatte
Löten Sie Ihre Leiterplatte
Löten Sie Ihre Leiterplatte
Löten Sie Ihre Leiterplatte
Löten Sie Ihre Leiterplatte
Löten Sie Ihre Leiterplatte

Löten Sie mit schematischer Hilfe alle Ihre Komponenten auf der Platine. Jeder Teil oder auf Platine geschrieben, r1, r2… und so weiter.

D1 habe ich nicht installiert. Dies ist für die LCD-Hintergrundbeleuchtung. Es ist schön, aber die Akkulaufzeit ist beeinträchtigt. Also lasse ich die LCD-Hintergrundbeleuchtung aus.

Schritt 6: Programmierung des Atmega328p

Programmierung des Atmega328p
Programmierung des Atmega328p

Überprüfen Sie hier bei Schritt 12, um den atmega328p zu programmieren. Ich stelle hier die.hex-Datei dafür bereit.

Hier ist das avrdude-Programm, das bereit ist, Batch-Dateien zu programmieren. Klicken Sie nur auf das Programm usbasp.bat und Ihr usbasp ist korrekt installiert. Alles wird automatisch gemacht, einschließlich des Sicherungsbits.

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

In diesem Projekt teile ich auch den C-Quellcode. Beachten Sie, dass einige Hinweise auf Französisch sein können.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…

Schritt 7: LCD-Anzeige

LCD Bildschirm
LCD Bildschirm
LCD Bildschirm
LCD Bildschirm

Bringen Sie etwas Klebeband an und verbinden Sie Leiterplatte und LCD miteinander

Schritt 8: STL-Datei

STL-Datei
STL-Datei
STL-Datei
STL-Datei
STL-Datei
STL-Datei

stl-Datei

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

Für Gehäuse, Sensorrohr und Gewehrhalter wird eine Abstützung benötigt.

Ich habe alle mit 0,2 mm Höhe gedruckt.

Schritt 9: DREHGEBER

DREHCODIERER
DREHCODIERER
DREHCODIERER
DREHCODIERER
DREHCODIERER
DREHCODIERER

Dieser Drehgeber wird mit dem isp-Anschluss verbunden. Es wird verwendet, um das Pelletgewicht zu ändern und das Gerät ein- und auszuschalten.

vcc isp Pin 2 (Pull-Up-Widerstand)

Klemme A (gelb) gehen Sie zum ISP-Pin 1

Klemme B (grün) gehe zu ISP Pin 3

Klemme C (Gnd) ISP-Pin 6

Ich füge 2 Bilder hinzu, um den Unterschied zwischen einem Filter und keinem Filter zu sehen. Sie können den Unterschied zwischen beiden leicht erkennen.

Der Druckknopf geht zum SW-Anschluss der Platine.

Schritt 10: Sensorrohr

Sensorrohr
Sensorrohr
Sensorrohr
Sensorrohr
Sensorrohr
Sensorrohr

WICHTIG:

Das Sensorrohr muss schwarz sein und der Sensorempfänger muss versteckt sein

Meine ersten Versuche waren, eine schöne rote Pfeife zu haben. Aber das ist schwierig! Es funktionierte überhaupt nicht. Ich habe herausgefunden, dass Außenlicht einfällt, werfen Sie den Plastik- und Empfängersensor immer an.

Um ein gutes Ergebnis zu erzielen, hatte ich keine Wahl, die Farbe in Schwarz zu ändern.

Installieren Sie den Empfänger oben. Und verstecken Sie den durchsichtigen Kunststoff mit schwarzer Farbe, Klebeband oder Gummi, schwarzem Silikon.

Emitter unten installieren.. Mit einem Stift prüfen, ob die Sensoren gut ansprechen. Vielleicht muss das Loch des Emitters etwas vergrößert werden. es hängt von Ihrer Druckerkalibrierung ab.

Ich habe auch bessere Ergebnisse im Schatten. Vermeide direktes Sonnenlicht.

Schritt 11: Sensorrohr-Alternative

Sensorrohr-Alternative
Sensorrohr-Alternative
Sensorrohr-Alternative
Sensorrohr-Alternative

Wenn Sie keinen 3D-Drucker haben, können Sie dasselbe mit einem Kupferrohr tun. Es wird sehr gut funktionieren. Schwierig ist das Loch bei genau 3 Zoll und Empfänger und Sender müssen ausgerichtet werden.

Schritt 12: Ein Pellet auf Oszilloskop und Kalibrierung

Ein Pellet zu Oszilloskop und Kalibrierung
Ein Pellet zu Oszilloskop und Kalibrierung

Dies ist ein echtes Pellet, das durch das Rohr geworfen wird. Sonde 1 gelb ist Sensor 1. Sonde 2 lila ist Sensor 2.

Zeit/div ist 50 us.

Wir können 6 Divisionen von 50us zählen. 50 us x 6 = 300 us (für 3 Zoll). 300 us x 4 = 1,2 ms für 1 Fuß

1/1,2 ms = 833,33 Fuß/s

Wir können auch sehen, dass der Sensor normalerweise 5 V hat. Und können wir das Senderlicht blockieren, fällt der Sensor auf 0.

So startet und stoppt er seinen Conter (Timer1)

Aber um genau zu wissen, ob die Geschwindigkeit genau war, brauchte ich eine Möglichkeit, dies zu messen.

Um die Softwarekalibrierung durchzuführen und die Genauigkeit dieses Geräts zu testen, habe ich einen 10-MHz-Referenzoszillator verwendet. Siehe mein GPSDO auf anderen instructable.

Ich füttere einen anderen atmega328 mit diesen 10 MHz. Und programmiere diesen in Assembler, um mir jedes Mal 2 Impulse zu senden, wenn ich einen Knopf drücke, um ein Pellet zu simulieren. Genau wie wir es auf dem Bild gesehen haben, aber anstatt ein echtes Pellet zu haben, war es ein anderer uC, der mir 2 Impulse schickte.

Bei jedem Tastendruck wurde 1 Impuls gesendet und genau 4 ms danach wurde ein weiterer Impuls gesendet.

Auf diese Weise kann ich den Software-Compiler so ausbalancieren, dass immer 1000 ft/s angezeigt werden.

Schritt 13: Mehr…

Mehr…
Mehr…
Mehr…
Mehr…

Dies ist mein erster Prototyp von 2010.

Bei Fragen oder Fehlerbericht können Sie mir eine E-Mail senden. Englisch oder Französisch. Ich werde mein Bestes tun, um zu helfen.

Empfohlen: