Jacob Kang
/
ES305_LAB3
published
main.cpp@0:f2e536cb3497, 2018-10-25 (annotated)
- Committer:
- kingkang2
- Date:
- Thu Oct 25 00:22:07 2018 +0000
- Revision:
- 0:f2e536cb3497
published;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |