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.
FishMotors.cpp@20:97ab3d4c07b6, 2013-11-19 (annotated)
- Committer:
- calamaridudeman
- Date:
- Tue Nov 19 09:17:01 2013 +0000
- Revision:
- 20:97ab3d4c07b6
- Parent:
- 8:dc13c3be6838
started trying to compile, really not working due to no default constructor errors
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| calamaridudeman | 20:97ab3d4c07b6 | 1 | /* |
| calamaridudeman | 8:dc13c3be6838 | 2 | #include "mbed.h" // mbed library |
| calamaridudeman | 8:dc13c3be6838 | 3 | #include "QEI.h" |
| calamaridudeman | 8:dc13c3be6838 | 4 | |
| calamaridudeman | 8:dc13c3be6838 | 5 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
| calamaridudeman | 8:dc13c3be6838 | 6 | |
| calamaridudeman | 8:dc13c3be6838 | 7 | Ticker myTicker; // creates an instance of the ticker class, which can be used for running functions at a specified frequency. |
| calamaridudeman | 8:dc13c3be6838 | 8 | Ticker myTicker1; |
| calamaridudeman | 8:dc13c3be6838 | 9 | |
| calamaridudeman | 8:dc13c3be6838 | 10 | FILE *fp; |
| calamaridudeman | 8:dc13c3be6838 | 11 | |
| calamaridudeman | 8:dc13c3be6838 | 12 | // Declaring pins |
| calamaridudeman | 8:dc13c3be6838 | 13 | DigitalOut dA(p19); // pin 5 set as a digital output. Pins 5-30 can be used as digital outputs. |
| calamaridudeman | 8:dc13c3be6838 | 14 | DigitalOut dB(p20); // pin 6 set as digital input. Pins 5-30 can be used as digital inputs. |
| calamaridudeman | 8:dc13c3be6838 | 15 | PwmOut pwmOut1(p21); // pin 21 set as PWM output. Pins 21-26 can be used as PWM outputs. |
| calamaridudeman | 8:dc13c3be6838 | 16 | AnalogIn current(p15); |
| calamaridudeman | 8:dc13c3be6838 | 17 | |
| calamaridudeman | 8:dc13c3be6838 | 18 | QEI motor1(p26, p25, NC, 1200, QEI::X4_ENCODING); // (encoder channel 1 pin, encoder channel 2 pin, index (n/a here), counts per revolution, mode (X4, X2)) |
| calamaridudeman | 8:dc13c3be6838 | 19 | // Use line above verbatim to avoid difficulties. Only certain pins can be used for counting encoder ticks. |
| calamaridudeman | 8:dc13c3be6838 | 20 | |
| calamaridudeman | 8:dc13c3be6838 | 21 | float speed = 0; |
| calamaridudeman | 8:dc13c3be6838 | 22 | float pos = 0; |
| calamaridudeman | 8:dc13c3be6838 | 23 | float timet = 0; |
| calamaridudeman | 8:dc13c3be6838 | 24 | float dCurrent1 = 0; |
| calamaridudeman | 8:dc13c3be6838 | 25 | float duty1 = 0; |
| calamaridudeman | 8:dc13c3be6838 | 26 | float mCurrent1 = 0; |
| calamaridudeman | 8:dc13c3be6838 | 27 | float dAngle1=0; // Desired Angle |
| calamaridudeman | 8:dc13c3be6838 | 28 | float dAngularVelocity1=0; // Desired Angular velocity |
| calamaridudeman | 8:dc13c3be6838 | 29 | float Angle1 = 0; |
| calamaridudeman | 8:dc13c3be6838 | 30 | |
| calamaridudeman | 8:dc13c3be6838 | 31 | |
| calamaridudeman | 8:dc13c3be6838 | 32 | float filterLowPass(float old, float current, float alpha){ |
| calamaridudeman | 8:dc13c3be6838 | 33 | return (old+alpha*(current-old)); |
| calamaridudeman | 8:dc13c3be6838 | 34 | } |
| calamaridudeman | 8:dc13c3be6838 | 35 | |
| calamaridudeman | 8:dc13c3be6838 | 36 | void Control() |
| calamaridudeman | 8:dc13c3be6838 | 37 | { |
| calamaridudeman | 8:dc13c3be6838 | 38 | float preAngle1=Angle1; // Storing the angle in the previous time step |
| calamaridudeman | 8:dc13c3be6838 | 39 | Angle1 = motor1.getPulses()/1200.0*6.283; // Updating new motor angle |
| calamaridudeman | 8:dc13c3be6838 | 40 | speed =filterLowPass(speed,(Angle1-preAngle1)/.001, .2); // Updating new motor angluar vel |
| calamaridudeman | 8:dc13c3be6838 | 41 | mCurrent1 = current.read() *3.3/.14; //measure current |
| calamaridudeman | 8:dc13c3be6838 | 42 | |
| calamaridudeman | 8:dc13c3be6838 | 43 | dCurrent1 = (3*(dAngle1-Angle1)+0.04*(dAngularVelocity1-speed)); |
| calamaridudeman | 8:dc13c3be6838 | 44 | |
| calamaridudeman | 8:dc13c3be6838 | 45 | if (dCurrent1>0){ |
| calamaridudeman | 8:dc13c3be6838 | 46 | dA=1; |
| calamaridudeman | 8:dc13c3be6838 | 47 | dB=0; |
| calamaridudeman | 8:dc13c3be6838 | 48 | duty1= (abs(dCurrent1)*3.27+0.174*speed+10*(abs(dCurrent1)-mCurrent1))/12.0; |
| calamaridudeman | 8:dc13c3be6838 | 49 | //2.10- Resistance 0.2-Kv 5- current control gain, 12- source voltage |
| calamaridudeman | 8:dc13c3be6838 | 50 | |
| calamaridudeman | 8:dc13c3be6838 | 51 | } else if (dCurrent1<0) { |
| calamaridudeman | 8:dc13c3be6838 | 52 | dA=0; |
| calamaridudeman | 8:dc13c3be6838 | 53 | dB=1; |
| calamaridudeman | 8:dc13c3be6838 | 54 | duty1= (abs(dCurrent1)*3.27-0.174*speed+10*(abs(dCurrent1)-mCurrent1))/12.0;} |
| calamaridudeman | 8:dc13c3be6838 | 55 | |
| calamaridudeman | 8:dc13c3be6838 | 56 | if (duty1>0.99){ |
| calamaridudeman | 8:dc13c3be6838 | 57 | duty1 =1; |
| calamaridudeman | 8:dc13c3be6838 | 58 | } |
| calamaridudeman | 8:dc13c3be6838 | 59 | |
| calamaridudeman | 8:dc13c3be6838 | 60 | pwmOut1.write(duty1); |
| calamaridudeman | 8:dc13c3be6838 | 61 | } |
| calamaridudeman | 8:dc13c3be6838 | 62 | |
| calamaridudeman | 8:dc13c3be6838 | 63 | void Printer(){ |
| calamaridudeman | 8:dc13c3be6838 | 64 | fprintf(fp, "%f %f %f\n", duty1, mCurrent1, speed); |
| calamaridudeman | 8:dc13c3be6838 | 65 | } |
| calamaridudeman | 8:dc13c3be6838 | 66 | |
| calamaridudeman | 8:dc13c3be6838 | 67 | |
| calamaridudeman | 8:dc13c3be6838 | 68 | int main() { |
| calamaridudeman | 8:dc13c3be6838 | 69 | dCurrent1 = 3; |
| calamaridudeman | 8:dc13c3be6838 | 70 | |
| calamaridudeman | 8:dc13c3be6838 | 71 | fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing |
| calamaridudeman | 8:dc13c3be6838 | 72 | myTicker1.attach(&Printer, .005); |
| calamaridudeman | 8:dc13c3be6838 | 73 | myTicker.attach(&Control, .001); |
| calamaridudeman | 8:dc13c3be6838 | 74 | |
| calamaridudeman | 8:dc13c3be6838 | 75 | pwmOut1.period_us(100); |
| calamaridudeman | 8:dc13c3be6838 | 76 | |
| calamaridudeman | 8:dc13c3be6838 | 77 | //pwmOut.write(.5); |
| calamaridudeman | 8:dc13c3be6838 | 78 | wait(150); |
| calamaridudeman | 8:dc13c3be6838 | 79 | dCurrent1 = 0; |
| calamaridudeman | 8:dc13c3be6838 | 80 | myTicker.detach(); |
| calamaridudeman | 8:dc13c3be6838 | 81 | myTicker1.detach(); |
| calamaridudeman | 8:dc13c3be6838 | 82 | fclose(fp); |
| calamaridudeman | 8:dc13c3be6838 | 83 | |
| calamaridudeman | 8:dc13c3be6838 | 84 | pwmOut1.write(0); |
| calamaridudeman | 8:dc13c3be6838 | 85 | |
| calamaridudeman | 8:dc13c3be6838 | 86 | } |
| calamaridudeman | 20:97ab3d4c07b6 | 87 | */ |
