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: mbed
Fork of nucf446-cuboid-balance1_strong by
Revision 26:492c7ab05e67, committed 2018-04-10
- Comitter:
- pmic
- Date:
- Tue Apr 10 12:24:57 2018 +0000
- Parent:
- 25:e46687840dd6
- Commit message:
- correct new functinality
Changed in this revision
diff -r e46687840dd6 -r 492c7ab05e67 GPA.cpp
--- a/GPA.cpp Mon Apr 09 18:23:10 2018 +0000
+++ b/GPA.cpp Tue Apr 10 12:24:57 2018 +0000
@@ -30,19 +30,21 @@
instantiate option 2: (for a second, refined frequency grid measurement)
- GPA(float f0, float f1, float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
+ GPA(float f0, float f1, float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
f0: frequency point for the calculation of Aexc0 in Hz (should be chosen like in the first measurement)
f1: frequency point for the calculation of Aexc1 in Hz (should be chosen like in the first measurement)
*fexcDes: sorted frequency point array in Hz
+ NfexcDes: length of fexcDes
instantiate option 3: (for an arbitary but sorted frequency grid measurement)
- GPA(float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
+ GPA(float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
*fexcDes: sorted frequency point array in Hz
Aexc0: excitation amplitude at fexcDes[0]
Aexc1: excitation amplitude at fexcDes[NfexcDes-1]
+ NfexcDes: length of fexcDes
hints: the amplitude drops with 1/fexc, if you're using Axc1 = Aexc0/fMax then d/dt exc = const.,
this is recommended if your controller does not have a rolloff. if a desired frequency point
@@ -127,10 +129,10 @@
reset();
}
-GPA::GPA(float f0, float f1, float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
+GPA::GPA(float f0, float f1, float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
{
// convert fexcDes from float to double, it is assumed that it is sorted
- NfexcDes = sizeof(fexcDes)/sizeof(fexcDes[0]);
+ this->NfexcDes = NfexcDes;
this->fexcDes = (double*)malloc(NfexcDes*sizeof(double));
for(int i = 0; i < NfexcDes; i++) {
this->fexcDes[i] = (double)fexcDes[i];
@@ -153,10 +155,10 @@
reset();
}
-GPA::GPA(float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
+GPA::GPA(float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1)
{
// convert fexcDes from float to double, it is assumed that it is sorted
- NfexcDes = sizeof(fexcDes)/sizeof(fexcDes[0]);
+ this->NfexcDes = NfexcDes;
this->fexcDes = (double*)malloc(NfexcDes*sizeof(double));
for(int i = 0; i < NfexcDes; i++) {
this->fexcDes[i] = (double)fexcDes[i];
@@ -345,4 +347,10 @@
printLine();
printf(" number of data points: %9i\r\n", NmeasTotal);
printf(" measurment time in sec: %9.2f\r\n", (float)((double)NmeasTotal*Ts));
-}
\ No newline at end of file
+}
+
+void GPA::printNfexcDes()
+{
+ printLine();
+ printf(" number of frequancy points: %2i\r\n", NfexcDes);
+}
diff -r e46687840dd6 -r 492c7ab05e67 GPA.h
--- a/GPA.h Mon Apr 09 18:23:10 2018 +0000
+++ b/GPA.h Tue Apr 10 12:24:57 2018 +0000
@@ -3,8 +3,8 @@
public:
GPA(float fMin, float fMax, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1);
- GPA(float f0, float f1, float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1);
- GPA(float *fexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1);
+ GPA(float f0, float f1, float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1);
+ GPA(float *fexcDes, int NfexcDes, int NperMin, int NmeasMin, float Ts, float Aexc0, float Aexc1);
float operator()(float inp, float out) {
return update((double)inp, (double)out);
@@ -18,12 +18,13 @@
void printGPAfexcDes();
void printGPAmeasPara();
void printGPAmeasTime();
+ void printNfexcDes();
private:
- int NfexcDes;
- int NperMin;
- int NmeasMin;
+ int NfexcDes;
+ int NperMin;
+ int NmeasMin;
double Ts;
double *fexcDes;
double aAexcDes;
@@ -34,24 +35,24 @@
double pi2Ts;
double piDiv2;
- int Nmeas;
- int Nper;
+ int Nmeas;
+ int Nper;
double fexc;
double fexcPast;
- int ii;
- int jj;
+ int ii;
+ int jj;
double scaleG;
double cr;
double ci;
double *sU;
double *sY;
double sinarg;
- int NmeasTotal;
+ int NmeasTotal;
double Aexc;
double pi2Tsfexc;
- void fexcDesLogspace(double fMin, double fMax, int NfexcDes);
- void calcGPAmeasPara(double fexcDes_i);
- void printLine();
+ void fexcDesLogspace(double fMin, double fMax, int NfexcDes);
+ void calcGPAmeasPara(double fexcDes_i);
+ void printLine();
};
\ No newline at end of file
diff -r e46687840dd6 -r 492c7ab05e67 main.cpp
--- a/main.cpp Mon Apr 09 18:23:10 2018 +0000
+++ b/main.cpp Tue Apr 10 12:24:57 2018 +0000
@@ -30,7 +30,10 @@
float D = 0.2f;
IIR_filter pt2(w0, D, Ts, 1.0f);
-GPA gpa1(1.0f, 200.0f,50, 5, 100, Ts, 1.0f,1.0f); // init GPA, see references there
+// GPA gpa1(1.0f, 200.0f, 50, 5, 100, Ts, 1.0f, 1.0f); // init GPA, see references there
+float fexcDes[5] = {10.0f, 20.0f, 30.0f, 40.0f, 50.0f};
+// GPA gpa1(1.0f, 200.0f, fexcDes, sizeof(fexcDes)/sizeof(fexcDes[0]), 5, 100, Ts, 1.0f, 1.0f);
+GPA gpa1(fexcDes, sizeof(fexcDes)/sizeof(fexcDes[0]), 5, 100, Ts, 1.0f, 1.0f);
// user defined functions
void updateControllers(void); // speed controller loop (via interrupt)
void pressed(void); // user Button pressed
@@ -51,6 +54,17 @@
gpa1.reset();
pt2.reset(0.0f);
+ gpa1.printGPAmeasPara();
+ /*
+ gpa1.printNfexcDes();
+ printLine();
+ for(int i = 0; i < 5; i++) {
+ printf(" frequancy points: %9.3f\r\n", fexcDes[i]);
+ }
+ printLine();
+ printf(" number of frequancy points: %2i\r\n", sizeof(fexcDes)/sizeof(fexcDes[0]));
+ */
+
// attach controller loop to timer interrupt
ControllerLoopTimer.attach(&updateControllers, Ts); //Assume Fs = 400Hz;
}
