init

Revision:
2:9cbc61162554
Parent:
1:40a3c90aa02f
--- a/Gen.cpp	Fri Apr 15 12:44:25 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-//---------------------------------------------------------------------------------------------------------------------
-//                       :   Headerfile
-// Title                 :   Generator module
-// Filename              :   Gen.cpp
-// Author                :   Gert Lauritsen
-// Origin Date           :   22/05/2015
-// Version               :   1.000
-// Compiler              :   Keil
-// Target                :
-// Notes                 :   None
-//
-//---------------------------------------------------------------------------------------------------------------------
-//--------------------------------- MODULE REVISION LOG ---------------------------------------------------------------
-//
-//    Date     Software Version    Initials   Description
-//  22/05/2015    1.0.0.0            GL      Module Created.
-//
-//---------------------------------------------------------------------------------------------------------------------
-// @file Queue.h
-//  @brief This module contains the
-//  @Generator Control
-//  @Styrer generator vha PWM af rotor strøm
-//  @Måler Vout, Iout, Irotor,
-//
-//---------------------------------------------------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------------------------------------------------
-//Includes
-#include "GenCtrl.h"
-//---------------------------------------------------------------------------------------------------------------------
-#define defsoftstartTimeOut 50
-#define MaxStartPWM         192 //(75%)
-#define MinStartPWM         25  //Max 10%
-#define LowCutPoint         470
-#define IntoSoftStart       10  //[sek] Den tid det går fra den kommer ud af regmode til den går i startup
-
-
-//1,0,4,2,6,7,5,3
-#define AinVout         0
-#define AinCurrmon      1
-#define AinFieldmon     2
-
-DigitalOut LED(p20);
-//-------------------------------------------------------------------------------------------------------------------------------------
-GenCtrl::GenCtrl(PinName PWMSignal,PinName VinSignal,PinName IInSignal,PinName IrotorSignal,GenCallback_type _callback)
-{
-    RotorPWM=new PwmOut(PWMSignal);
-    RotorPWM->period_us(100); //Periodetide for PWM 10khz
-    RotorPWM->pulsewidth(0.75); //Slukke for den i første omgang
-    softstart=1;               //Starter i startupmode
-    Vin    = new mbed::AnalogIn(VinSignal);
-    Iin    = new mbed::AnalogIn(IInSignal);
-    Irotor = new mbed::AnalogIn(IrotorSignal);
-    Sampler.attach(this,&GenCtrl::AnalogIn,0.001); //1000hz samples
-    GeneralTimer.attach(this,&GenCtrl::Timer,1);    //1 sek timeTick
-    callback=_callback;
-}
-
-//-------------------------------------------------------------------------------------------------------------------------------------
-//Omregnings functioner:
-long PMax2Count(float P) {
-   return P; 
-} 
-
-void GenCtrl::NewVout(float Vset) {
-    //softstart=1;        //Starter i startupmode    
-    CalRec.Vset         =(Vset*VinGain)/VoltPrCount;    
-}    
-
-void GenCtrl::SetVCal(float Vset,float Vmax,float StartPower,float RunPower,float RotorMaxCurrent){
-    CalRec.Vset         =(Vset*VinGain)/VoltPrCount;
-    CalRec.VMax         =(Vmax*VinGain)/VoltPrCount;
-    CalRec.VmaxRep      =3; //3 sek før den går i overvoltage
-    CalRec.StartPower   =StartPower/(VinFromCount*IoutCalFaktor);  
-    CalRec.PWMRotaryBlok=MinStartPWM; //minimal PWM    
-    CalRec.IRotorMax    =RotorMaxCurrent/IRotorCalFaktor;
-    CalRec.Kp           =7;
-    CalRec.RunPower     =RunPower/(VinFromCount*IoutCalFaktor);
-}
-   
-//-------------------------------------------------------------------------------------------------------------------------------------
-//
-void GenCtrl::Blink()
-{
-    static char state;
-    state=!state;
-    LED=state;
-}
-
-void GenCtrl::Timer() {
-//General timer 1gg/sec
-     if ((LastRpm<1000) && (!NotInRegArea)) NotInRegArea=1; //Hvis motoren er stoppet
-      
-     if ((NotInRegArea) && (!softstart)) {  //Timeout på at holde reguleringen
-       if (NotInRegArea<100) NotInRegArea++; 
-     }
-     if ((NotInRegArea>IntoSoftStart) && (!softstart))  { //Slår over i softstart efter timeout
-      if ((LastRpm>1000) || (ADCValue[AinVout]<LowCutPoint)) softstart=1; else softstart=2;
-      softstartTimeOut=defsoftstartTimeOut; //Softstart er for at få generator stille op.
-     }
-     Vout=MessData.Vmon/MessData.Nstak;
-     if (Vout>CalRec.VMax) { //Vmax nedluk
-          if (vmaxdone<CalRec.VmaxRep) vmaxdone++;   
-         } //nedluk som følge af fejl
-       else {
-        vmaxdone=0;
-     }
-      
-     callback();      
-}
-
-void GenCtrl::AnalogIn()
-{
-//Sample Vout, Iout og Irotor bliver kaldt med ca 1khz
-static int PRotorCurrent;
-
-    ADCValue[AinVout] = Vin   ->read_u16();
-    ADCValue[AinCurrmon] = Iin   ->read_u16();
-    ADCValue[AinFieldmon] = Irotor->read_u16();
-
-    MessData.Vmon+=ADCValue[AinVout];
-    MessData.Iin+=ADCValue[AinCurrmon];
-    MessData.Irotor+=ADCValue[AinFieldmon];
-    MessData.Nstak++;
-    RotorCurrent[PRotorCurrent++]=ADCValue[AinFieldmon];
-     if (PRotorCurrent>=RotorCurrentAdvLength) PRotorCurrent=0;
-
-    SetNewPwM();
-   // Blink();
-}
-
-void GenCtrl::ResetMessData(void)
-{
-    MessData.Nstak=0;
-    MessData.Vmon=0;
-    MessData.Iin=0;
-    MessData.Irotor=0;
-    MessData.loadadvcount=0;
-    MessData.loadadv=0;
-    MessData.regadvcount=0;
-    MessData.regadv=0;
-}
-
-unsigned char GenCtrl::MaxValuePos(void)
-{
-//finder max i VinBuff (tager ca 10us)
-    unsigned char BufPosition,i;
-    unsigned int MaxValue;
-    BufPosition=0;
-    MaxValue=0;
-    for (i=0; i<VinBuffLength; i++) {
-        if (VinBuff[i]>MaxValue) {
-            MaxValue=VinBuff[i];
-            BufPosition=i;
-        }
-    }
-    return BufPosition;
-}
-
-
-unsigned int GenCtrl::AdvRotorCurrent(void)
-{
-//Beregner middelstrømmen
-//Denne funktion er den der tager det meste af tiden
-//Når denne ændre fra Long til int falder tiden til 50us
-//For at dette skal kunne lade sig gøre er længden sat ned til 12 i stedet for 50
-    unsigned char Ptail;
-    unsigned int adv,outvalue;
-    adv=0;
-    for (Ptail=0; Ptail<RotorCurrentAdvLength; Ptail++) {
-        adv+=RotorCurrent[Ptail];
-    }
-    outvalue=adv/RotorCurrentAdvLength;
-    return outvalue;
-}
-
-//-------------------------------------------------------------------------------------------------------------------------------------
-//Regulerings function
-//-------------------------------------------------------------------------------------------------------------------------------------
-
-
-void GenCtrl::SetNewPwM (void)
-{
-    static unsigned int RegValue;
-    static unsigned int RegError;
-    static unsigned char PWMOut;
-    static unsigned int pVinBuff,PRotorCurrent;
-
-    bool NotInRegArea=0;
-
-
-    VinBuff[pVinBuff++]=ADCValue[AinVout]; //Vin kægges over...
-    if (pVinBuff>=VinBuffLength) pVinBuff=0;
-
-    RotorCurrent[PRotorCurrent++]=ADCValue[AinFieldmon];
-    if (PRotorCurrent>=RotorCurrentAdvLength-1) PRotorCurrent=0;
-
-    Vmax=VinBuff[MaxValuePos()]; //Max findes
-
-
-    if (CalRec.Vset>Vmax) {
-        RegError=CalRec.Vset-Vmax;
-        RegValue=RegError*CalRec.Kp;      //Det ændre ikke på det om vi bruger shift her
-        if (RegValue>0xff) RegValue=0xff; //overflow af reguleringsloop
-    } else RegValue=0;
-
-    if (vmaxdone>=CalRec.VmaxRep) RegValue=0; //AFbryder overspænding vmaxdone inc 1 gang/sek
-
-    if ((AdvRotorCurrent()>CalRec.IRotorMax) && (CalRec.IRotorMax>0)) {//begrænser Irotor
-        PWMOut=0; //Sluk for strømmen
-    }
-
-    else {
-        if (Rotionprotech) { //Sætter en max
-            if (RegValue>CalRec.PWMRotaryBlok) PWMOut=CalRec.PWMRotaryBlok;
-        }
-        if (softstart) {
-            long PError, Power, RegPower;
-            Power=(long) Vmax*ADCValue[AinCurrmon];
-
-            switch (softstart) {
-                case 1:
-                    RegPower=CalRec.StartPower; //Max effekt i opstart
-                    break;
-                case 2:
-                    RegPower=CalRec.StartPower;
-                    break;
-                case 3:
-                    RegPower=CalRec.RunPower; //MaxEffekt når vi kører
-                    break;
-            }
-          
-            if (Power<=RegPower) { //Denne del taget 14us
-                PError=RegPower-Power;
-                PError>>=10;          
-                if (PError<255)
-                    PWMOut=PError; //Gange med gain der er 1/128
-                else
-                    PWMOut=255;
-            } else
-                PWMOut=0;
-          
-
-            if (RegValue<PWMOut) {
-                PWMOut=RegValue; //Vi går nu ud af softstart
-                if (softstartTimeOut--==0) softstart=0;
-            } else
-                softstartTimeOut=defsoftstartTimeOut; //Softstart er for at få generator stille op.
-
-            if (Rotionprotech) { //Sætter en max i startupmode
-                if (PWMOut>CalRec.PWMRotaryBlok) PWMOut=CalRec.PWMRotaryBlok;
-            }
-
-            if (PWMOut>MaxStartPWM) {
-                switch (softstart) {
-                    case 1:
-                        PWMOut=MaxStartPWM;
-                        break;//Max 75%
-                    case 2:
-                        PWMOut=MinStartPWM;
-                        break; //Max 10%
-                    case 3:
-                        PWMOut=MaxStartPWM;
-                        break; //Max 75%
-                }
-            }
-        } else //hvis ikke startup
-            PWMOut=RegValue;
-
-        if ((RegValue<0xff) & (ADCValue[AinVout]>LowCutPoint)) { //er indenfor reg slå softstart fra
-            NotInRegArea=0;
-        }
-    }
-    if ((NotInRegArea==0) && (RegValue>=0xff)) NotInRegArea=1; //Vi er udenfor regområde
-    RotorPWM->write((float) PWMOut/255); //Sætter pwm på pin
-    MessData.regadv+=RegValue;
-    MessData.regadvcount++;
-
-    MessData.loadadv=PWMOut;
-    MessData.loadadvcount++;
-}
-
-//---------------------------------------------------------------------------------------------------------------------
-//---------------------------------------------------------------------------------------------------------------------
-