ELCT 302 / Mbed 2 deprecated drivelab3

Dependencies:   mbed

Committer:
benjaminstone
Date:
Fri Mar 05 17:17:41 2021 +0000
Revision:
2:01372422b0c7
Parent:
1:128dc77d025a
code from drive team for lab 3;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benjaminstone 0:bd04e6ac5a2c 1 // open-loop control of the servo motor
benjaminstone 0:bd04e6ac5a2c 2 // reads analog input and converts it to a pwm signal
benjaminstone 0:bd04e6ac5a2c 3
benjaminstone 0:bd04e6ac5a2c 4 #include "mbed.h"
benjaminstone 0:bd04e6ac5a2c 5 #include <iostream>
benjaminstone 0:bd04e6ac5a2c 6
benjaminstone 0:bd04e6ac5a2c 7 AnalogIn input(PTB0);
benjaminstone 0:bd04e6ac5a2c 8 PwmOut output(PTE21);
benjaminstone 0:bd04e6ac5a2c 9 Ticker updater;
benjaminstone 1:128dc77d025a 10
benjaminstone 1:128dc77d025a 11 float v = 0.0;
benjaminstone 1:128dc77d025a 12 float d = 0.0;
benjaminstone 2:01372422b0c7 13 float prevArea = 0.0;
benjaminstone 2:01372422b0c7 14 float area = 0.0:
benjaminstone 2:01372422b0c7 15 float feedback = 0.0;
benjaminstone 2:01372422b0c7 16
benjaminstone 2:01372422b0c7 17 float KP =-0.0058;
benjaminstone 2:01372422b0c7 18 float KI =1.0223;
benjaminstone 2:01372422b0c7 19 float TI = .001f;
benjaminstone 2:01372422b0c7 20 int sat = 99999;
benjaminstone 0:bd04e6ac5a2c 21 void pwmUpdate()
benjaminstone 0:bd04e6ac5a2c 22 {
benjaminstone 0:bd04e6ac5a2c 23 v = input.read();
benjaminstone 1:128dc77d025a 24 d = v; // sets DC to voltage
benjaminstone 0:bd04e6ac5a2c 25 if( abs(d - output.read()) > 0.001) //only updates the duty cycle if there is a change in the duty cycle greater than 0.3%
benjaminstone 0:bd04e6ac5a2c 26 output.write(d);
benjaminstone 0:bd04e6ac5a2c 27 }
benjaminstone 2:01372422b0c7 28 void piUpdate(){
benjaminstone 2:01372422b0c7 29 feedback = input.read();//inputs frequency of motor
benjaminstone 2:01372422b0c7 30 area= TI*feedback + prevArea; //PI integration
benjaminstone 2:01372422b0c7 31 d = KP*error(i)+ KI*errorArea(i); //PI integration
benjaminstone 2:01372422b0c7 32 output.write(d); //changing speed from PI
benjaminstone 2:01372422b0c7 33 prevArea = area; //storing value
benjaminstone 2:01372422b0c7 34 }
benjaminstone 2:01372422b0c7 35 void realUpdate(float x){
benjaminstone 2:01372422b0c7 36 feedback = input.read();
benjaminstone 2:01372422b0c7 37 area= TI*feedback + prevArea;
benjaminstone 2:01372422b0c7 38 d = KP*error(i)+ KI*errorArea(i);
benjaminstone 2:01372422b0c7 39 output.write(x-d);
benjaminstone 2:01372422b0c7 40 prevArea = area;
benjaminstone 2:01372422b0c7 41 }
benjaminstone 2:01372422b0c7 42 void step(){
benjaminstone 2:01372422b0c7 43 for(float s = 0; s < SAT; s+= TI){
benjaminstone 2:01372422b0c7 44 v = (-1.277e-18*s^4 - 1.61e-14*s^3 + 2.789e-12*s^2 + 1.23e-11*s)/(5.759e-21*s^6 + 1.472e-16*s^5 + 9.414e-13*s^4 + 8.078e-12*s^3 + 2.02e-11*s^2 + 1.23e-11*s)//TF from gclose
benjaminstone 2:01372422b0c7 45 realUpdate(val);
benjaminstone 2:01372422b0c7 46 }
benjaminstone 2:01372422b0c7 47 }
benjaminstone 0:bd04e6ac5a2c 48 int main(void)
benjaminstone 0:bd04e6ac5a2c 49 {
benjaminstone 0:bd04e6ac5a2c 50 output.period(0.00005f); // 20 kHz control signal
benjaminstone 0:bd04e6ac5a2c 51 // attaches pwmUpdate function to the ticker with a period of 20ms
benjaminstone 2:01372422b0c7 52 //updater.attach(&pwmUpdate,0.00005f);
benjaminstone 2:01372422b0c7 53 updater.attach(&piUpdate,TI);
benjaminstone 0:bd04e6ac5a2c 54 std::cout << "AnalogIn: " << v << " Duty Cycle: " << d << std::endl;
benjaminstone 0:bd04e6ac5a2c 55 while(1) {} // do nothing
benjaminstone 0:bd04e6ac5a2c 56 }