Struggling with VR Sensor, Switched to Hall Sensor, PID, Controlling Diesel Engine RPM

OK, novias here, so bare with me.
I appreciate any an all feedback and thank you in advance for your input. I may go long periods between projects and have a hard time remembering what I have learned, sometimes it feels like I'm learning the same thing over and over. I just don't' use this stuff enough. That is on me sorry folks.

Project; deasil tractor has a bad ECM that controls the electronic governor. No replacements are available. when i was asked if i could come up with something it sounded straight forward enough... but I have been struggling with this off and on for over a month so I am opening this up for some much needed guidance.
Part of the problem is the tractor is over 30 min away so I have to mock up solutions/programs then test in a location with no internet and bad cell reception. I should have stated they have to bring tractor to me.... would have made this whole situation more covenant. But that's here nor there and of no concern to any of you.

The tractor uses a VR sensor for RPM feedback. here is a scope view of the raw signal.

I have done a lot of reading and testing but have not been able to get my Arduino (pro mini) to pick up the signal/frequency. I'll admit probably hardware and program problems to work out.

here is the circuit i tried to use, found on this forum.

now I will admit I am not convinced this circuit is working as it is suppose to. The LM393 didn't' appear to be doing its job. I know it wasn't because I never did see a square wave out of it... in fact i never saw anything after it. This is the scope view before the LM393 after the low pass and High pass filters

Now i know this is an issue in of itself. but bare with me folks i want to put this all down and then work through my issues (with your help) one at a time.

I figured I would cheat and just buy a vr conditioner to speed this fix along, I am receiving pressure to do so. Farmer wants his tractor up and running.

I picked up a Mini Max A2, was told i could wire vr sensor directly to board from seller so went forward with testing.

This is the scope signal i got out of output of board. it is not what i expected to see. I am pretty sure its not correct either, but you good folks now more than I.

Ok, I know I have not shown you a schematic hooking up anything to my pro mini. it is nothing complicated. simply one wire input into digital input 2. Just for me to serial print a feedback letting me know something is working...and a ground of course.

Here is a copy of my Arduino script, to show you what I'm working with (end game) but have not really gotten this far yet to need it. I throw in some serial print lines to see if i am reading the VR sensor.
FYI This is a hodge podge of code I have found and stuff I have come up with.

//note:???if key is turned on but tractor not started, will PID program continue to drive govener til it burns out??? possable solution, make pwm output continjint on seeing feedback from VR sensor, used relay to control this issue

#include <PID_v1.h> //PID library

//this section deals with reading throttle input and outputing pwm to govenor
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 10;  // Analog output pin that the GOVENOR is attached to
const int relay = 6; //relay is on pin 6, closes circuit to govenor allowing pwm signal to get there
int target_pwm_value = 0;  // value read from the pot
int outputValue = 0;  // value output to the PWM (analog out)

const int numReadings = 10; // value to determine the size of the readings array
int readings[numReadings];  // the readings from the analog input
int readIndex = 0;          // the index of the current reading
int total = 0;              // the running total
int average = 0;            // the average
//--------------------------------------------------------------------
// this section deals with RPM---------------------------
const uint8_t pinTach = 2;                          //tach, digital input #2 
volatile uint32_t isrElapsedTicks;                //volatile tells the compiler to use memory, not registers to store this value
volatile bool TachTickFlag;
uint32_t ElapsedTicks;
float RPM;
uint32_t timePrint,timeNow;                         // used to for serial debug in rpm section
//---------------------------------------------------------    
//this section deals with PID controller-------------------
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
double Kp=2, Ki=2, Kd=0;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);      
void setup() 
{
    Serial.begin( 115200 );
    //-------------------set up the tach input pin and a rising edge interrupt
    pinMode( pinTach, INPUT_PULLUP );
    attachInterrupt( digitalPinToInterrupt(pinTach), TachTick, RISING );
    /////////////////////////////////////////////////////////////////////////////
    TachTickFlag = false;                //flag by which ISR tells loop() that a new period is ready
    RPM = 0.0;
    timePrint = millis();                   // 1000 millis = 1 sec, timelimit between serial update
    //--------------------------------------------------------------
    //nrxt section deals with driving govener---------
    pinMode(relay, OUTPUT);
    // initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;

    myPID.SetMode(AUTOMATIC);//turn the PID on
  }
    //-----------------------------------------------
}//end of setup

//-------------------------rising edge on pinTach ISR
void TachTick( void )
{
    static bool FirstTickFlag = true;                //we need one initial measurement for determining time between them
    static uint32_t lastTick;                           //copy of micros() from the last measurement
    uint32_t nowTick;
        
    //----------------------are we waiting for the first interrupt?
    if( FirstTickFlag == true )
    {
        //-----------------yes; save micros() as the "last" and clear the flag
        lastTick = micros();
        FirstTickFlag = false;
    }
    else
    {
        //-------------------------find the time elapsed since the last interrupt in microseconds
        nowTick = micros();
        isrElapsedTicks = nowTick - lastTick;
        lastTick = nowTick;                   //save this new value as "last"
        TachTickFlag = true;               //and set a flag telling loop() we have a new period ready
    }//end of if/else
    
}//TachTick

