Fler problem med avbrottsrutin * LÖST VIDEO BIFOGAD*
Re: Fler problem med avbrottsrutin
Citat TS: "Aktuellt varvtal skall ligga mellan 200 - 2400 r/m"
Re: Fler problem med avbrottsrutin
Ja, naturligtvis handlar det om varv per minut men det är ju principen med att använda två timrar som är hela grejen. Vilket mätintervall som blir bäst går ju att finna ut när väl mjukvaran för räknarna är ihopkokad för denna lösning. Det tror jag SeniorLemuren klarar att röna ut själv.
Re: Fler problem med avbrottsrutin
> Citat TS: "Aktuellt varvtal skall ligga mellan 200 - 2400 r/m"
OK.
Ganska lågvarvig alltså.
Tja, Lemuren har nog underlag nog för att fundera lite på det hela, som sagt.
OK.

Tja, Lemuren har nog underlag nog för att fundera lite på det hela, som sagt.
Re: Fler problem med avbrottsrutin
Å andra sidan brukar man väl ha en pulsgivare som ger ett hundratal pulser per varv, eller så.
Då blir låga varv inga problem.
Då blir låga varv inga problem.
- SeniorLemuren
- Inlägg: 8410
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Fler problem med avbrottsrutin
Nej några tändkulemotorer är det inte. Båten är försedd med 2 st 6,7 liters Volvo MD67. Vid uppstartad kall motor så hinner man lätt att räkna varvtalet till ungefär 100 r/m. Normalt tomg.varvt. varm motor ca 250 r/m Max vartal är 2400 r/m. Propellrarna är dimensionerade för maxfart vid 1600 rpm där motorerna har bäst ekonomi. Så 800 r/m är ungefär behaglig machfart. 

