Interface to a standard tarco sensor. Measure the periode and the cal the speed
Diff: Tarco.cpp
- Revision:
- 8:2e6b17f1da02
- Parent:
- 7:752b8065ce2d
- Child:
- 9:6b8619ccb136
--- a/Tarco.cpp Fri Mar 07 08:01:26 2014 +0000 +++ b/Tarco.cpp Thu Sep 11 07:43:31 2014 +0000 @@ -3,15 +3,27 @@ DigitalOut debug(LED2); -Tarco::Tarco(PinName tarcosignal, char mode) : +Tarco::Tarco(PinName tarcosignal, char mode,callback_type _callback) : _tarcosensor(tarcosignal) { tarcomode=mode; // AdvPeriode=0; - if (mode==0) + if (mode==RunMeanSwitchAuto) _tarcosensor.fall(this, &Tarco::RunMeanMeasure); - if (mode==1) + if (mode==SwitchAuto) _tarcosensor.fall(this, &Tarco::Rotationtimer); + if (mode==HirthMode) + _tarcosensor.fall(this, &Tarco::Hird); + callback = _callback; +} + +void Tarco::Hird() +{ +//Hird er en totakt, der kommer med + t.stop(); + AdvPeriode[0]=t.read_us(); + t.reset(); + t.start(); } void Tarco::Rotationtimer() @@ -19,9 +31,10 @@ //Da switchAuto motoren kommer ud med 24 pulser/rotation laver vi en prescale på 24 // static int pulscounter; - if (pulscounter++>=PulsPrRotation-1) { + if (pulscounter++>=PulsPrRotation-1) { //Vi tæller til 24, således at det er tiden/omgang t.stop(); AdvPeriode[0]=t.read_us(); + callback(AdvPeriode[0]); t.reset(); t.start(); pulscounter=0; @@ -34,6 +47,8 @@ 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 +//Hvilket btyder at man skipper den lange Syncpuls, og kun tællere på de korte + static bool MistedPeriod; //dette var en lang periode int thisperiode; float periodechange=0; @@ -57,15 +72,19 @@ unsigned int periodetid; lastfrekvens=0; switch (tarcomode) { - case 0: { + case RunMeanSwitchAuto: { periodetid=0; for (int i=0; i<TarcoRunMean; i++) periodetid+=AdvPeriode[i]; lastperiode=periodetid/TarcoRunMean; lastfrekvens=(1e6/periodetid)*(TarcoRunMean/25); } break; - case 1: { + case SwitchAuto: { lastfrekvens=(1e6/AdvPeriode[0]); } break; + case HirthMode: { + lastfrekvens=(500e3/AdvPeriode[0]); //vi skal kun gannge med det halve da der er 2 pulser /omgang + } break; + default: break; } return (float) lastfrekvens;