void loop() 
{   //deals with finding RPM------------------------
    if( TachTickFlag ){                           //has a new period been measured by the ISR?
        noInterrupts();                           //halt interrupts briefly to read the period variable and clear the flag
        TachTickFlag = false;
        ElapsedTicks = isrElapsedTicks;                
        interrupts();                             //resumes interrupts
        RPM = (6e-7 / (float)ElapsedTicks) / 143; //compute RPM, 60,000,000/time between pulse/tooth count on ring gear---------------old statment RPM = 60.0 * ( 1.0 / ((float)ElapsedTicks * 1.0e-06) );                
      }//end of if

    //---------------------print RPM to serial monitor every 100mS
    timeNow = millis();
    if( timeNow - timePrint >= 100ul ){
        Serial.print( "RPM: " ); Serial.println( RPM, 1 );
        timePrint = timeNow;
    }//end of if
    //end of finding RPM----------------------------------
    //start of reading pot and writing pwm--------------------
    if(RPM > 300){// prevents program from driving govener to hard "burn out" when key is on but engine not cranking or trying to start or running
      digitalWrite(relay, HIGH);                      //close circuit to govener allowing it to see pwm from ECU
    }
    else{
      digitalWrite(relay, LOW); // shut off relay to govener if rpm below 300 rpm
      }//end of if
    total = total - readings[readIndex];            // subtract the last reading:
    readings[readIndex] = analogRead(analogInPin);  // read from the sensor store in aray (readIndex)
    total = total + readings[readIndex];            // add the reading to the total:
    readIndex = readIndex + 1;                      // advance to the next position in the array:
    if (readIndex >= numReadings) {                 // if we're at the end of the array...
        readIndex = 0;                              // ...wrap around to the beginning:
    }
    average = total / numReadings;                   // calculate the average:
    //----------------------------------------------------------------
    average = map(average, 0 ,100, 650, 2500);          //re-map average from anolog pot values(0-100 is reading from foot throttle) into RPM  values
    Setpoint = average;                                 // move data into PID controller
    myPID.Compute();
    Output = constrain(Output, 80, 165);                 // limits pwm output of PID controller
    analogWrite(analogOutPin, Output);
    
    //sensorValue = analogRead(analogInPin);          // read the analog in value:
    //outputValue = map(sensorValue, 0, 1023, 90, 165); // map it to the range of the (pwm) analog out:
    //analogWrite(analogOutPin, outputValue);         // change the analog out value:

    // print the results to the Serial Monitor:
    //Serial.print("sensor = ");
    //Serial.print(average);
    //Serial.print("\t output = ");
    //Serial.println(Output);
    //end of reading pot writing pwm--------------------
}//end of loop



I know this is a lot to unpack. sorry in advance, the code is messy (I am not a programmer)

I suppose we should start with the VR conditioner and what I am seeing for the signal input and then work on the code.

Looking forward to all helpful critiques. Thanks

What you want is a comparitor with a bit of hysteresis.

Be aware that you are using a single rail supply , so you need to check output swing goes to the voltages you need .

Also think about noise in the electrical system , how you’ll deal with that and how you package and maintain what you are making .
There must surely be some commercial system around , not a novices project in my opinion .

How will you control the governor ?
Failure modes ? Fail safety?
Control system ?

1 Like

Care to explain VR?

What tractor is this?

That board uses the MAX9926 and I have used that IC in a custom design for a V8 engine.
Worked great, was interfaced to a PIC micro.

I think your scope is set to AC input.
Set it to DC and you should see a nice 0-5V signal

The mini max A2 needs 5V and Ground
You need to connect the Min max GND to Arduino GND
Connect pin 8 to the Arduino

@hammy, the governor will be controlled via pwm signal, through an IRZ44N mosfet. This has been tested and works great, but the Arduino needs feedback (rpm) to work properly.
Failure/safety, the governor is spring return, so will default to shutdown of engine if pwm signal is lost.

@ledsyn, VR sensor = variable reluctance sensor/transducer, its a robust two wire sensor that puts out a varying AC voltage . Your favorite search engine can define it way better than I can.
I believe the tractor is a White 6501 or 6510... I can not recall precisely at the moment.

@jim-p, its nice to talk to someone that actually used the 9926 chip. thanks for the tip about the scope being set to AC input... I will have to investigate this more. I fully admit, I have not used a scope very much and am not fully competent with one. I use it so little I am guilty of hitting the auto-adjust Button.

yes, I see now why a schematic of project would eliminate confusion.
5v and ground are also connected/shared between Arduino and the Mini Max A2 board.

Thank you for all of your input, I will try to report back with updates as I go forward with this. Please, keep the feedback coming.

How do you read this signal? Rectify and measure the voltage?

Stay with the MinMax A2 board. It would be difficult to duplicate it's functions with a DIY circuit.
Not much to the A2 board, this schematic is from the speeduino website