Re: Fler problem med avbrottsrutin
En annan variant för periodmätning kan ju vara att skippa att använda interrupt och att polla timern, vilket kanske kan bli enklare om man vill ha avstudsning. Något i stil med följande tänkte jag mig (åäö använda för tydlighet, men går ju inte egentligen i C-identifierare, och det skulle kunna finnas logiska fel):
Kod: Markera allt
// gränssnitt till omvärlden
void VäntaUtStuds(void); // Fördröjning för att vänta ut flankernas studs. Måste vara kortare än en timeröverrullning.
uint16_t LäsTimer(void); // returnerar timerns nuvarande värde: 0-65535
uint8_t LäsIngång(); // returnerar 0 eller 1
#define TIMEOUT_RULLNINGAR 100
int main()
{
while(1)
{
uint32_t period = MätPeriod();
UppdateraDisplay(period);
}
}
uint32_t MätPeriod(void)
{
// Känn av stigande flank:
while(LäsIngång()); // Går vidare då ingången blir eller är 0
VäntaUtStuds(); // Vänta ut eventuell fallande flanks studs
while(!LäsIngång()); // Gå vidare då ingången blir 1
// Spara starttid (stigande flank)
uint16_t startTid = LäsTimer();
// Vänta ut den stigande flankens studs
VäntaUtStuds();
uint16_t föregående = 0;
uint16_t rullningar = 0;
uint8_t flank = 0;
while(1)
{
uint16_t nu = LäsTimer() - startTid; // Tid i förhållande till start.
// Lägg på rullningar om värdet slagit runt
if(nu < föregående)
{
rullningar++;
if(rullningar >= TIMEOUT_RULLNINGAR)
{
return -1; // Maximalt värde för uint32_t
}
}
föregående = nu;
// Först: känn av den första flanken (fallande)
if(flank == 0 && !LäsIngång())
{
VäntaUtStuds(); // Vänta ut den fallande flankens studs
flank = 1;
}
// När den stigande (andra) kommer, returnera periodtiden.
else if(flank == 1 && LäsIngång())
{
return (((uint32_t)rullningar) << 16) + nu;
}
}
}
Senast redigerad av kimmen 1 september 2012, 13:08:07, redigerad totalt 2 gånger.
- tecno
- Inlägg: 27248
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: Fler problem med avbrottsrutin
Varför krångla till det? En puls/varv ska ju räcka mer än väl.
På svarven min har jag 1 givare dvs 1puls/varv och den klarar lätt >3000varv. Enkel reflex detektor+ vitt med svart streck som ger min 40µs puls till Pport på datorn så detta borde ju inte vara nåt problem att få till mot en PIC.
På svarven min har jag 1 givare dvs 1puls/varv och den klarar lätt >3000varv. Enkel reflex detektor+ vitt med svart streck som ger min 40µs puls till Pport på datorn så detta borde ju inte vara nåt problem att få till mot en PIC.
Re: Fler problem med avbrottsrutin
SeniorLemuren skrev:Nej några tändkulemotorer är det inte. Båten är försedd med 2 st 6,7 liters Volvo MD67. Vid uppstartad kall motor så hinner man lätt att räkna varvtalet till ungefär 100 r/m. Normalt tomg.varvt. varm motor ca 250 r/m Max vartal är 2400 r/m. Propellrarna är dimensionerade för maxfart vid 1600 rpm där motorerna har bäst ekonomi. Så 800 r/m är ungefär behaglig machfart.
Hur mycket nedväxling i backslaget?
Att motorn snurrar med 800 rpm betyder ju inte att propparna gör det.
För fartygspropellrar är väl max verkningsgrad nånstans runt 70 rpm har jag för mig.
- SeniorLemuren
- Inlägg: 8410
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Fler problem med avbrottsrutin
ok, så proppen snurrar med 400 rpm vid normalfart då., dvs 6,7 varv per sekund.
För att du skall få bra upplösning, behöver du nog ha något liknande en ABS-krans på axeln.
För att du skall få bra upplösning, behöver du nog ha något liknande en ABS-krans på axeln.
Re: Fler problem med avbrottsrutin
Hänger inte riktigt med på vad proppellrarnas RPM har med saken att göra.
Det är väl motorernas varv som Lemuren avser att läsa av (Står i och för sig ingenstans tydligt).
Efterliggande utväxlingar torde väl vara ointressanta.
Lösningen behöver vad jag får det till klara att läsa av 200-3000 RPM vilket ger 3.3333 - 50 varv i sekunden.
Jag ser inga problem med att köra på "inslagen linje" och mäta med hallgivare och interrupt.
Jag hade kanske lagt till ett rudimentärt digitalt filter med, för att slippa fladdrande mellanlägen, få en lite mer "flytande" visning genom tröghet och störtålighet.
Min gissning är att dom där motorerna inte slår mellan 300 och 2500 varv på en tiondelssekund ändå
Det är väl motorernas varv som Lemuren avser att läsa av (Står i och för sig ingenstans tydligt).
Efterliggande utväxlingar torde väl vara ointressanta.
Lösningen behöver vad jag får det till klara att läsa av 200-3000 RPM vilket ger 3.3333 - 50 varv i sekunden.
Jag ser inga problem med att köra på "inslagen linje" och mäta med hallgivare och interrupt.
Jag hade kanske lagt till ett rudimentärt digitalt filter med, för att slippa fladdrande mellanlägen, få en lite mer "flytande" visning genom tröghet och störtålighet.
Min gissning är att dom där motorerna inte slår mellan 300 och 2500 varv på en tiondelssekund ändå

Re: Fler problem med avbrottsrutin
Fick för mig att det var proppens varvtal han ville mäta, dock är det motorn, är det ju bara att använda startkransen som pulsgivare.
Re: Fler problem med avbrottsrutin
Mäter man periodtid som originalidén är det väl inget problem med en puls per varv? Då blir det ju sämre med fler pulser per varv till och med.TomasL skrev:För att du skall få bra upplösning, behöver du nog ha något liknande en ABS-krans på axeln.
- SeniorLemuren
- Inlägg: 8410
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Fler problem med avbrottsrutin
Startkransen kräver väl en induktiv givare. Detta är ett lågbudgetbygge och hallgivarna fick jag gratis av en vänlig forummedlem. Med 2 eller flera par små neodym magneter på insputningspumpens kopplingsskiva så har jag pulserna direkt i 5 volt. En givare på kuggkransen kräver en induktiv givare och dom kostar bra mycket mer än gratis.TomasL skrev:Fick för mig att det var proppens varvtal han ville mäta, dock är det motorn, är det ju bara att använda startkransen som pulsgivare.
