Re: MagnetoSpeed mod ghetto

https://sv.wikipedia.org/wiki/Induktor
https://sv.wikipedia.org/wiki/EMK
Ta en funderare på vad som händer när kulan passerat.
https://sv.wikipedia.org/wiki/EMK
Ta en funderare på vad som händer när kulan passerat.

Ett forum där vi diskuterar Handladdning, Jakt, Skytte och Vapen
http://forum.robsoft.nu/
Fält skrev:Som sagt, ett intressant fenomen.
Hur stämmer hastigheten om vi säger att den stigande nollgenomgången är inpassage över sensorn och den fallande är utpassage?
Fält skrev:63uS är väldigt nära tiden mellan nollgenomgångarna så jag tror att kulans längd är ganska oviktig. Men så länge spolens kärna är längre än kulan så kommer vi däremot att ha underliga vågformer som den här.
lasse-a skrev:Öh, du får nog ta bladet från munnen lite mer. Menar du det att man också skulle kunna påverka kulbanan? Det har MagnetoSpeed-folket tyvärr redan patent på, så du kan inte tjäna miljoner på att bygga en "aim bot" för älgbanan...
fugazi skrev:lasse-a skrev:Den spiken borde kunna tas bort med en diod (släckdiod), om det är önskvärt?
Intressant projekt!
fugazi skrev:Schotky (eller hur f-n det stavas) paralellt!
Fält skrev:Det normala sättet att avkoda en signal av den här typen är att man ett tröskelvärde som armerar triggern och triggar sedan på första nollgenomgången efter det.
Fält skrev:För lite starkare signaler så finns det en hel del special IC som gör just det. Min favorit är LM1815, men den svaga signalen gör det lite svårare och de adaptiva funktionerna i specialkretsarna gör ändå inte det vi vill, så de avancerade funktionerna skulle vi ändå inte använt.
Fält skrev:Med en väl vald microprocessor med snabb ADC så skall det nog gå att lösa detektionen i mjukvara också. Men det är lite at uppfinna hjulet på nytt, även om det ger vissa fördelar.
volatile uint16_t Capt1, Capt2; //variablerna som används inne i interrupten skall deklareras som volatile.
//Så pseudokoden för input capture subrutinen kan se ut så här:
ISR(TIMER1_CAPT_vect)
{
nointerrupts(); //Stäng av alla interrupts
capt1=ICR1; //Spara värdet i input capture registret.
TCNT1=TCNT1-capt1; //Nollställ timern så att vi räknar tiden från när kulan triggade första sensorn och så att vi slipper timer overflow innan kulan passerar nästa sensor.
capt1=0;
capt2=0;
while (!sensor2 AND TCNT<65000) // Vänta på att kulan skall passera eller ge upp när timern börjar närma sig maxvärde efter 3-6 hundradels sekunder.
{
Kontrollera så att vi inte får ett nytt input capture värde på första sensorn igen, det kan då vara att antingen den är en falsktrigger eller så var den första signalen en falsktrigger. Det blir ingen interrupt men timern sköter sig helt själv och registrerar nya värden om det triggar.
}
capt2=TCNT1; //Spara TCNT1 från när kulan passerar andra sensorn. Det här är tillgängligt i programmets main.
interrupts() //Slå på interrupts igen.
}