Not sure if I should make a new topic, Kind of shifted gears because I was struggling with the VR sensor so much (I never did get the Mini Max A2 board to work (never seen an output) and really need make some headway on this project.

I ended up jumping sideways, away from trying to read the OEM VR sensor and mounting a Hall effect sensor on the front of the engine I machined out the head on one of the bolts mounding the fan pully to the crank. I then J/B welded a magnet into the head. My Hall sensor is mounted on a bracket and adjusted to read the magnet as it passes.

The governer simply racks the fuel rail on the diesel engine controlling fuel to the injectors. It appears to be an electric motor with a spring return to closed.
When testing with pwm signal, it startes to overcome the spring and open with a pwm signal around 230 give or take. So not much resolution between (pwm230-255) starting to open and WOT(which, if left fully open will over-rev and be catastrophic.

The project itself seams fairly straight forward. but I am not able to get the engine to run smooth, it oscillates from max rev to idle overshooting.
looking at my code you will see the PID settings these are just the last setting i was working with, I have tried others.
I have never used the PID code before and any guidance would be nice. I have read a lot about setting up the PID... just no success yet.

I Noticed yesterday when studying the serial data that it might be that I am getting random spikes on the hall sensor input causing the program to act erratically,I would see spikes in the RPM sensor value of 40,000 or more, for a few cycles of the script but again your input would be appreciated.
Ill post a bit of the serial data...

well I just started the tractor and grabbed a short bit of serial data for the post... this time I didn't see any out of line RPM readings. (shrug, shrug)
But the PID is deffinately not set right. (this should work right???).
I figure I just need the right PID settings. the pwm output is going from max to min... not touching anything in-between. Again, PID settings im sure.

I tried to grab at least a full cycle:

17:16:49.811 -> relay 6foot throttle: 489   requested RPM 696.0000000000   RPM: 0.0000000000   govener pwm sig 255.0000000000
17:16:49.843 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.843 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.843 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.876 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.876 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.876 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.876 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.909 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.909 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.909 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.941 -> relay 6foot throttle: 490   requested RPM 699.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.941 -> relay 6foot throttle: 487   requested RPM 691.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.941 -> relay 6foot throttle: 485   requested RPM 686.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.941 -> relay 6foot throttle: 484   requested RPM 684.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.974 -> relay 6foot throttle: 482   requested RPM 679.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.974 -> relay 6foot throttle: 481   requested RPM 677.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:49.974 -> relay 6foot throttle: 480   requested RPM 674.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.007 -> relay 6foot throttle: 478   requested RPM 669.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.007 -> relay 6foot throttle: 476   requested RPM 664.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.039 -> relay 6foot throttle: 472   requested RPM 654.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.039 -> relay 6foot throttle: 475   requested RPM 662.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.039 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.072 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.072 -> relay 6foot throttle: 466   requested RPM 641.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.072 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.105 -> relay 6foot throttle: 468   requested RPM 646.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.105 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.105 -> relay 6foot throttle: 459   requested RPM 623.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.105 -> relay 6foot throttle: 463   requested RPM 633.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.137 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.137 -> relay 6foot throttle: 463   requested RPM 633.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.137 -> relay 6foot throttle: 460   requested RPM 626.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.170 -> relay 6foot throttle: 460   requested RPM 626.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.170 -> relay 6foot throttle: 460   requested RPM 626.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.170 -> relay 6foot throttle: 455   requested RPM 614.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.203 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.203 -> relay 6foot throttle: 460   requested RPM 626.0000000000   RPM: 125.7292251586   govener pwm sig 255.0000000000
17:16:50.203 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.203 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.203 -> relay 6foot throttle: 474   requested RPM 659.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.235 -> relay 6foot throttle: 475   requested RPM 662.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.235 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.235 -> relay 6foot throttle: 486   requested RPM 689.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.268 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.268 -> relay 6foot throttle: 503   requested RPM 731.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.268 -> relay 6foot throttle: 507   requested RPM 740.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.268 -> relay 6foot throttle: 506   requested RPM 738.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.301 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.301 -> relay 6foot throttle: 480   requested RPM 674.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.301 -> relay 6foot throttle: 476   requested RPM 664.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.333 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.333 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.333 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.366 -> relay 6foot throttle: 456   requested RPM 616.0000000000   RPM: 159.0482635498   govener pwm sig 255.0000000000
17:16:50.366 -> relay 6foot throttle: 460   requested RPM 626.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.366 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.366 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.399 -> relay 6foot throttle: 466   requested RPM 641.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.399 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.399 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.432 -> relay 6foot throttle: 463   requested RPM 633.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.432 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.432 -> relay 6foot throttle: 453   requested RPM 609.0000000000   RPM: 393.3394470214   govener pwm sig 255.0000000000
17:16:50.432 -> relay 6foot throttle: 453   requested RPM 609.0000000000   RPM: 709.4210815429   govener pwm sig 255.0000000000
17:16:50.464 -> relay 6foot throttle: 443   requested RPM 584.0000000000   RPM: 709.4210815429   govener pwm sig 255.0000000000
17:16:50.464 -> relay 6foot throttle: 429   requested RPM 550.0000000000   RPM: 709.4210815429   govener pwm sig 255.0000000000
17:16:50.464 -> relay 6foot throttle: 429   requested RPM 550.0000000000   RPM: 709.4210815429   govener pwm sig 230.0000000000
17:16:50.497 -> relay 6foot throttle: 431   requested RPM 555.0000000000   RPM: 709.4210815429   govener pwm sig 230.0000000000
17:16:50.497 -> relay 6foot throttle: 437   requested RPM 569.0000000000   RPM: 709.4210815429   govener pwm sig 230.0000000000
17:16:50.497 -> relay 6foot throttle: 438   requested RPM 572.0000000000   RPM: 709.4210815429   govener pwm sig 230.0000000000
17:16:50.530 -> relay 6foot throttle: 445   requested RPM 589.0000000000   RPM: 956.3886718750   govener pwm sig 230.0000000000
17:16:50.530 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 956.3886718750   govener pwm sig 230.0000000000
17:16:50.530 -> relay 6foot throttle: 458   requested RPM 621.0000000000   RPM: 956.3886718750   govener pwm sig 230.0000000000
17:16:50.530 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 956.3886718750   govener pwm sig 230.0000000000
17:16:50.563 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 956.3886718750   govener pwm sig 230.0000000000
17:16:50.563 -> relay 6foot throttle: 477   requested RPM 667.0000000000   RPM: 1147.0521240234   govener pwm sig 230.0000000000
17:16:50.563 -> relay 6foot throttle: 485   requested RPM 686.0000000000   RPM: 1147.0521240234   govener pwm sig 230.0000000000
17:16:50.595 -> relay 6foot throttle: 490   requested RPM 699.0000000000   RPM: 1147.0521240234   govener pwm sig 230.0000000000
17:16:50.595 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 1147.0521240234   govener pwm sig 230.0000000000
17:16:50.595 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 1147.0521240234   govener pwm sig 230.0000000000
17:16:50.628 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1230.7187500000   govener pwm sig 230.0000000000
17:16:50.628 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1230.7187500000   govener pwm sig 230.0000000000
17:16:50.628 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1230.7187500000   govener pwm sig 230.0000000000
17:16:50.628 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1230.7187500000   govener pwm sig 230.0000000000
17:16:50.660 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 1230.7187500000   govener pwm sig 230.0000000000
17:16:50.660 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.660 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.693 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.693 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.693 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.693 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 1176.4705810546   govener pwm sig 230.0000000000
17:16:50.726 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.726 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.726 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.758 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.758 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.758 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 1106.1131591796   govener pwm sig 230.0000000000
17:16:50.791 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.791 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.791 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.791 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.824 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.824 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 1031.4948730468   govener pwm sig 230.0000000000
17:16:50.824 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.856 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.856 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.856 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.889 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.889 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.889 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.889 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 951.4144287109   govener pwm sig 230.0000000000
17:16:50.922 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.922 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.922 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.955 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.955 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.955 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.955 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.987 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 864.9522094726   govener pwm sig 230.0000000000
17:16:50.987 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:50.987 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.020 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.020 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.020 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.052 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.052 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.052 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.052 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 771.6445922851   govener pwm sig 230.0000000000
17:16:51.085 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.085 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.085 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.118 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.118 -> relay 6foot throttle: 502   requested RPM 728.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.118 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.118 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.151 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.151 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.151 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.183 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 670.0017700195   govener pwm sig 230.0000000000
17:16:51.183 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 557.4757690429   govener pwm sig 230.0000000000
17:16:51.183 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 557.4757690429   govener pwm sig 230.0000000000
17:16:51.216 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 557.4757690429   govener pwm sig 230.0000000000
17:16:51.216 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 557.4757690429   govener pwm sig 230.0000000000
17:16:51.216 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.216 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.249 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.249 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.249 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.281 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.281 -> relay 6foot throttle: 489   requested RPM 696.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.281 -> relay 6foot throttle: 487   requested RPM 691.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.281 -> relay 6foot throttle: 484   requested RPM 684.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.314 -> relay 6foot throttle: 482   requested RPM 679.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.314 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 557.4757690429   govener pwm sig 255.0000000000
17:16:51.314 -> relay 6foot throttle: 477   requested RPM 667.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.347 -> relay 6foot throttle: 476   requested RPM 664.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.347 -> relay 6foot throttle: 475   requested RPM 662.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.347 -> relay 6foot throttle: 474   requested RPM 659.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.379 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.380 -> relay 6foot throttle: 474   requested RPM 659.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.380 -> relay 6foot throttle: 474   requested RPM 659.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.380 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.412 -> relay 6foot throttle: 472   requested RPM 654.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.412 -> relay 6foot throttle: 472   requested RPM 654.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.412 -> relay 6foot throttle: 471   requested RPM 652.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.444 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.444 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 427.7037963867   govener pwm sig 255.0000000000
17:16:51.444 -> relay 6foot throttle: 469   requested RPM 648.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.444 -> relay 6foot throttle: 469   requested RPM 648.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.477 -> relay 6foot throttle: 466   requested RPM 641.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.477 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.477 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.510 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.510 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.510 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 484.2302551269   govener pwm sig 255.0000000000
17:16:51.543 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 785.6282348632   govener pwm sig 255.0000000000
17:16:51.543 -> relay 6foot throttle: 463   requested RPM 633.0000000000   RPM: 785.6282348632   govener pwm sig 230.0000000000
17:16:51.543 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 785.6282348632   govener pwm sig 230.0000000000
17:16:51.543 -> relay 6foot throttle: 465   requested RPM 638.0000000000   RPM: 785.6282348632   govener pwm sig 230.0000000000
17:16:51.575 -> relay 6foot throttle: 466   requested RPM 641.0000000000   RPM: 785.6282348632   govener pwm sig 230.0000000000
17:16:51.575 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 785.6282348632   govener pwm sig 230.0000000000
17:16:51.575 -> relay 6foot throttle: 469   requested RPM 648.0000000000   RPM: 1013.1029052734   govener pwm sig 230.0000000000
17:16:51.608 -> relay 6foot throttle: 471   requested RPM 652.0000000000   RPM: 1013.1029052734   govener pwm sig 230.0000000000
17:16:51.608 -> relay 6foot throttle: 473   requested RPM 657.0000000000   RPM: 1013.1029052734   govener pwm sig 230.0000000000
17:16:51.608 -> relay 6foot throttle: 475   requested RPM 662.0000000000   RPM: 1013.1029052734   govener pwm sig 230.0000000000
17:16:51.608 -> relay 6foot throttle: 477   requested RPM 667.0000000000   RPM: 1013.1029052734   govener pwm sig 230.0000000000
17:16:51.641 -> relay 6foot throttle: 480   requested RPM 674.0000000000   RPM: 1189.1549072265   govener pwm sig 230.0000000000
17:16:51.641 -> relay 6foot throttle: 481   requested RPM 677.0000000000   RPM: 1189.1549072265   govener pwm sig 230.0000000000
17:16:51.641 -> relay 6foot throttle: 483   requested RPM 681.0000000000   RPM: 1189.1549072265   govener pwm sig 230.0000000000
17:16:51.673 -> relay 6foot throttle: 485   requested RPM 686.0000000000   RPM: 1189.1549072265   govener pwm sig 230.0000000000
17:16:51.673 -> relay 6foot throttle: 485   requested RPM 686.0000000000   RPM: 1189.1549072265   govener pwm sig 230.0000000000
17:16:51.673 -> relay 6foot throttle: 486   requested RPM 689.0000000000   RPM: 1318.2177734375   govener pwm sig 230.0000000000
17:16:51.706 -> relay 6foot throttle: 486   requested RPM 689.0000000000   RPM: 1318.2177734375   govener pwm sig 230.0000000000
17:16:51.706 -> relay 6foot throttle: 487   requested RPM 691.0000000000   RPM: 1318.2177734375   govener pwm sig 230.0000000000
17:16:51.706 -> relay 6foot throttle: 489   requested RPM 696.0000000000   RPM: 1318.2177734375   govener pwm sig 230.0000000000
17:16:51.706 -> relay 6foot throttle: 490   requested RPM 699.0000000000   RPM: 1336.7791748046   govener pwm sig 230.0000000000
17:16:51.739 -> relay 6foot throttle: 490   requested RPM 699.0000000000   RPM: 1336.7791748046   govener pwm sig 230.0000000000
17:16:51.739 -> relay 6foot throttle: 491   requested RPM 701.0000000000   RPM: 1336.7791748046   govener pwm sig 230.0000000000
17:16:51.771 -> relay 6foot throttle: 491   requested RPM 701.0000000000   RPM: 1336.7791748046   govener pwm sig 230.0000000000
17:16:51.771 -> relay 6foot throttle: 492   requested RPM 704.0000000000   RPM: 1276.5957031250   govener pwm sig 230.0000000000
17:16:51.771 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1276.5957031250   govener pwm sig 230.0000000000
17:16:51.804 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1276.5957031250   govener pwm sig 230.0000000000
17:16:51.804 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1276.5957031250   govener pwm sig 230.0000000000
17:16:51.804 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1276.5957031250   govener pwm sig 230.0000000000
17:16:51.804 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.837 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.837 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.837 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.870 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.870 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1203.5625000000   govener pwm sig 230.0000000000
17:16:51.870 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.870 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.902 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.902 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.902 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.935 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 1127.6500244140   govener pwm sig 230.0000000000
17:16:51.935 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:51.935 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:51.967 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:51.967 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:51.967 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:51.967 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 1047.5592041015   govener pwm sig 230.0000000000
17:16:52.000 -> relay 6foot throttle: 494   requested RPM 708.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.000 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.000 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.033 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.033 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.033 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.066 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 963.1436767578   govener pwm sig 230.0000000000
17:16:52.066 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.066 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.066 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.097 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.097 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.097 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.131 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.131 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 872.7526855468   govener pwm sig 230.0000000000
17:16:52.131 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.131 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.164 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.164 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.164 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.197 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.197 -> relay 6foot throttle: 497   requested RPM 716.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.197 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.230 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.230 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 776.0360107421   govener pwm sig 230.0000000000
17:16:52.230 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.230 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.263 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.263 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.263 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.294 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.294 -> relay 6foot throttle: 501   requested RPM 726.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.294 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.294 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.327 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.327 -> relay 6foot throttle: 500   requested RPM 723.0000000000   RPM: 670.0915527343   govener pwm sig 230.0000000000
17:16:52.327 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 551.7749023437   govener pwm sig 230.0000000000
17:16:52.360 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 551.7749023437   govener pwm sig 230.0000000000
17:16:52.360 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 551.7749023437   govener pwm sig 230.0000000000
17:16:52.360 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 551.7749023437   govener pwm sig 230.0000000000
17:16:52.393 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 551.7749023437   govener pwm sig 230.0000000000
17:16:52.393 -> relay 6foot throttle: 499   requested RPM 721.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.393 -> relay 6foot throttle: 498   requested RPM 718.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.393 -> relay 6foot throttle: 496   requested RPM 713.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.425 -> relay 6foot throttle: 495   requested RPM 711.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.425 -> relay 6foot throttle: 493   requested RPM 706.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.425 -> relay 6foot throttle: 491   requested RPM 701.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.458 -> relay 6foot throttle: 489   requested RPM 696.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.458 -> relay 6foot throttle: 487   requested RPM 691.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.458 -> relay 6foot throttle: 484   requested RPM 684.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.458 -> relay 6foot throttle: 481   requested RPM 677.0000000000   RPM: 551.7749023437   govener pwm sig 255.0000000000
17:16:52.491 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 413.2572937011   govener pwm sig 255.0000000000
17:16:52.491 -> relay 6foot throttle: 477   requested RPM 667.0000000000   RPM: 413.2572937011   govener pwm sig 255.0000000000
17:16:52.491 -> relay 6foot throttle: 475   requested RPM 662.0000000000   RPM: 413.2572937011   govener pwm sig 255.0000000000
17:16:52.523 -> relay 6foot throttle: 476   requested RPM 664.0000000000   RPM: 413.2572937011   govener pwm sig 255.0000000000
17:16:52.523 -> relay 6foot throttle: 474   requested RPM 659.0000000000   RPM: 413.2572937011   govener pwm sig 255.0000000000

Here is the Code I am working with, It's a mess but you get the picture. I have been trying different things and there are remnants of those ideas that have not been removed yet. sorry for any confusion.

#include <PID_v1.h> //PID library

//this section deals with reading throttle input and outputing pwm to govenor
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 10;  // Analog output pin that the GOVENOR is attached to
const int relay = 6; //relay is on pin 6, closes circuit to govenor allowing pwm signal to get there
int target_pwm_value = 0;  // value read from the pot
int outputValue = 0;  // value output to the PWM (analog out)
int TBpwmsig = 0;

const int numReadings = 10; // value to determine the size of the readings array
int readings[numReadings];  // the readings from the analog input, array
int readIndex = 0;          // the index of the current reading
int total = 0;              // the running total
int average = 0;            // the average
//--------------------------------------------------------------------
// this section deals with RPM---------------------------
const uint8_t pinTach = 2;                          //tach, digital input #2 
volatile uint32_t isrElapsedTicks;                //volatile tells the compiler to use memory, not registers to store this value
volatile bool TachTickFlag;
uint32_t ElapsedTicks;
float RPM;
uint32_t timePrint,timeNow,Lastisr;                         // used to for serial debug in rpm section
//---------------------------------------------------------    
//this section deals with PID controller-------------------
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
double Kp=3, Ki=1, Kd=0;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);      
void setup() 
{
    Serial.begin( 115200 );
    //-------------------set up the tach input pin and a rising edge interrupt
    pinMode( pinTach, INPUT_PULLUP );
    attachInterrupt( digitalPinToInterrupt(pinTach), TachTick, FALLING );
    /////////////////////////////////////////////////////////////////////////////
    TachTickFlag = false;                //flag by which ISR tells loop() that a new period is ready
    RPM = 0.0;
    timePrint = millis();                   // 1000 millis = 1 sec, timelimit between serial update
    //--------------------------------------------------------------
    //nrxt section deals with driving govener---------
    pinMode(relay, OUTPUT);
    digitalWrite(relay, LOW);
    // initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;

    myPID.SetMode(AUTOMATIC);//turn the PID on
  }

  TCCR2B = TCCR2B & 0b11111000 | 0X01; //speeds up timer 2 to 31kHz, motor doesn't whine then
    //-----------------------------------------------
}//end of setup

