init

GenCtrl.h

Committer:
gert_lauritsen
Date:
2016-02-25
Revision:
0:68589a6f09af

File content as of revision 0:68589a6f09af:

//                       :
// Title                 :   Generator controller
// Filename              :   GenCtrl.h
// Author                :   Gert Lauritsen
// Origin Date           :   26/01/2016
// Version               :   1.000
// Compiler              :   Keil
// Target                :
// Notes                 :   None
//
//------------------------------------------------------------------------------------

#ifndef GenCtrl_H
#define GenCtrl_H
#include "mbed.h"

typedef void (*GenCallback_type)();
#define RotorCurrentAdvLength  12
#define VinBuffLength 25

//Omregning
#define VoltPrCount         (3.3/65535)                 //vref/12bit 
#define VinGain             (4.7/(200+4.7))             //Spændingsdeler i input
#define VinFromCount        (VoltPrCount/VinGain)       //Omregning til Count->Volt 
#define IoutCalFaktor       (VoltPrCount*(1000/21.5))   //Strøm i Count til Amp
#define IRotorCalFaktor     (VoltPrCount*2.1315)        //Målt Count til strøm i rotor [A] 


typedef struct {
    unsigned int Vset;          //2 byte
    unsigned int VMax;          //2 byte I tilfælde af at spændingen kommer over dette slukkes for det hele
    unsigned char VmaxRep;      //1 byte
    long StartPower;            //4 byte
    unsigned int PWMRotaryBlok; //2 Den PWM, som vi kan gå ned til
    unsigned int IRotorMax;     //2 Begrænsning af rotor strøm
    unsigned int Kp;            //2 Gain i Voltage Reg
    long RunPower;              //4 byte
} CalRecType;                   //21 byte i alt

typedef struct {                //Her har vi alle måle data samlet
    unsigned int Nstak;         //Stak af ADC
    long Vmon, Iin ,Irotor;     //
    unsigned long regadv;       //middel af PWM
    unsigned int regadvcount;   //tæller til at regne middel ud med
    unsigned long loadadv;      //middel af PWM
    unsigned int loadadvcount;  //tæller til at regne middel ud med
} MessDataType;


class GenCtrl
{
private:
    GenCallback_type callback;
    PwmOut *RotorPWM;
    Ticker Sampler, GeneralTimer;
    AnalogIn  *Vin, *Iin,*Irotor;

    unsigned int ADCValue[3]; //Analog In Vout, Iout, Irotor
    unsigned int VinBuff[VinBuffLength]; //Buffer til at filtre input spænding (undgå Ron)
    unsigned int NotInRegArea;  //Disable function til generator
    unsigned int RotorCurrent[RotorCurrentAdvLength];
    unsigned int vmaxdone;      //Tæller for hvor mange gange der har været over Vmax
    int softstartTimeOut;       //en tid, hvor den efter at være kommet over i reg mode stadig har en Max Pout
    void AnalogIn(void);        //Sampler
    unsigned int AdvRotorCurrent(void); //Finder middelstrøm
    void SetNewPwM (void);      //ReCalc PWM
    void Blink();               //debug function
    void Timer();               //General timer 1gg/sec

    unsigned char MaxValuePos(void);

public:
    GenCtrl(PinName PWMSignal,PinName VinSignal,PinName IInSignal,PinName IrotorSignal,GenCallback_type _callback);
    bool Rotionprotech;    //Sættes hvis omdrejningerne kommer for lang ned
    int  softstart;        //Opstarts styring
    unsigned int Vmax;     //målt Vmax
    unsigned int LastRpm;
    unsigned int  Vout;    //stakket måling over 1 sek [count]

    MessDataType MessData; //Målte data (load m.m.)
    CalRecType CalRec;     //Record med opsætningsparameter

    void ResetMessData(void); //når man har aflæst sine værdier rester man dem.
    void SetVCal(float Vset,float Vmax,float StartPower,float RunPower,float RotorMaxCurrent);
    void NewVout(float Vset);
};

#endif