Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed PID
Revision 15:e1a76426fb6a, committed 2018-10-24
- Comitter:
- nicovv44
- Date:
- Wed Oct 24 08:42:30 2018 +0000
- Parent:
- 14:3f7e54ee1211
- Commit message:
- Relay for DC is OK. Attempt to get the phase angle.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Oct 17 09:10:32 2018 +0000
+++ b/main.cpp Wed Oct 24 08:42:30 2018 +0000
@@ -6,7 +6,7 @@
//Kc, Ti, Td, interval
PID PIDcontroller1(2.9, 1.0, 0.0, PIDRATE);//frequency PID
-PID PIDcontroller2(0.2, 1.0, 0.0, PIDRATE);//amplitude PID
+PID PIDcontroller2(0.4, 1.0, 0.0, PIDRATE);//amplitude PID
TextLCD lcd(D2, D3, D4, D5, D6, D7); // rs, e, d4-d7
Serial pc(USBTX, USBRX); // tx, rx
@@ -24,6 +24,7 @@
AnalogIn differentialPin(A2);
AnalogIn potarDC(A3);
AnalogIn potarSY(A4);
+AnalogIn currentPin(A5);
const float sqrt2 = 1.414213562;
@@ -49,6 +50,7 @@
void initPID1();
void initPID2();
void tickerPIDfunction();
+float getPhaseAngle(AnalogIn voltage_pin, AnalogIn current_pin);
// ##############################################
@@ -56,27 +58,29 @@
// #############################################################################
int main() {
float syncRMS, gridRMS, syncFreq, gridFreq;
-
- //initialise PIDcontrollers
- initPID1();
- initPID2();
relay1 = 1;//Relay off=1, on=0
relay2 = 1;//Relay off=1, on=0
relay3 = 1;//Relay off=1, on=0
relay4 = 0;//Relay off=1, on=0
+
+ //initialise PIDcontrollers
+ initPID1();
+ initPID2();
+
+
while(mainLoop){
- pwmDC.period(0.001f);
+ pwmDC.period(0.0002f);
pwmDC.write(1-0.00f); //(1-duty)
- pwmSY.period(0.001f);
+ pwmSY.period(0.0002f);
pwmSY.write(1-0.00f); //(1-duty)
while(userButton==1){;}
- pwmDC.write(1-0.50f); //(1-duty)
- pwmSY.write(1-0.50f); //(1-duty)
+ pwmDC.write(1-0.900f); //(1-duty)
+ pwmSY.write(1-0.80f); //(1-duty)
//tickerPWMDC.attach(&tickerPWMDCfunction, 0.1);
//pc.printf("\n\nAccelerating\r\n");
@@ -129,17 +133,17 @@
relay2 = 0;//Relay off=1, on=0 // to hear the noise
relay3 = 0;//Relay off=1, on=0 // to hear the noise
relay4 = 1;//Relay off=1, on=0 // to hear the noise
+ pwmDC.write(1-0.00f); //(1-duty)
+ pwmSY.write(1-0.00f); //(1-duty)
synchronized = true;
mainLoop = false;
}
}
}
}
+ while(true)
+ getPhaseAngle(currentPin, gridPin);
}
-
-
-
-
}
@@ -298,4 +302,35 @@
lcd.locate(0,1);//(col,row)
lcd.printf("S:%3.1f@%3.1f", syncRMS, syncFreq);
+}
+
+
+// #############################################################################
+float getPhaseAngle(AnalogIn voltage_pin, AnalogIn current_pin){
+ bool searchingInstant = true;
+ Timer timer1;
+ float voltageValue;
+ //float maxReadedVoltageVoltage, maxReadedVoltageCurrent;//maximum voltage readed by the ADC
+ //maxReadedVoltageVoltage = getVolageReadedMax(voltage_pin);
+ //maxReadedVoltageCurrent= getVolageReadedMax(current_pin);
+ //pc.printf("maxReadedVoltageVoltage: %f \t maxReadedVoltageCurrent: %f\r\n", maxReadedVoltageVoltage, maxReadedVoltageCurrent);
+ while(searchingInstant){
+ voltageValue = voltage_pin.read();
+ //pc.printf("voltageValue voltage:%f\n\r",voltageValue);
+ if(voltageValue < 0.50){
+ timer1.start();
+ searchingInstant = false;
+ }
+ }
+ searchingInstant = true;
+ while(searchingInstant){
+ voltageValue = current_pin.read();
+ //pc.printf("voltageValue current:%f\n\r",voltageValue);
+ if(voltageValue < 0.050){
+ timer1.stop();
+ searchingInstant = false;
+ }
+ }
+ pc.printf("phaseAngle:%f\n\r",timer1.read()*180/0.020);
+ return 0;
}
\ No newline at end of file