//-------------------------rising edge on pinTach ISR
void TachTick( void )
{
    static bool FirstTickFlag = true;                //we need one initial measurement for determining time between them
    static uint32_t lastTick;                           //copy of micros() from the last measurement
    uint32_t nowTick;
        
    //----------------------are we waiting for the first interrupt?
    if( FirstTickFlag == true )
    {
        //-----------------yes; save micros() as the "last" and clear the flag
        lastTick = micros();
        FirstTickFlag = false;
    }
    else
    {
        //-------------------------find the time elapsed since the last interrupt in microseconds
        nowTick = micros();
        isrElapsedTicks = nowTick - lastTick;
        lastTick = nowTick;                   //save this new value as "last"
        TachTickFlag = true;               //and set a flag telling loop() we have a new period ready
    }//end of if/else
    
}//TachTick

void loop() 
{   //deals with finding RPM------------------------
    if( TachTickFlag ){                           //has a new period been measured by the ISR?
        noInterrupts();                           //halt interrupts briefly to read the period variable and clear the flag
        TachTickFlag = false;
        ElapsedTicks = isrElapsedTicks; 
        RPM = 60.0 * ( 1.0 / ((float)ElapsedTicks * 1.0e-06) );
        Lastisr = millis();    
        //Serial.print( "interupt: " );  Serial.println( ElapsedTicks, 1 );            
        interrupts();                             //resumes interrupts
      }//end of if
    
    //RPM = (6e-7 / (float)ElapsedTicks) / 1; //compute RPM, 60,000,000/time between pulse/tooth count on ring gear---------------old statment RPM = 60.0 * ( 1.0 / ((float)ElapsedTicks * 1.0e-06) );   but 60*1.0-06 = 60,000,000               
    //---------------------ElapsedTicksprint RPM to serial monitor every 100mS
    timeNow = millis();
    if( timeNow - timePrint >= 100ul ){
      if(timeNow - Lastisr >= 1000) {
        RPM = 0; //default RPM to zero  in when engine dies or is shut off rpm doesn't remain with last interupt data              
        }
        //Serial.print( "RPM: " ); Serial.print( RPM, 1 ); //Serial.print( "   relay: " ); Serial.println(digitalRead(relay));
        timePrint = timeNow;
    }//end of if
    //end of finding RPM----------------------------------
    //start of reading pot and writing pwm--------------------
    //Serial.print( "RPM: " ); Serial.print( RPM, 1 ); Serial.print( "   relay: " ); Serial.println(digitalRead(relay));

    if((RPM > 50) && (RPM < 2000)){// prevents program from driving govener to hard "burn out" when key is on but engine not cranking only sending pwm when trying to start or running, also overrev limiter
      digitalWrite(relay, HIGH);                      //close circuit to govener allowing it to see pwm from ECU
      //Serial.println( "   relay high " );
    }
    if((RPM < 50) || (RPM > 2000)){// shuts of power to govener if RPM is lower than 50 or (over rev) RPM is over 2500
      digitalWrite(relay, LOW); // shut off relay to govener if rpm below 50 rpm
      //Serial.println( "   relay low " );
      }//end of if
        Serial.print( "relay " ); Serial.print( relay, DEC );
    //read foot throttle range;470-1020, low-high
    total = total - readings[readIndex];            // subtract the last reading:
    readings[readIndex] = analogRead(analogInPin);  // read from the sensor store in aray (readIndex)
    total = total + readings[readIndex];            // add the reading to the total:
    readIndex = readIndex + 1;                      // advance to the next position in the array:
    if (readIndex >= numReadings) {                 // if we're at the end of the array...
        readIndex = 0;                              // ...wrap around to the beginning:
    }
    average = total / numReadings;                   // calculate the average:
    Serial.print( "foot throttle: " ); Serial.print( average, DEC );
    //----------------------------------------------------------------
    average = map(average, 470 ,1020, 650, 2000);          //re-map average from anolog pot values(470-1020, low-high, reading from foot throttle) into RPM  values, idle @650, max rev is 2700 we will use 2500rpm
    Setpoint = average;                                 // move data into PID controller
    Serial.print( "   requested RPM " ); Serial.print( Setpoint, DEC );
    Serial.print( "   RPM: " ); Serial.print( RPM, DEC );
    Input = RPM;                                        // move data into PID controller
    myPID.Compute();
    Output = constrain(Output, 230, 255);                 // limits pwm output of PID controller govener starts movning at 230 or just above that, 
    analogWrite(analogOutPin, Output);
    
    /*
    TBpwmsig = (Setpoint - RPM);        //gives direction of travel by positive or negitive #, if set point is lower than TB position, subtraction will be give neg # meaning TB needs to close, if set point is higher than TB position outcome would be a positive # and TB would need to open more, outcomes max value would be around 635, bigger the number the farther away from setpoint and faster TB should travel to correct difference. 

 //Serial.print( "   TBpwmsig " ); Serial.print( TBpwmsig, DEC );
  if (TBpwmsig > 0){                           //throttle plate would be more closed and need to open
    
    TBpwmsig = map(TBpwmsig,0,600,0,245);   //need to drive TB harder to compensate for spring tension
        //Serial.print("  PWM = ");
        //Serial.print(TB1pwmsig,DEC);
    TBpwmsig = constrain(TBpwmsig,225,238);    // keep PWM signal within motor boards perameters(1-254), need to keep low end high enough to compensate for spring tension
    //TBpwmsig = 0;
    analogWrite(analogOutPin,TBpwmsig);  
    
        //Serial.print("  PWM = ");
        //Serial.print(TB1pwmsig,DEC);
        //Serial.print("\n");
  }
  */
  /*
  else if (TBpwmsig < 0){                      //throttle plate would be more open and need to close 
       TBpwmsig = (TBpwmsig * -1);               //converts negitive number into postitve, next step maping speed of travel
    TBpwmsig = map(TBpwmsig,0,100,232,0);    //pwm signal doesn't need to be so agressive because throttle plate is traveling with spring tension
    TBpwmsig = constrain(TBpwmsig,222,250);    // keep PWM signal within motor boards perameters(1-254), need to keep low end high enough to compensate for spring tension
    TBpwmsig = 220;
    analogWrite(analogOutPin,TBpwmsig);              //send pwm to motor board
  }*/
  //Serial.print( "   govener pwm sig " ); Serial.println( TBpwmsig, DEC );            //send pwm to motor board
    
    Serial.print( "   govener pwm sig " ); Serial.println( Output, DEC );
    //sensorValue = analogRead(analogInPin);          // read the analog in value:
    //outputValue = map(sensorValue, 0, 1023, 90, 165); // map it to the range of the (pwm) analog out:
    //analogWrite(analogOutPin, outputValue);         // change the analog out value:

    // print the results to the Serial Monitor:
    //Serial.print("sensor = ");
    //Serial.print(average);
    //Serial.print("\t output = ");
    //Serial.println(Output);
    //end of reading pot writing pwm--------------------
}//end of loop

