Interface to a standard tarco sensor. Measure the periode and the cal the speed
Tarco.cpp
- Committer:
- gert_lauritsen
- Date:
- 2014-03-07
- Revision:
- 7:752b8065ce2d
- Parent:
- 6:2ad5029f7b1a
- Child:
- 8:2e6b17f1da02
File content as of revision 7:752b8065ce2d:
#include "Tarco.h" #include "mbed.h" DigitalOut debug(LED2); Tarco::Tarco(PinName tarcosignal, char mode) : _tarcosensor(tarcosignal) { tarcomode=mode; // AdvPeriode=0; if (mode==0) _tarcosensor.fall(this, &Tarco::RunMeanMeasure); if (mode==1) _tarcosensor.fall(this, &Tarco::Rotationtimer); } void Tarco::Rotationtimer() { //Da switchAuto motoren kommer ud med 24 pulser/rotation laver vi en prescale på 24 // static int pulscounter; if (pulscounter++>=PulsPrRotation-1) { t.stop(); AdvPeriode[0]=t.read_us(); t.reset(); t.start(); pulscounter=0; } } void Tarco::RunMeanMeasure() { static unsigned int TarcoHead; //Måler tarco ved at lave en runing mean på periodetiderne, hvis der en variation //på over 20% bliver den pågældende periode skippet static bool MistedPeriod; //dette var en lang periode int thisperiode; float periodechange=0; t.stop(); if (TarcoHead>=TarcoRunMean) TarcoHead=0; thisperiode=t.read_us(); if (lastperiode!=0) periodechange=(float) thisperiode/lastperiode; if((periodechange<1.2) || (lastperiode==0) || MistedPeriod) { AdvPeriode[TarcoHead++]=thisperiode; MistedPeriod=false; } else MistedPeriod=true; t.reset(); t.start(); } float Tarco::Speed() { //returns puls/sek [hz] unsigned int periodetid; lastfrekvens=0; switch (tarcomode) { case 0: { periodetid=0; for (int i=0; i<TarcoRunMean; i++) periodetid+=AdvPeriode[i]; lastperiode=periodetid/TarcoRunMean; lastfrekvens=(1e6/periodetid)*(TarcoRunMean/25); } break; case 1: { lastfrekvens=(1e6/AdvPeriode[0]); } break; default: break; } return (float) lastfrekvens; } float Tarco::RPM() { float rpm=lastfrekvens*60; return (float) rpm; }