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.
pwm.cpp@0:f15aa1706e16, 2015-12-14 (annotated)
- Committer:
- BAC
- Date:
- Mon Dec 14 15:03:32 2015 +0000
- Revision:
- 0:f15aa1706e16
- Child:
- 1:b3ee94985eca
- Child:
- 2:d7cd4deef7be
bacon & tum
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
BAC | 0:f15aa1706e16 | 1 | #include "pwm.h" |
BAC | 0:f15aa1706e16 | 2 | |
BAC | 0:f15aa1706e16 | 3 | MotorDriver::MotorDriver() : M1(PA_6), M2(PA_7), M3(PB_6) { |
BAC | 0:f15aa1706e16 | 4 | unsigned int i; |
BAC | 0:f15aa1706e16 | 5 | M1.period_ms(20); |
BAC | 0:f15aa1706e16 | 6 | M2.period_ms(20); |
BAC | 0:f15aa1706e16 | 7 | M3.period_ms(20); |
BAC | 0:f15aa1706e16 | 8 | |
BAC | 0:f15aa1706e16 | 9 | M1.pulsewidth_us(1900); |
BAC | 0:f15aa1706e16 | 10 | M2.pulsewidth_us(600); |
BAC | 0:f15aa1706e16 | 11 | M3.pulsewidth_us(2000); |
BAC | 0:f15aa1706e16 | 12 | wait(2.0f); |
BAC | 0:f15aa1706e16 | 13 | // first move |
BAC | 0:f15aa1706e16 | 14 | for(i=0;i<1000;i++) |
BAC | 0:f15aa1706e16 | 15 | { |
BAC | 0:f15aa1706e16 | 16 | M1.pulsewidth_us(1900 - (unsigned int)(i*0.853)); |
BAC | 0:f15aa1706e16 | 17 | printf("%d",1900 - (unsigned int)(i*0.853)); |
BAC | 0:f15aa1706e16 | 18 | } |
BAC | 0:f15aa1706e16 | 19 | for(i=0;i<1000;i++) |
BAC | 0:f15aa1706e16 | 20 | { |
BAC | 0:f15aa1706e16 | 21 | M3.pulsewidth_us(2000 - (unsigned int)(i*0.626)); |
BAC | 0:f15aa1706e16 | 22 | } |
BAC | 0:f15aa1706e16 | 23 | M2.pulsewidth_us(591); |
BAC | 0:f15aa1706e16 | 24 | wait(2.0f); |
BAC | 0:f15aa1706e16 | 25 | |
BAC | 0:f15aa1706e16 | 26 | // Look up table |
BAC | 0:f15aa1706e16 | 27 | |
BAC | 0:f15aa1706e16 | 28 | du1[0] = 1000; |
BAC | 0:f15aa1706e16 | 29 | du2[0] = 500; |
BAC | 0:f15aa1706e16 | 30 | du3[0] = 200; |
BAC | 0:f15aa1706e16 | 31 | |
BAC | 0:f15aa1706e16 | 32 | du1[3] = 10000; |
BAC | 0:f15aa1706e16 | 33 | du2[3] = 500; |
BAC | 0:f15aa1706e16 | 34 | du3[3] = 200; |
BAC | 0:f15aa1706e16 | 35 | |
BAC | 0:f15aa1706e16 | 36 | du1[4] = 10000; |
BAC | 0:f15aa1706e16 | 37 | du2[3] = 500; |
BAC | 0:f15aa1706e16 | 38 | du3[3] = 200; |
BAC | 0:f15aa1706e16 | 39 | |
BAC | 0:f15aa1706e16 | 40 | } |
BAC | 0:f15aa1706e16 | 41 | |
BAC | 0:f15aa1706e16 | 42 | void MotorDriver::Actuate() { |
BAC | 0:f15aa1706e16 | 43 | M1.pulsewidth_us(D1); |
BAC | 0:f15aa1706e16 | 44 | M2.pulsewidth_us(D2); |
BAC | 0:f15aa1706e16 | 45 | M3.pulsewidth_us(D3); |
BAC | 0:f15aa1706e16 | 46 | //printf("d1 = %d, d2 = %d, d3 = %d\r\r",D1,D2,D3); |
BAC | 0:f15aa1706e16 | 47 | } |
BAC | 0:f15aa1706e16 | 48 | |
BAC | 0:f15aa1706e16 | 49 | // 100/9 |
BAC | 0:f15aa1706e16 | 50 | void MotorDriver::Angle2Duty(float a, float b, float c){ |
BAC | 0:f15aa1706e16 | 51 | float k; |
BAC | 0:f15aa1706e16 | 52 | |
BAC | 0:f15aa1706e16 | 53 | k = (float) (100.0/9.0); // degree to radian |
BAC | 0:f15aa1706e16 | 54 | D1 = (unsigned int) (k*a); |
BAC | 0:f15aa1706e16 | 55 | D2 = (unsigned int) (k*b); |
BAC | 0:f15aa1706e16 | 56 | D3 = (unsigned int) (k*c); |
BAC | 0:f15aa1706e16 | 57 | } |
BAC | 0:f15aa1706e16 | 58 | |
BAC | 0:f15aa1706e16 | 59 | void MotorDriver::DirectDrive(unsigned int d1, unsigned int d2, unsigned int d3){ |
BAC | 0:f15aa1706e16 | 60 | M1.pulsewidth_us(d1); |
BAC | 0:f15aa1706e16 | 61 | M2.pulsewidth_us(d2); |
BAC | 0:f15aa1706e16 | 62 | M3.pulsewidth_us(d3); |
BAC | 0:f15aa1706e16 | 63 | printf("PW1 = %d us,PW2 = %d us,PW3 = %d us \n\r",d1,d2,d3); |
BAC | 0:f15aa1706e16 | 64 | |
BAC | 0:f15aa1706e16 | 65 | } |
BAC | 0:f15aa1706e16 | 66 | void MotorDriver::DriveTable(unsigned int index){ |
BAC | 0:f15aa1706e16 | 67 | M1.pulsewidth_us(du1[index]); |
BAC | 0:f15aa1706e16 | 68 | M2.pulsewidth_us(du2[index]); |
BAC | 0:f15aa1706e16 | 69 | M3.pulsewidth_us(du3[index]); |
BAC | 0:f15aa1706e16 | 70 | } |
BAC | 0:f15aa1706e16 | 71 | |
BAC | 0:f15aa1706e16 | 72 | |
BAC | 0:f15aa1706e16 | 73 | unsigned int MotorDriver::GetD1 (void){ |
BAC | 0:f15aa1706e16 | 74 | return D1; |
BAC | 0:f15aa1706e16 | 75 | } |
BAC | 0:f15aa1706e16 | 76 | unsigned int MotorDriver::GetD2 (void){ |
BAC | 0:f15aa1706e16 | 77 | return D2; |
BAC | 0:f15aa1706e16 | 78 | } |
BAC | 0:f15aa1706e16 | 79 | unsigned int MotorDriver::GetD3 (void){ |
BAC | 0:f15aa1706e16 | 80 | return D3; |
BAC | 0:f15aa1706e16 | 81 | } |
BAC | 0:f15aa1706e16 | 82 | unsigned int MotorDriver::Getdu1 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 83 | return du1[i]; |
BAC | 0:f15aa1706e16 | 84 | } |
BAC | 0:f15aa1706e16 | 85 | unsigned int MotorDriver::Getdu2 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 86 | return du2[i]; |
BAC | 0:f15aa1706e16 | 87 | } |
BAC | 0:f15aa1706e16 | 88 | unsigned int MotorDriver::Getdu3 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 89 | return du3[i]; |
BAC | 0:f15aa1706e16 | 90 | } |