as far as a circuit diagram, i will edit this post with some pics from my phone, to give you a better idea of what i have Physicly.

here i an example of the rpm reading going arry, maybe it happens at higher rpm.

05:50:37.596 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 1794.0438232421   govener pwm sig 230.0000000000
05:50:37.596 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 1883.9488525390   govener pwm sig 230.0000000000
05:50:37.596 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 1883.9488525390   govener pwm sig 230.0000000000
05:50:37.596 -> relay 6foot throttle: 453   requested RPM 609.0000000000   RPM: 1883.9488525390   govener pwm sig 230.0000000000
05:50:37.629 -> relay 6foot throttle: 453   requested RPM 609.0000000000   RPM: 1970.3139648437   govener pwm sig 230.0000000000
05:50:37.629 -> relay 6foot throttle: 452   requested RPM 606.0000000000   RPM: 1970.3139648437   govener pwm sig 230.0000000000
05:50:37.629 -> relay 6foot throttle: 451   requested RPM 604.0000000000   RPM: 1970.3139648437   govener pwm sig 230.0000000000
05:50:37.662 -> relay 6foot throttle: 449   requested RPM 599.0000000000   RPM: 2045.8264160156   govener pwm sig 230.0000000000
05:50:37.662 -> relay 6foot throttle: 449   requested RPM 599.0000000000   RPM: 2045.8264160156   govener pwm sig 230.0000000000
05:50:37.662 -> relay 6foot throttle: 451   requested RPM 604.0000000000   RPM: 2045.8264160156   govener pwm sig 230.0000000000
**05:50:37.662 -> relay 6foot throttle: 454   requested RPM 611.0000000000   RPM: 4999999.5000000000   govener pwm sig 230.0000000000**
**05:50:37.694 -> relay 6foot throttle: 457   requested RPM 619.0000000000   RPM: 4999999.5000000000   govener pwm sig 230.0000000000**
**05:50:37.694 -> relay 6foot throttle: 459   requested RPM 623.0000000000   RPM: 4999999.5000000000   govener pwm sig 230.0000000000**
05:50:37.694 -> relay 6foot throttle: 462   requested RPM 631.0000000000   RPM: 2187.2265625000   govener pwm sig 230.0000000000
05:50:37.727 -> relay 6foot throttle: 464   requested RPM 636.0000000000   RPM: 2187.2265625000   govener pwm sig 230.0000000000
05:50:37.727 -> relay 6foot throttle: 467   requested RPM 643.0000000000   RPM: 2179.9157714843   govener pwm sig 230.0000000000
05:50:37.727 -> relay 6foot throttle: 470   requested RPM 650.0000000000   RPM: 2179.9157714843   govener pwm sig 230.0000000000
05:50:37.760 -> relay 6foot throttle: 476   requested RPM 664.0000000000   RPM: 2179.9157714843   govener pwm sig 230.0000000000
05:50:37.760 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 2124.0441894531   govener pwm sig 230.0000000000
05:50:37.760 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 2124.0441894531   govener pwm sig 230.0000000000
05:50:37.760 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 2124.0441894531   govener pwm sig 230.0000000000
05:50:37.792 -> relay 6foot throttle: 479   requested RPM 672.0000000000   RPM: 2070.1079101562   govener pwm sig 230.0000000000
0

