https://sv.wikipedia.org/wiki/EMK
Ta en funderare på vad som händer när kulan passerat.
Moderatorer: Ulrik, Trond Åsly, taxen, Stefan.K, potatiskastare, PerN, mecke, Kari Lindström, Fritz Kraut, Robban
Tja, jag har inte kronograferat 22LR ur min CZ455, eftersom jag inte byggt kronografen än...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?
Ja, det var det jag menade. Jag använder ju ganska mycket större magneter än MagnetoSpeed gör så det är ett stalltips att .22LR-kulan är i samma härad, dvs mindre än magneten. Det hade bara varit intressant att se hur mycket. (Kan man säkert räkna på eftersom vi har två fall, men jag orkar inte).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.
Nej nej, inte påverka kulbanan. Eller det kanske den gör? Har inte tänkt på det...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...
Tack! Ja, en diod ligger ju nära till hands, men det skulle antagligen inte fungera något vidare här eftersom vi inte har tillräcklig signalspänning. En diod har ju trots allt ett framspänningsfall på (åtminstone) några tiondels volt, så om man sätter den i serie så blockerar den iofs, men man får ingen signal kvar, och om man sätter den för att shunta bort spänningen så händer ingenting, eftersom man inte når över framspänningsfallet så den kommer aldrig att leda.fugazi skrev:lasse-a skrev: Den spiken borde kunna tas bort med en diod (släckdiod), om det är önskvärt?
Intressant projekt!
Nästan rätt! Hade träffat med hagelbössan!fugazi skrev:Schotky (eller hur f-n det stavas) paralellt!
De ser ju ganska exakt ut som mina, sett till vågformen då. Men pga geometrin så har du skarpare top, vilket är rimligt. Och också lägre signalnivå, antagligen återigen pga mindre magneter (och mindre antal varv, originalsensorn har 16 varv, jag använde ~30 varv).Fält skrev: Mätningen med SK Pistol match Spezial ur quadden gav däremot mindre roliga signaler. Särskilt att signalen svänger positivt först. Så det är lite andra saker som händer jämfört med vad jag hade förväntat mig.
25486
Ja, det är ett av standardförfarandena.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.
Nej, den har jag också liggande (på jobbet).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.
Det var originalplanen. Men då vill man ju göra hela signalbehandligen digitalt och då faller det på att de billiga, snabba uC som finns tillgängliga (exv. ett BluePill) samplar tillräckligt snabbt, men de har inte tillräckligt med minne för att buffra signalerna från båda givarna. Så då får man ändå starta räknare mha extern logik till någon interrupt-ingång (sampla samt samtidigt detektera i mjukvara är vanskligt). Har man gjort det så kan man lika gärna sätta dit en räknare och kristall och bara läsa det färdiga värdet med sin mikrokontroller och bara göra gränssnittet med den.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.
Kod: Markera allt
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.
}
|
|