Zach Ferraguti
/
ES305_Lab6_Wk1
Code
Diff: main.cpp
- Revision:
- 0:6604df0763e5
diff -r 000000000000 -r 6604df0763e5 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Oct 26 18:51:34 2016 +0000 @@ -0,0 +1,98 @@ +/************************************************************************************* +ES305 Lab 06 +Stephen Roberts and Zach Ferraguti +19OCT20167 +**************************************************************************************/ + +// Include necessary libraries +#include "mbed.h" +#include "mbedWSEsbc.h" +#define PI (3.14159) + + +// Declare necessary objects +DigitalOut myled(LED1); + + +// variables for data handling and storage +float Ts; // Sampling period 1/Ts Hz +float TotalTime; // Total run time +float ang,angp,speed; // variables for approximating speed from encoder measurements +float dc; // duty cycle applied to motor +long enc1; // encoder variable +float Time; // elapsed time +float dt; // desired loop duration +float DC; // duty cycle specified by user + + + +int main () +{ + // Initializes mbed to access functionality of encoder, A/D, driver, etc. chipsets + // Input is baud rate for PC communication + mbedWSEsbcInit(115200); // also initializes timer object t + mot_en1.period(0.020); // sets PWM period to 0.02 seconds + + while(1) { + + // Wait for user input to begin loop + pc.scanf("%f,%f,%f",&TotalTime,&Ts,&DC); + + Time = 0.0; // reset time variable + t.reset(); // reset timer object + + + + angp = 0; // initialize previous angle variable to zero + + myled = 1; // turn on light to indicate it's sampling + + while(Time <= TotalTime) { + t.start(); // start measuring comp time + + // Read encoder + enc1 = LS7366_read_counter(1); // input is the encoder channel + + // Convert from counts to radians + ang = 2*PI*enc1/6500.0; + + // Estimate speed + speed = (ang-angp)/Ts; + + // Age variables + angp = ang; + + // compute duty cycle for motor using proportional control scheme + if(Time<0.1) { + dc = 0.0; + } else if(Time<0.45) { + dc=DC; + } else { + dc = 0.1; + } + + // motor control + mot_control(1,dc); // first input is the motor channel, second is duty cycle + + + pc.printf("%f,%f,%f\n",Time,speed,dc); + + + Time = Time + Ts; // update time + + // wait to achieve sampling rate + dt = Ts - t.read(); + if(dt<0.0) { + dt = 0.0; + } + wait(dt); + + t.reset(); + + + } // end while(Time<=Ttime) + mot_control(1,0.0); // turn motor off at end of test + myled = 0; // turn off light to indicate it has finished + + }// end while(repeat==1) +}// end main \ No newline at end of file