I had Kp set at 3, Ki set at 10, and Kd set at 0

Be careful! You need to use a magnet matched to the type of Hall effect sensor. Is the sensor sensitive to the orientation of the magnet? Is the magnetic field too strong, so the triggering of the sensor occurs over large movement of the engine crank? Are there any parts of the pulley that also effect the Hall sensor?

All good points.

The Hall sensor doesnt pick up anything with the magnet removed. So i believe im good there.
I orentated the sensor to the magnetic field of the magnet. Testing it by turning the engine over by hand.
As far as magnetic field being to strong, ive done a bunch of reading... i dont believe it to be, but :man_shrugging:
It triggers just before leading edge if magnet passes by and drops out just after trailing edge goes by.

These fulty reading are concerning to me. And i will investigate them further. But now that i believe that issue occurs at higher rpm. Im more focused on the PID perameters and getting the engine to idle smoothly without pulseing from 400-1200rpm.

Do you remember studying magnetism in school? With the magnet in place , the whole pulley becomes a magnet because the magnetic field now has material to propagate the field. So you want a magnet with the minimum strength to trigger the sensor, but will be too weak when flowing through the pulley to produce other points that also trigger the sensor.

Thanks for replying.

Ok, yes. I see the point your making.
I dont know the strength (Gauss) of this particular magnet. Its prabably 5/16" diameter by maybe 1/8" or less thick. (I know size doesnt represent field strength)
When adjusting sensor i started at a distance then moved sensor closer to magnet untill it tripped then just a smidge (technical term :rofl:) more.
The bolt with the magnet is also set out at least 1/8" more than the other bolts.
Unless something is changing at fasterspeeds i am confident im not seeing any false triggers.
I can rotate engine by hand and only get a triggered responce at the intended location, once per revolution.

Seems pretty well tested, then. Are you aware that your sensor can detect a North pole or can detect a South pole, or can detect any magnetic field? Hope you chose the any pole type.

It does not detect the "any" pole. Not sure if its North or South, but i did test and orientat the magnet and sensor ocordingly.

I wasnt sure, I thought the RPM anomaly might have something to do with the code, the interupt, or the way it is sequenced. I originally had the formula for calculation the RPM outside the "if(TachTickFlag)" statment, (thinking i wanted to keep the interupt delay as short as posible) but when it was on the outside it wouldnt work...i cant remember exactly how it wasnt working. I just know i wasnt getting a calculated RPM untill i placed that line of code between the nointerupts()---interupts().

Do you have any input on the PID settings? Right now im bouncing from max to minimum pwm output with nothing inbetween. I need to get it to anticipate the swing and account for the error before overshooting the mark by a mile.
I have tried already but im going to play around with the Kd setting again.

My thought is the actual RPM is irrelevant and is already behind, time wise. I would be measuring the time between the Hall sensor pulses and base all other actions on that time.