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: QEI mbed-rtos mbed
Diff: main.cpp
- Revision:
- 5:d41998e421ed
- Parent:
- 4:8fcaff7801b0
- Child:
- 6:16da0de99a8c
--- a/main.cpp Mon Dec 02 04:38:30 2013 +0000 +++ b/main.cpp Tue Dec 03 16:16:14 2013 +0000 @@ -9,9 +9,8 @@ #define QUADRATURE_TYPE 2 #define OUR_PI 3.141592653589793 -#define DATA_COLS 6 -#define NR_SAMPLES 1500 -#define buffer_size 3500 +#define DATA_COLS 7 +#define BUFFER_SIZE 4200 #define MAX_VOLTAGE 3.3 #define VOLTS_PER_AMP 0.14 @@ -32,14 +31,17 @@ // open a file for data logger LocalFileSystem local("local"); -//const int buffer_size = DATA_COLS * NR_SAMPLES; float theta1, theta2, dtheta1, dtheta2; float mCurrent = 0.0; +float inputVoltage = 0.0; //int pulses0 = 0; //int deltaPulses; float t0 = 0.0; float t = 0.0, dt; -float k1 = -0.0316, k2 = 9.7076, k3 = -0.4095, k4 = 1.2340, k5 = 0.0410; + +//Controller gains - Full-state Feedback +//float k1 = -0.0316, k2 = 9.7076, k3 = -0.4095, k4 = 1.2340, k5 = 0.0410; +float k1 = -0.3162, k2 = 18.278, k3 = -0.8964, k4 = 2.4441, k5 = 0.1843; float encoder_conv = 2*OUR_PI/(float(ENCODER_PPR)*float(QUADRATURE_TYPE)); float motor_conv = 2*OUR_PI/(float(MOTOR_PPR)*float(QUADRATURE_TYPE)); @@ -51,13 +53,14 @@ void saving(void const *args) { index = 0; - while (index < buffer_size) { + while (index < BUFFER_SIZE) { buffer[index] = theta1; buffer[index+1] = theta2; buffer[index+2] = dtheta1; buffer[index+3] = dtheta2; buffer[index+4] = mCurrent; - buffer[index+5] = t; + buffer[index+5] = inputVoltage; + buffer[index+6] = t; index = index + DATA_COLS; Thread::wait(20); } @@ -79,8 +82,7 @@ } void computing(void const *args) { - float z1 = 0.0, z2 = 0.0, dz1 = 0.0, dz2 = 0.0, z3 = 0.0, dz3 = 0.0; - float inputVoltage; + float z1 = 0.0, z2 = 0.0, dz1 = 0.0, dz2 = 0.0, z3 = 0.0, dz3 = 0.0; while (true) { t = T.read(); @@ -133,9 +135,9 @@ wait(2.0); - for (int i=0; i < index; i=i+DATA_COLS) + for (int i=0; i < index; i = i + DATA_COLS) { - for (int j = 0; j< DATA_COLS; j++) + for (int j = 0; j < DATA_COLS; j++) { fprintf(fp,"%f,", buffer[i+j]); } @@ -149,16 +151,16 @@ int main() { //allocate memory for the buffer pc.printf("creating buffer!\r\n"); - buffer = new float[buffer_size]; + buffer = new float[BUFFER_SIZE]; pc.printf("done creating buffer!\r\n"); T.start(); - Thread thrd2(computing,NULL,osPriorityRealtime); - Thread thrd3(saving,NULL,osPriorityNormal); + pwmOut.period(0.0001); - //Run forward - pwmOut.period(0.0001); - dOut1=1; - dOut2=0; + Thread thrd2(computing,NULL,osPriorityRealtime); + pc.printf("started computing thread!\r\n"); + Thread thrd3(saving,NULL,osPriorityNormal); + pc.printf("started saving thread!\r\n"); + pc.printf("Start!\r\n"); pc.printf("Time: %f\r\n", t);