init
GenCtrl.cpp@2:9cbc61162554, 2021-11-04 (annotated)
- Committer:
- gert_lauritsen
- Date:
- Thu Nov 04 18:02:10 2021 +0000
- Revision:
- 2:9cbc61162554
- Parent:
- Gen.cpp@1:40a3c90aa02f
pub
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gert_lauritsen | 0:68589a6f09af | 1 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 2 | // : Headerfile |
gert_lauritsen | 0:68589a6f09af | 3 | // Title : Generator module |
gert_lauritsen | 0:68589a6f09af | 4 | // Filename : Gen.cpp |
gert_lauritsen | 0:68589a6f09af | 5 | // Author : Gert Lauritsen |
gert_lauritsen | 0:68589a6f09af | 6 | // Origin Date : 22/05/2015 |
gert_lauritsen | 0:68589a6f09af | 7 | // Version : 1.000 |
gert_lauritsen | 0:68589a6f09af | 8 | // Compiler : Keil |
gert_lauritsen | 0:68589a6f09af | 9 | // Target : |
gert_lauritsen | 0:68589a6f09af | 10 | // Notes : None |
gert_lauritsen | 0:68589a6f09af | 11 | // |
gert_lauritsen | 0:68589a6f09af | 12 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 13 | //--------------------------------- MODULE REVISION LOG --------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 14 | // |
gert_lauritsen | 0:68589a6f09af | 15 | // Date Software Version Initials Description |
gert_lauritsen | 0:68589a6f09af | 16 | // 22/05/2015 1.0.0.0 GL Module Created. |
gert_lauritsen | 0:68589a6f09af | 17 | // |
gert_lauritsen | 0:68589a6f09af | 18 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 19 | // @file Queue.h |
gert_lauritsen | 0:68589a6f09af | 20 | // @brief This module contains the |
gert_lauritsen | 0:68589a6f09af | 21 | // @Generator Control |
gert_lauritsen | 0:68589a6f09af | 22 | // @Styrer generator vha PWM af rotor strøm |
gert_lauritsen | 0:68589a6f09af | 23 | // @Måler Vout, Iout, Irotor, |
gert_lauritsen | 0:68589a6f09af | 24 | // |
gert_lauritsen | 0:68589a6f09af | 25 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 26 | |
gert_lauritsen | 0:68589a6f09af | 27 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 28 | //Includes |
gert_lauritsen | 0:68589a6f09af | 29 | #include "GenCtrl.h" |
gert_lauritsen | 0:68589a6f09af | 30 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 31 | #define defsoftstartTimeOut 50 |
gert_lauritsen | 0:68589a6f09af | 32 | #define MaxStartPWM 192 //(75%) |
gert_lauritsen | 0:68589a6f09af | 33 | #define MinStartPWM 25 //Max 10% |
gert_lauritsen | 0:68589a6f09af | 34 | #define LowCutPoint 470 |
gert_lauritsen | 0:68589a6f09af | 35 | #define IntoSoftStart 10 //[sek] Den tid det går fra den kommer ud af regmode til den går i startup |
gert_lauritsen | 0:68589a6f09af | 36 | |
gert_lauritsen | 0:68589a6f09af | 37 | |
gert_lauritsen | 0:68589a6f09af | 38 | //1,0,4,2,6,7,5,3 |
gert_lauritsen | 0:68589a6f09af | 39 | #define AinVout 0 |
gert_lauritsen | 0:68589a6f09af | 40 | #define AinCurrmon 1 |
gert_lauritsen | 0:68589a6f09af | 41 | #define AinFieldmon 2 |
gert_lauritsen | 0:68589a6f09af | 42 | |
gert_lauritsen | 0:68589a6f09af | 43 | DigitalOut LED(p20); |
gert_lauritsen | 0:68589a6f09af | 44 | //------------------------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 45 | GenCtrl::GenCtrl(PinName PWMSignal,PinName VinSignal,PinName IInSignal,PinName IrotorSignal,GenCallback_type _callback) |
gert_lauritsen | 0:68589a6f09af | 46 | { |
gert_lauritsen | 0:68589a6f09af | 47 | RotorPWM=new PwmOut(PWMSignal); |
gert_lauritsen | 0:68589a6f09af | 48 | RotorPWM->period_us(100); //Periodetide for PWM 10khz |
gert_lauritsen | 0:68589a6f09af | 49 | RotorPWM->pulsewidth(0.75); //Slukke for den i første omgang |
gert_lauritsen | 0:68589a6f09af | 50 | softstart=1; //Starter i startupmode |
gert_lauritsen | 0:68589a6f09af | 51 | Vin = new mbed::AnalogIn(VinSignal); |
gert_lauritsen | 0:68589a6f09af | 52 | Iin = new mbed::AnalogIn(IInSignal); |
gert_lauritsen | 0:68589a6f09af | 53 | Irotor = new mbed::AnalogIn(IrotorSignal); |
gert_lauritsen | 0:68589a6f09af | 54 | Sampler.attach(this,&GenCtrl::AnalogIn,0.001); //1000hz samples |
gert_lauritsen | 0:68589a6f09af | 55 | GeneralTimer.attach(this,&GenCtrl::Timer,1); //1 sek timeTick |
gert_lauritsen | 0:68589a6f09af | 56 | callback=_callback; |
gert_lauritsen | 0:68589a6f09af | 57 | } |
gert_lauritsen | 0:68589a6f09af | 58 | |
gert_lauritsen | 0:68589a6f09af | 59 | //------------------------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 60 | //Omregnings functioner: |
gert_lauritsen | 0:68589a6f09af | 61 | long PMax2Count(float P) { |
gert_lauritsen | 0:68589a6f09af | 62 | return P; |
gert_lauritsen | 0:68589a6f09af | 63 | } |
gert_lauritsen | 0:68589a6f09af | 64 | |
gert_lauritsen | 0:68589a6f09af | 65 | void GenCtrl::NewVout(float Vset) { |
gert_lauritsen | 1:40a3c90aa02f | 66 | //softstart=1; //Starter i startupmode |
gert_lauritsen | 0:68589a6f09af | 67 | CalRec.Vset =(Vset*VinGain)/VoltPrCount; |
gert_lauritsen | 0:68589a6f09af | 68 | } |
gert_lauritsen | 0:68589a6f09af | 69 | |
gert_lauritsen | 0:68589a6f09af | 70 | void GenCtrl::SetVCal(float Vset,float Vmax,float StartPower,float RunPower,float RotorMaxCurrent){ |
gert_lauritsen | 0:68589a6f09af | 71 | CalRec.Vset =(Vset*VinGain)/VoltPrCount; |
gert_lauritsen | 0:68589a6f09af | 72 | CalRec.VMax =(Vmax*VinGain)/VoltPrCount; |
gert_lauritsen | 0:68589a6f09af | 73 | CalRec.VmaxRep =3; //3 sek før den går i overvoltage |
gert_lauritsen | 0:68589a6f09af | 74 | CalRec.StartPower =StartPower/(VinFromCount*IoutCalFaktor); |
gert_lauritsen | 0:68589a6f09af | 75 | CalRec.PWMRotaryBlok=MinStartPWM; //minimal PWM |
gert_lauritsen | 0:68589a6f09af | 76 | CalRec.IRotorMax =RotorMaxCurrent/IRotorCalFaktor; |
gert_lauritsen | 0:68589a6f09af | 77 | CalRec.Kp =7; |
gert_lauritsen | 0:68589a6f09af | 78 | CalRec.RunPower =RunPower/(VinFromCount*IoutCalFaktor); |
gert_lauritsen | 0:68589a6f09af | 79 | } |
gert_lauritsen | 0:68589a6f09af | 80 | |
gert_lauritsen | 0:68589a6f09af | 81 | //------------------------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 82 | // |
gert_lauritsen | 0:68589a6f09af | 83 | void GenCtrl::Blink() |
gert_lauritsen | 0:68589a6f09af | 84 | { |
gert_lauritsen | 0:68589a6f09af | 85 | static char state; |
gert_lauritsen | 0:68589a6f09af | 86 | state=!state; |
gert_lauritsen | 0:68589a6f09af | 87 | LED=state; |
gert_lauritsen | 0:68589a6f09af | 88 | } |
gert_lauritsen | 0:68589a6f09af | 89 | |
gert_lauritsen | 0:68589a6f09af | 90 | void GenCtrl::Timer() { |
gert_lauritsen | 0:68589a6f09af | 91 | //General timer 1gg/sec |
gert_lauritsen | 0:68589a6f09af | 92 | if ((LastRpm<1000) && (!NotInRegArea)) NotInRegArea=1; //Hvis motoren er stoppet |
gert_lauritsen | 0:68589a6f09af | 93 | |
gert_lauritsen | 0:68589a6f09af | 94 | if ((NotInRegArea) && (!softstart)) { //Timeout på at holde reguleringen |
gert_lauritsen | 0:68589a6f09af | 95 | if (NotInRegArea<100) NotInRegArea++; |
gert_lauritsen | 0:68589a6f09af | 96 | } |
gert_lauritsen | 0:68589a6f09af | 97 | if ((NotInRegArea>IntoSoftStart) && (!softstart)) { //Slår over i softstart efter timeout |
gert_lauritsen | 0:68589a6f09af | 98 | if ((LastRpm>1000) || (ADCValue[AinVout]<LowCutPoint)) softstart=1; else softstart=2; |
gert_lauritsen | 0:68589a6f09af | 99 | softstartTimeOut=defsoftstartTimeOut; //Softstart er for at få generator stille op. |
gert_lauritsen | 0:68589a6f09af | 100 | } |
gert_lauritsen | 0:68589a6f09af | 101 | Vout=MessData.Vmon/MessData.Nstak; |
gert_lauritsen | 0:68589a6f09af | 102 | if (Vout>CalRec.VMax) { //Vmax nedluk |
gert_lauritsen | 0:68589a6f09af | 103 | if (vmaxdone<CalRec.VmaxRep) vmaxdone++; |
gert_lauritsen | 0:68589a6f09af | 104 | } //nedluk som følge af fejl |
gert_lauritsen | 0:68589a6f09af | 105 | else { |
gert_lauritsen | 0:68589a6f09af | 106 | vmaxdone=0; |
gert_lauritsen | 0:68589a6f09af | 107 | } |
gert_lauritsen | 0:68589a6f09af | 108 | |
gert_lauritsen | 0:68589a6f09af | 109 | callback(); |
gert_lauritsen | 0:68589a6f09af | 110 | } |
gert_lauritsen | 0:68589a6f09af | 111 | |
gert_lauritsen | 0:68589a6f09af | 112 | void GenCtrl::AnalogIn() |
gert_lauritsen | 0:68589a6f09af | 113 | { |
gert_lauritsen | 0:68589a6f09af | 114 | //Sample Vout, Iout og Irotor bliver kaldt med ca 1khz |
gert_lauritsen | 0:68589a6f09af | 115 | static int PRotorCurrent; |
gert_lauritsen | 0:68589a6f09af | 116 | |
gert_lauritsen | 0:68589a6f09af | 117 | ADCValue[AinVout] = Vin ->read_u16(); |
gert_lauritsen | 0:68589a6f09af | 118 | ADCValue[AinCurrmon] = Iin ->read_u16(); |
gert_lauritsen | 0:68589a6f09af | 119 | ADCValue[AinFieldmon] = Irotor->read_u16(); |
gert_lauritsen | 0:68589a6f09af | 120 | |
gert_lauritsen | 0:68589a6f09af | 121 | MessData.Vmon+=ADCValue[AinVout]; |
gert_lauritsen | 0:68589a6f09af | 122 | MessData.Iin+=ADCValue[AinCurrmon]; |
gert_lauritsen | 0:68589a6f09af | 123 | MessData.Irotor+=ADCValue[AinFieldmon]; |
gert_lauritsen | 0:68589a6f09af | 124 | MessData.Nstak++; |
gert_lauritsen | 0:68589a6f09af | 125 | RotorCurrent[PRotorCurrent++]=ADCValue[AinFieldmon]; |
gert_lauritsen | 0:68589a6f09af | 126 | if (PRotorCurrent>=RotorCurrentAdvLength) PRotorCurrent=0; |
gert_lauritsen | 0:68589a6f09af | 127 | |
gert_lauritsen | 0:68589a6f09af | 128 | SetNewPwM(); |
gert_lauritsen | 0:68589a6f09af | 129 | // Blink(); |
gert_lauritsen | 0:68589a6f09af | 130 | } |
gert_lauritsen | 0:68589a6f09af | 131 | |
gert_lauritsen | 0:68589a6f09af | 132 | void GenCtrl::ResetMessData(void) |
gert_lauritsen | 0:68589a6f09af | 133 | { |
gert_lauritsen | 0:68589a6f09af | 134 | MessData.Nstak=0; |
gert_lauritsen | 0:68589a6f09af | 135 | MessData.Vmon=0; |
gert_lauritsen | 0:68589a6f09af | 136 | MessData.Iin=0; |
gert_lauritsen | 0:68589a6f09af | 137 | MessData.Irotor=0; |
gert_lauritsen | 0:68589a6f09af | 138 | MessData.loadadvcount=0; |
gert_lauritsen | 0:68589a6f09af | 139 | MessData.loadadv=0; |
gert_lauritsen | 0:68589a6f09af | 140 | MessData.regadvcount=0; |
gert_lauritsen | 0:68589a6f09af | 141 | MessData.regadv=0; |
gert_lauritsen | 0:68589a6f09af | 142 | } |
gert_lauritsen | 0:68589a6f09af | 143 | |
gert_lauritsen | 0:68589a6f09af | 144 | unsigned char GenCtrl::MaxValuePos(void) |
gert_lauritsen | 0:68589a6f09af | 145 | { |
gert_lauritsen | 0:68589a6f09af | 146 | //finder max i VinBuff (tager ca 10us) |
gert_lauritsen | 0:68589a6f09af | 147 | unsigned char BufPosition,i; |
gert_lauritsen | 0:68589a6f09af | 148 | unsigned int MaxValue; |
gert_lauritsen | 0:68589a6f09af | 149 | BufPosition=0; |
gert_lauritsen | 0:68589a6f09af | 150 | MaxValue=0; |
gert_lauritsen | 0:68589a6f09af | 151 | for (i=0; i<VinBuffLength; i++) { |
gert_lauritsen | 0:68589a6f09af | 152 | if (VinBuff[i]>MaxValue) { |
gert_lauritsen | 0:68589a6f09af | 153 | MaxValue=VinBuff[i]; |
gert_lauritsen | 0:68589a6f09af | 154 | BufPosition=i; |
gert_lauritsen | 0:68589a6f09af | 155 | } |
gert_lauritsen | 0:68589a6f09af | 156 | } |
gert_lauritsen | 0:68589a6f09af | 157 | return BufPosition; |
gert_lauritsen | 0:68589a6f09af | 158 | } |
gert_lauritsen | 0:68589a6f09af | 159 | |
gert_lauritsen | 0:68589a6f09af | 160 | |
gert_lauritsen | 0:68589a6f09af | 161 | unsigned int GenCtrl::AdvRotorCurrent(void) |
gert_lauritsen | 0:68589a6f09af | 162 | { |
gert_lauritsen | 0:68589a6f09af | 163 | //Beregner middelstrømmen |
gert_lauritsen | 0:68589a6f09af | 164 | //Denne funktion er den der tager det meste af tiden |
gert_lauritsen | 0:68589a6f09af | 165 | //Når denne ændre fra Long til int falder tiden til 50us |
gert_lauritsen | 0:68589a6f09af | 166 | //For at dette skal kunne lade sig gøre er længden sat ned til 12 i stedet for 50 |
gert_lauritsen | 0:68589a6f09af | 167 | unsigned char Ptail; |
gert_lauritsen | 0:68589a6f09af | 168 | unsigned int adv,outvalue; |
gert_lauritsen | 0:68589a6f09af | 169 | adv=0; |
gert_lauritsen | 0:68589a6f09af | 170 | for (Ptail=0; Ptail<RotorCurrentAdvLength; Ptail++) { |
gert_lauritsen | 0:68589a6f09af | 171 | adv+=RotorCurrent[Ptail]; |
gert_lauritsen | 0:68589a6f09af | 172 | } |
gert_lauritsen | 0:68589a6f09af | 173 | outvalue=adv/RotorCurrentAdvLength; |
gert_lauritsen | 0:68589a6f09af | 174 | return outvalue; |
gert_lauritsen | 0:68589a6f09af | 175 | } |
gert_lauritsen | 0:68589a6f09af | 176 | |
gert_lauritsen | 0:68589a6f09af | 177 | //------------------------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 178 | //Regulerings function |
gert_lauritsen | 0:68589a6f09af | 179 | //------------------------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 180 | |
gert_lauritsen | 0:68589a6f09af | 181 | |
gert_lauritsen | 0:68589a6f09af | 182 | void GenCtrl::SetNewPwM (void) |
gert_lauritsen | 0:68589a6f09af | 183 | { |
gert_lauritsen | 0:68589a6f09af | 184 | static unsigned int RegValue; |
gert_lauritsen | 0:68589a6f09af | 185 | static unsigned int RegError; |
gert_lauritsen | 0:68589a6f09af | 186 | static unsigned char PWMOut; |
gert_lauritsen | 0:68589a6f09af | 187 | static unsigned int pVinBuff,PRotorCurrent; |
gert_lauritsen | 0:68589a6f09af | 188 | |
gert_lauritsen | 0:68589a6f09af | 189 | bool NotInRegArea=0; |
gert_lauritsen | 0:68589a6f09af | 190 | |
gert_lauritsen | 0:68589a6f09af | 191 | |
gert_lauritsen | 0:68589a6f09af | 192 | VinBuff[pVinBuff++]=ADCValue[AinVout]; //Vin kægges over... |
gert_lauritsen | 0:68589a6f09af | 193 | if (pVinBuff>=VinBuffLength) pVinBuff=0; |
gert_lauritsen | 0:68589a6f09af | 194 | |
gert_lauritsen | 0:68589a6f09af | 195 | RotorCurrent[PRotorCurrent++]=ADCValue[AinFieldmon]; |
gert_lauritsen | 0:68589a6f09af | 196 | if (PRotorCurrent>=RotorCurrentAdvLength-1) PRotorCurrent=0; |
gert_lauritsen | 0:68589a6f09af | 197 | |
gert_lauritsen | 0:68589a6f09af | 198 | Vmax=VinBuff[MaxValuePos()]; //Max findes |
gert_lauritsen | 0:68589a6f09af | 199 | |
gert_lauritsen | 0:68589a6f09af | 200 | |
gert_lauritsen | 0:68589a6f09af | 201 | if (CalRec.Vset>Vmax) { |
gert_lauritsen | 0:68589a6f09af | 202 | RegError=CalRec.Vset-Vmax; |
gert_lauritsen | 0:68589a6f09af | 203 | RegValue=RegError*CalRec.Kp; //Det ændre ikke på det om vi bruger shift her |
gert_lauritsen | 0:68589a6f09af | 204 | if (RegValue>0xff) RegValue=0xff; //overflow af reguleringsloop |
gert_lauritsen | 0:68589a6f09af | 205 | } else RegValue=0; |
gert_lauritsen | 0:68589a6f09af | 206 | |
gert_lauritsen | 0:68589a6f09af | 207 | if (vmaxdone>=CalRec.VmaxRep) RegValue=0; //AFbryder overspænding vmaxdone inc 1 gang/sek |
gert_lauritsen | 0:68589a6f09af | 208 | |
gert_lauritsen | 0:68589a6f09af | 209 | if ((AdvRotorCurrent()>CalRec.IRotorMax) && (CalRec.IRotorMax>0)) {//begrænser Irotor |
gert_lauritsen | 0:68589a6f09af | 210 | PWMOut=0; //Sluk for strømmen |
gert_lauritsen | 0:68589a6f09af | 211 | } |
gert_lauritsen | 0:68589a6f09af | 212 | |
gert_lauritsen | 0:68589a6f09af | 213 | else { |
gert_lauritsen | 0:68589a6f09af | 214 | if (Rotionprotech) { //Sætter en max |
gert_lauritsen | 0:68589a6f09af | 215 | if (RegValue>CalRec.PWMRotaryBlok) PWMOut=CalRec.PWMRotaryBlok; |
gert_lauritsen | 0:68589a6f09af | 216 | } |
gert_lauritsen | 0:68589a6f09af | 217 | if (softstart) { |
gert_lauritsen | 0:68589a6f09af | 218 | long PError, Power, RegPower; |
gert_lauritsen | 0:68589a6f09af | 219 | Power=(long) Vmax*ADCValue[AinCurrmon]; |
gert_lauritsen | 0:68589a6f09af | 220 | |
gert_lauritsen | 0:68589a6f09af | 221 | switch (softstart) { |
gert_lauritsen | 0:68589a6f09af | 222 | case 1: |
gert_lauritsen | 0:68589a6f09af | 223 | RegPower=CalRec.StartPower; //Max effekt i opstart |
gert_lauritsen | 0:68589a6f09af | 224 | break; |
gert_lauritsen | 0:68589a6f09af | 225 | case 2: |
gert_lauritsen | 0:68589a6f09af | 226 | RegPower=CalRec.StartPower; |
gert_lauritsen | 0:68589a6f09af | 227 | break; |
gert_lauritsen | 0:68589a6f09af | 228 | case 3: |
gert_lauritsen | 0:68589a6f09af | 229 | RegPower=CalRec.RunPower; //MaxEffekt når vi kører |
gert_lauritsen | 0:68589a6f09af | 230 | break; |
gert_lauritsen | 0:68589a6f09af | 231 | } |
gert_lauritsen | 0:68589a6f09af | 232 | |
gert_lauritsen | 0:68589a6f09af | 233 | if (Power<=RegPower) { //Denne del taget 14us |
gert_lauritsen | 0:68589a6f09af | 234 | PError=RegPower-Power; |
gert_lauritsen | 0:68589a6f09af | 235 | PError>>=10; |
gert_lauritsen | 0:68589a6f09af | 236 | if (PError<255) |
gert_lauritsen | 0:68589a6f09af | 237 | PWMOut=PError; //Gange med gain der er 1/128 |
gert_lauritsen | 0:68589a6f09af | 238 | else |
gert_lauritsen | 0:68589a6f09af | 239 | PWMOut=255; |
gert_lauritsen | 0:68589a6f09af | 240 | } else |
gert_lauritsen | 0:68589a6f09af | 241 | PWMOut=0; |
gert_lauritsen | 0:68589a6f09af | 242 | |
gert_lauritsen | 0:68589a6f09af | 243 | |
gert_lauritsen | 0:68589a6f09af | 244 | if (RegValue<PWMOut) { |
gert_lauritsen | 0:68589a6f09af | 245 | PWMOut=RegValue; //Vi går nu ud af softstart |
gert_lauritsen | 0:68589a6f09af | 246 | if (softstartTimeOut--==0) softstart=0; |
gert_lauritsen | 0:68589a6f09af | 247 | } else |
gert_lauritsen | 0:68589a6f09af | 248 | softstartTimeOut=defsoftstartTimeOut; //Softstart er for at få generator stille op. |
gert_lauritsen | 0:68589a6f09af | 249 | |
gert_lauritsen | 0:68589a6f09af | 250 | if (Rotionprotech) { //Sætter en max i startupmode |
gert_lauritsen | 0:68589a6f09af | 251 | if (PWMOut>CalRec.PWMRotaryBlok) PWMOut=CalRec.PWMRotaryBlok; |
gert_lauritsen | 0:68589a6f09af | 252 | } |
gert_lauritsen | 0:68589a6f09af | 253 | |
gert_lauritsen | 0:68589a6f09af | 254 | if (PWMOut>MaxStartPWM) { |
gert_lauritsen | 0:68589a6f09af | 255 | switch (softstart) { |
gert_lauritsen | 0:68589a6f09af | 256 | case 1: |
gert_lauritsen | 0:68589a6f09af | 257 | PWMOut=MaxStartPWM; |
gert_lauritsen | 0:68589a6f09af | 258 | break;//Max 75% |
gert_lauritsen | 0:68589a6f09af | 259 | case 2: |
gert_lauritsen | 0:68589a6f09af | 260 | PWMOut=MinStartPWM; |
gert_lauritsen | 0:68589a6f09af | 261 | break; //Max 10% |
gert_lauritsen | 0:68589a6f09af | 262 | case 3: |
gert_lauritsen | 0:68589a6f09af | 263 | PWMOut=MaxStartPWM; |
gert_lauritsen | 0:68589a6f09af | 264 | break; //Max 75% |
gert_lauritsen | 0:68589a6f09af | 265 | } |
gert_lauritsen | 0:68589a6f09af | 266 | } |
gert_lauritsen | 0:68589a6f09af | 267 | } else //hvis ikke startup |
gert_lauritsen | 0:68589a6f09af | 268 | PWMOut=RegValue; |
gert_lauritsen | 0:68589a6f09af | 269 | |
gert_lauritsen | 0:68589a6f09af | 270 | if ((RegValue<0xff) & (ADCValue[AinVout]>LowCutPoint)) { //er indenfor reg slå softstart fra |
gert_lauritsen | 0:68589a6f09af | 271 | NotInRegArea=0; |
gert_lauritsen | 0:68589a6f09af | 272 | } |
gert_lauritsen | 0:68589a6f09af | 273 | } |
gert_lauritsen | 0:68589a6f09af | 274 | if ((NotInRegArea==0) && (RegValue>=0xff)) NotInRegArea=1; //Vi er udenfor regområde |
gert_lauritsen | 0:68589a6f09af | 275 | RotorPWM->write((float) PWMOut/255); //Sætter pwm på pin |
gert_lauritsen | 0:68589a6f09af | 276 | MessData.regadv+=RegValue; |
gert_lauritsen | 0:68589a6f09af | 277 | MessData.regadvcount++; |
gert_lauritsen | 0:68589a6f09af | 278 | |
gert_lauritsen | 0:68589a6f09af | 279 | MessData.loadadv=PWMOut; |
gert_lauritsen | 0:68589a6f09af | 280 | MessData.loadadvcount++; |
gert_lauritsen | 0:68589a6f09af | 281 | } |
gert_lauritsen | 0:68589a6f09af | 282 | |
gert_lauritsen | 0:68589a6f09af | 283 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 284 | //--------------------------------------------------------------------------------------------------------------------- |
gert_lauritsen | 0:68589a6f09af | 285 |