Custom version for NXP cup car

Dependents:   NXPCUPcar

MotorControl.cpp

Committer:
Clarkk
Date:
2016-03-24
Revision:
0:a1bb4583940a
Child:
2:0d5c994d8135

File content as of revision 0:a1bb4583940a:

#include "TFC.h"
#include "MotorControl.h"

Motors::Motors()
{
    motorCurrentIndex = 0;
    batVoltageIndex = 0;
    
    steeringAngle = 0;
}

void Motors::start()
{
    TFC_HBRIDGE_ENABLE;
}

void Motors::stop()
{
    TFC_HBRIDGE_DISABLE;
}

void Motors::saveBatteryVoltageMeasure(uint16_t ADCresult)
{
    batVoltageIndex++;
    if(batVoltageIndex >= BATSAMPLECOUNT)
        batVoltageIndex = 0;
    
    batteryVoltage[batVoltageIndex] = ADCresult;
}

void Motors::saveMotorCurrentMeasure(uint16_t MotA_ADCresult, uint16_t MotB_ADCresult)
{
    motorCurrentIndex++;
    if(motorCurrentIndex >= MOTSAMPLECOUNT)
        motorCurrentIndex = 0;
    
    motorACurrent[motorCurrentIndex] = MotA_ADCresult;
    motorBCurrent[motorCurrentIndex] = MotB_ADCresult;
}

void Motors::saveSteering(float angle)
{
    steeringAngle = angle;
}

float Motors::getWheelRPS(char mot)
{
    float current,meanVoltage;
    
    if(mot == 'A')
        current = (float)motorACurrent[motorCurrentIndex]/1240.9; // *3.3/4095
    else
        current = (float)motorBCurrent[motorCurrentIndex]/1240.9; // *3.3/4095
    
    meanVoltage = currentPWM*(float)batteryVoltage[batVoltageIndex]/217.7; // *3.3/4095*5.7
    
    // freeSpeed = 9.8004*meanVoltage-7.0023
    // speed = (freeSpeed - (2.255*meanVoltage+10.51)*current)
    return ((9.8004*meanVoltage-7.0023)-(2.255*meanVoltage+10.51)*current); // rps
}

float Motors::getWheelSpeed(char mot)
{
    return getWheelRPS(mot)*0.157;
}

void Motors::processTasks()
{
    
}

float Motors::getAverageMotCurrent(char mot)
{
    uint8_t i;
    uint32_t sum = 0;
    
    if(mot == 'A')
    {
        for(i=0;i<MOTSAMPLECOUNT;i++)
        {
            sum += motorACurrent[i];
        }
    }
    else
    {
        for(i=0;i<MOTSAMPLECOUNT;i++)
        {
            sum += motorBCurrent[i];
        }
    }
    
    return ((float)sum)/MOTSAMPLECOUNT/1240.9;
}

float Motors::getAverageBatteryVoltage()
{
    uint8_t i;
    uint32_t sum = 0;
    
    for(i=0;i<BATSAMPLECOUNT;i++)
    {
        sum += batteryVoltage[i];
    }
    return ((float)sum)/BATSAMPLECOUNT/217.7;
}


void Motors::setFixedPWMValue(float pwm)
{
    currentPWM = pwm;
    TFC_SetMotorPWM(currentPWM,currentPWM);
}