Fler problem med avbrottsrutin * LÖST VIDEO BIFOGAD*

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Icecap
Inlägg: 26635
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Fler problem med avbrottsrutin

Inlägg av Icecap »

Citat TS: "Aktuellt varvtal skall ligga mellan 200 - 2400 r/m"
wapper
Inlägg: 40
Blev medlem: 8 augusti 2012, 02:37:53

Re: Fler problem med avbrottsrutin

Inlägg av wapper »

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.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Fler problem med avbrottsrutin

Inlägg av sodjan »

> 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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46936
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fler problem med avbrottsrutin

Inlägg av TomasL »

Å 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.
Användarvisningsbild
SeniorLemuren
Inlägg: 8410
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Fler problem med avbrottsrutin

Inlägg av SeniorLemuren »

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. :)
Användarvisningsbild
kimmen
Inlägg: 2042
Blev medlem: 25 augusti 2007, 16:53:51
Ort: Stockholm (Kista)

Re: Fler problem med avbrottsrutin

Inlägg av kimmen »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46936
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fler problem med avbrottsrutin

Inlägg av TomasL »

Sätt en ABS-Krans på axlarna, då får du bra upplösning.
Användarvisningsbild
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

Inlägg av tecno »

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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46936
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fler problem med avbrottsrutin

Inlägg av TomasL »

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.
Användarvisningsbild
SeniorLemuren
Inlägg: 8410
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Fler problem med avbrottsrutin

Inlägg av SeniorLemuren »

Backslagens utväxling är 2:1 propellerdiam 19"
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46936
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fler problem med avbrottsrutin

Inlägg av TomasL »

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.
ToPNoTCH
Inlägg: 5142
Blev medlem: 21 december 2009, 17:59:48

Re: Fler problem med avbrottsrutin

Inlägg av ToPNoTCH »

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å :wink:
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46936
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fler problem med avbrottsrutin

Inlägg av TomasL »

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.
Användarvisningsbild
kimmen
Inlägg: 2042
Blev medlem: 25 augusti 2007, 16:53:51
Ort: Stockholm (Kista)

Re: Fler problem med avbrottsrutin

Inlägg av kimmen »

TomasL skrev:För att du skall få bra upplösning, behöver du nog ha något liknande en ABS-krans på axeln.
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.
Användarvisningsbild
SeniorLemuren
Inlägg: 8410
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Fler problem med avbrottsrutin

Inlägg av SeniorLemuren »

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.
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. :)
Skriv svar