published

Dependencies:   mbed mbedWSEsbc

Committer:
kingkang2
Date:
Thu Oct 25 00:22:07 2018 +0000
Revision:
0:f2e536cb3497
published;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kingkang2 0:f2e536cb3497 1 /*******************************************************************************
kingkang2 0:f2e536cb3497 2 Jacob Kang, Montassar Mouaffak
kingkang2 0:f2e536cb3497 3 ES305
kingkang2 0:f2e536cb3497 4 Section 2141
kingkang2 0:f2e536cb3497 5 This will drive a DC motor with a sinusoidal duty cycle for a user specified
kingkang2 0:f2e536cb3497 6 amount of time and measure the speed of the motor shaft. Then it will send the
kingkang2 0:f2e536cb3497 7 elapsed time, speed, and duty cycle at each time increment across the serial
kingkang2 0:f2e536cb3497 8 port.
kingkang2 0:f2e536cb3497 9 *******************************************************************************/
kingkang2 0:f2e536cb3497 10
kingkang2 0:f2e536cb3497 11 //declare libraries
kingkang2 0:f2e536cb3497 12
kingkang2 0:f2e536cb3497 13 #include "mbed.h"
kingkang2 0:f2e536cb3497 14 #include "mbedWSEsbc.h"
kingkang2 0:f2e536cb3497 15 #define PI (3.14159)
kingkang2 0:f2e536cb3497 16
kingkang2 0:f2e536cb3497 17 //declare objects
kingkang2 0:f2e536cb3497 18
kingkang2 0:f2e536cb3497 19 Ticker Controller;
kingkang2 0:f2e536cb3497 20
kingkang2 0:f2e536cb3497 21
kingkang2 0:f2e536cb3497 22 //declare variables
kingkang2 0:f2e536cb3497 23
kingkang2 0:f2e536cb3497 24 float time_tot;
kingkang2 0:f2e536cb3497 25 float current_time;
kingkang2 0:f2e536cb3497 26 float ctrl_period = 0.0083;
kingkang2 0:f2e536cb3497 27 float datastrm = 0.01;
kingkang2 0:f2e536cb3497 28 float dutcyc;
kingkang2 0:f2e536cb3497 29 float DCAmp;
kingkang2 0:f2e536cb3497 30 float speed;
kingkang2 0:f2e536cb3497 31 float meas;
kingkang2 0:f2e536cb3497 32 float rad_curr;
kingkang2 0:f2e536cb3497 33 float rad_old = 0.0;
kingkang2 0:f2e536cb3497 34
kingkang2 0:f2e536cb3497 35 // declare functions
kingkang2 0:f2e536cb3497 36
kingkang2 0:f2e536cb3497 37 void ctrCode();
kingkang2 0:f2e536cb3497 38 void stepCode();
kingkang2 0:f2e536cb3497 39
kingkang2 0:f2e536cb3497 40 //Enter main function
kingkang2 0:f2e536cb3497 41 int main()
kingkang2 0:f2e536cb3497 42 {
kingkang2 0:f2e536cb3497 43
kingkang2 0:f2e536cb3497 44 //initialize board
kingkang2 0:f2e536cb3497 45 mbedWSEsbcInit(115200);
kingkang2 0:f2e536cb3497 46 //initialize pwm
kingkang2 0:f2e536cb3497 47 mot_en1.period(.020);
kingkang2 0:f2e536cb3497 48
kingkang2 0:f2e536cb3497 49 while(1) {
kingkang2 0:f2e536cb3497 50 pc.scanf("%f,%f", &time_tot,&DCAmp);
kingkang2 0:f2e536cb3497 51 current_time = 0.0;
kingkang2 0:f2e536cb3497 52 t.reset(); //reset time object
kingkang2 0:f2e536cb3497 53 Controller.attach(&stepCode,ctrl_period);
kingkang2 0:f2e536cb3497 54 t.start();
kingkang2 0:f2e536cb3497 55 while(current_time <= time_tot) {
kingkang2 0:f2e536cb3497 56 pc.printf("%f,%f,%f\n",current_time,speed,dutcyc);
kingkang2 0:f2e536cb3497 57 wait(datastrm);
kingkang2 0:f2e536cb3497 58 }
kingkang2 0:f2e536cb3497 59 Controller.detach(); // detach ticker to turn off controller
kingkang2 0:f2e536cb3497 60 mot_control(1,0.0);
kingkang2 0:f2e536cb3497 61 }
kingkang2 0:f2e536cb3497 62 }
kingkang2 0:f2e536cb3497 63
kingkang2 0:f2e536cb3497 64
kingkang2 0:f2e536cb3497 65 void ctrCode()
kingkang2 0:f2e536cb3497 66 {
kingkang2 0:f2e536cb3497 67 //Read current elasped time
kingkang2 0:f2e536cb3497 68 current_time = t.read();
kingkang2 0:f2e536cb3497 69 //Read encoder
kingkang2 0:f2e536cb3497 70 meas = LS7366_read_counter(1);
kingkang2 0:f2e536cb3497 71 //Convert from counts to radians
kingkang2 0:f2e536cb3497 72 rad_curr = (meas/6500)*2*PI;
kingkang2 0:f2e536cb3497 73 //Estimate speed
kingkang2 0:f2e536cb3497 74 speed = (rad_curr - rad_old)/ctrl_period;
kingkang2 0:f2e536cb3497 75 //Age variables
kingkang2 0:f2e536cb3497 76 rad_old = rad_curr;
kingkang2 0:f2e536cb3497 77 //compute duty cycle for motor (if necessary)
kingkang2 0:f2e536cb3497 78 dutcyc = DCAmp*sin((2.0*PI*current_time)/5.0);
kingkang2 0:f2e536cb3497 79 //send duty cycle to motor
kingkang2 0:f2e536cb3497 80 mot_control(1,dutcyc);
kingkang2 0:f2e536cb3497 81 }
kingkang2 0:f2e536cb3497 82
kingkang2 0:f2e536cb3497 83 void stepCode()
kingkang2 0:f2e536cb3497 84 {
kingkang2 0:f2e536cb3497 85 //Read current elasped time
kingkang2 0:f2e536cb3497 86 current_time = t.read();
kingkang2 0:f2e536cb3497 87 //Read encoder
kingkang2 0:f2e536cb3497 88 meas = LS7366_read_counter(1);
kingkang2 0:f2e536cb3497 89 //Convert from counts to radians
kingkang2 0:f2e536cb3497 90 rad_curr = (meas/6500)*2*PI;
kingkang2 0:f2e536cb3497 91 //Estimate speed
kingkang2 0:f2e536cb3497 92 speed = (rad_curr - rad_old)/ctrl_period;
kingkang2 0:f2e536cb3497 93 //Age variables
kingkang2 0:f2e536cb3497 94 rad_old = rad_curr;
kingkang2 0:f2e536cb3497 95 //compute duty cycle for motor (if necessary)
kingkang2 0:f2e536cb3497 96 if(current_time <0.1) {
kingkang2 0:f2e536cb3497 97 dutcyc = 0.0;
kingkang2 0:f2e536cb3497 98 } else {
kingkang2 0:f2e536cb3497 99 dutcyc = DCAmp;
kingkang2 0:f2e536cb3497 100 }
kingkang2 0:f2e536cb3497 101 dutcyc = DCAmp*sin((2.0*PI*current_time)/5.0);
kingkang2 0:f2e536cb3497 102 //send duty cycle to motor
kingkang2 0:f2e536cb3497 103 mot_control(1,dutcyc);
kingkang2 0:f2e536cb3497 104 }