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@2:d7cd4deef7be, 2015-12-15 (annotated)
- Committer:
- BAC
- Date:
- Tue Dec 15 02:42:41 2015 +0000
- Revision:
- 2:d7cd4deef7be
- Parent:
- 0:f15aa1706e16
the newest
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 | 2:d7cd4deef7be | 14 | // first move |
BAC | 2:d7cd4deef7be | 15 | for(i=0;i<500;i++) |
BAC | 0:f15aa1706e16 | 16 | { |
BAC | 2:d7cd4deef7be | 17 | M1.pulsewidth_us(1900 - (unsigned int)(i*1.75)); |
BAC | 0:f15aa1706e16 | 18 | printf("%d",1900 - (unsigned int)(i*0.853)); |
BAC | 0:f15aa1706e16 | 19 | } |
BAC | 2:d7cd4deef7be | 20 | wait(2.0); |
BAC | 2:d7cd4deef7be | 21 | i=0; |
BAC | 0:f15aa1706e16 | 22 | for(i=0;i<1000;i++) |
BAC | 0:f15aa1706e16 | 23 | { |
BAC | 2:d7cd4deef7be | 24 | M3.pulsewidth_us(2000 - (unsigned int)(i*0.653)); |
BAC | 2:d7cd4deef7be | 25 | printf("%d",2000 - (unsigned int)(i*0.653)); |
BAC | 0:f15aa1706e16 | 26 | } |
BAC | 0:f15aa1706e16 | 27 | |
BAC | 0:f15aa1706e16 | 28 | // Look up table |
BAC | 0:f15aa1706e16 | 29 | |
BAC | 2:d7cd4deef7be | 30 | du1[0] = 1025; |
BAC | 2:d7cd4deef7be | 31 | du2[0] = 591; |
BAC | 2:d7cd4deef7be | 32 | du3[0] = 1347; |
BAC | 2:d7cd4deef7be | 33 | |
BAC | 2:d7cd4deef7be | 34 | du1[1] = 1005; |
BAC | 2:d7cd4deef7be | 35 | du2[1] = 626; |
BAC | 2:d7cd4deef7be | 36 | du3[1] = 1371; |
BAC | 2:d7cd4deef7be | 37 | |
BAC | 2:d7cd4deef7be | 38 | du1[2] = 991; |
BAC | 2:d7cd4deef7be | 39 | du2[2] = 630; |
BAC | 2:d7cd4deef7be | 40 | du3[2] = 1417; |
BAC | 2:d7cd4deef7be | 41 | |
BAC | 2:d7cd4deef7be | 42 | du1[3] = 985; |
BAC | 2:d7cd4deef7be | 43 | du2[3] = 636; |
BAC | 2:d7cd4deef7be | 44 | du3[3] = 1430; |
BAC | 2:d7cd4deef7be | 45 | |
BAC | 2:d7cd4deef7be | 46 | du1[4] = 963; |
BAC | 2:d7cd4deef7be | 47 | du2[4] = 642; |
BAC | 2:d7cd4deef7be | 48 | du3[4] = 1445; |
BAC | 2:d7cd4deef7be | 49 | |
BAC | 2:d7cd4deef7be | 50 | du1[5] = 953; |
BAC | 2:d7cd4deef7be | 51 | du2[5] = 680; |
BAC | 2:d7cd4deef7be | 52 | du3[5] = 1461; |
BAC | 2:d7cd4deef7be | 53 | |
BAC | 2:d7cd4deef7be | 54 | du1[6] = 947; |
BAC | 2:d7cd4deef7be | 55 | du2[6] = 688; |
BAC | 2:d7cd4deef7be | 56 | du3[6] = 1461; |
BAC | 2:d7cd4deef7be | 57 | |
BAC | 2:d7cd4deef7be | 58 | du1[7] = 935; |
BAC | 2:d7cd4deef7be | 59 | du2[7] = 710; |
BAC | 2:d7cd4deef7be | 60 | du3[7] = 1467; |
BAC | 2:d7cd4deef7be | 61 | |
BAC | 2:d7cd4deef7be | 62 | du1[8] = 913; |
BAC | 2:d7cd4deef7be | 63 | du2[8] = 728; |
BAC | 2:d7cd4deef7be | 64 | du3[8] = 1485; |
BAC | 2:d7cd4deef7be | 65 | |
BAC | 2:d7cd4deef7be | 66 | du1[9] = 909; |
BAC | 2:d7cd4deef7be | 67 | du2[9] = 750; |
BAC | 2:d7cd4deef7be | 68 | du3[9] = 1503; |
BAC | 2:d7cd4deef7be | 69 | |
BAC | 2:d7cd4deef7be | 70 | du1[10] = 913; |
BAC | 2:d7cd4deef7be | 71 | du2[10] = 774; |
BAC | 2:d7cd4deef7be | 72 | du3[10] = 1519; |
BAC | 2:d7cd4deef7be | 73 | |
BAC | 2:d7cd4deef7be | 74 | du1[11] = 977; |
BAC | 2:d7cd4deef7be | 75 | du2[11] = 792; |
BAC | 2:d7cd4deef7be | 76 | du3[11] = 1570; |
BAC | 2:d7cd4deef7be | 77 | |
BAC | 2:d7cd4deef7be | 78 | du1[12] = 999; |
BAC | 2:d7cd4deef7be | 79 | du2[12] = 828; |
BAC | 2:d7cd4deef7be | 80 | du3[12] = 1545; |
BAC | 2:d7cd4deef7be | 81 | |
BAC | 2:d7cd4deef7be | 82 | du1[13] = 999; |
BAC | 2:d7cd4deef7be | 83 | du2[13] = 855; |
BAC | 2:d7cd4deef7be | 84 | du3[13] = 1570; |
BAC | 2:d7cd4deef7be | 85 | |
BAC | 2:d7cd4deef7be | 86 | du1[14] = 1023; |
BAC | 2:d7cd4deef7be | 87 | du2[14] = 863; |
BAC | 2:d7cd4deef7be | 88 | du3[14] = 1592; |
BAC | 2:d7cd4deef7be | 89 | |
BAC | 2:d7cd4deef7be | 90 | du1[15] = 1045; |
BAC | 2:d7cd4deef7be | 91 | du2[15] = 875; |
BAC | 2:d7cd4deef7be | 92 | du3[15] = 1590; |
BAC | 2:d7cd4deef7be | 93 | |
BAC | 2:d7cd4deef7be | 94 | du1[16] = 1071; |
BAC | 2:d7cd4deef7be | 95 | du2[16] = 890; |
BAC | 2:d7cd4deef7be | 96 | du3[16] = 1605; |
BAC | 2:d7cd4deef7be | 97 | |
BAC | 2:d7cd4deef7be | 98 | du1[17] = 1085; |
BAC | 2:d7cd4deef7be | 99 | du2[17] = 898; |
BAC | 2:d7cd4deef7be | 100 | du3[17] = 1590; |
BAC | 0:f15aa1706e16 | 101 | |
BAC | 2:d7cd4deef7be | 102 | du1[18] = 1109; |
BAC | 2:d7cd4deef7be | 103 | du2[18] = 910; |
BAC | 2:d7cd4deef7be | 104 | du3[18] = 1590; |
BAC | 2:d7cd4deef7be | 105 | |
BAC | 2:d7cd4deef7be | 106 | du1[19] = 1151; |
BAC | 2:d7cd4deef7be | 107 | du2[19] = 930; |
BAC | 2:d7cd4deef7be | 108 | du3[19] = 1611; |
BAC | 2:d7cd4deef7be | 109 | |
BAC | 2:d7cd4deef7be | 110 | du1[20] = 1163; |
BAC | 2:d7cd4deef7be | 111 | du2[20] = 906; |
BAC | 2:d7cd4deef7be | 112 | du3[20] = 1575; |
BAC | 2:d7cd4deef7be | 113 | |
BAC | 2:d7cd4deef7be | 114 | du1[21] = 1169; |
BAC | 2:d7cd4deef7be | 115 | du2[21] = 864; |
BAC | 2:d7cd4deef7be | 116 | du3[21] = 1533; |
BAC | 2:d7cd4deef7be | 117 | |
BAC | 2:d7cd4deef7be | 118 | du1[22] = 1173; |
BAC | 2:d7cd4deef7be | 119 | du2[22] = 794; |
BAC | 2:d7cd4deef7be | 120 | du3[22] = 1519; |
BAC | 2:d7cd4deef7be | 121 | |
BAC | 2:d7cd4deef7be | 122 | du1[23] = 1189; |
BAC | 2:d7cd4deef7be | 123 | du2[23] = 790; |
BAC | 2:d7cd4deef7be | 124 | du3[23] = 1511; |
BAC | 2:d7cd4deef7be | 125 | |
BAC | 2:d7cd4deef7be | 126 | du1[24] = 1215; |
BAC | 2:d7cd4deef7be | 127 | du2[24] = 776; |
BAC | 2:d7cd4deef7be | 128 | du3[24] = 1479; |
BAC | 2:d7cd4deef7be | 129 | |
BAC | 2:d7cd4deef7be | 130 | du1[25] = 1219; |
BAC | 2:d7cd4deef7be | 131 | du2[25] = 752; |
BAC | 2:d7cd4deef7be | 132 | du3[25] = 1455; |
BAC | 2:d7cd4deef7be | 133 | |
BAC | 2:d7cd4deef7be | 134 | du1[26] = 1223; |
BAC | 2:d7cd4deef7be | 135 | du2[26] = 732; |
BAC | 2:d7cd4deef7be | 136 | du3[26] = 1429; |
BAC | 0:f15aa1706e16 | 137 | |
BAC | 2:d7cd4deef7be | 138 | du1[27] = 1225; |
BAC | 2:d7cd4deef7be | 139 | du2[27] = 704; |
BAC | 2:d7cd4deef7be | 140 | du3[27] = 1405; |
BAC | 2:d7cd4deef7be | 141 | |
BAC | 2:d7cd4deef7be | 142 | du1[28] = 1210; |
BAC | 2:d7cd4deef7be | 143 | du2[28] = 676; |
BAC | 2:d7cd4deef7be | 144 | du3[28] = 1385; |
BAC | 2:d7cd4deef7be | 145 | |
BAC | 2:d7cd4deef7be | 146 | du1[29] = 1180; |
BAC | 2:d7cd4deef7be | 147 | du2[29] = 650; |
BAC | 2:d7cd4deef7be | 148 | du3[29] = 1370; |
BAC | 2:d7cd4deef7be | 149 | |
BAC | 2:d7cd4deef7be | 150 | du1[30] = 1156; |
BAC | 2:d7cd4deef7be | 151 | du2[30] = 614; |
BAC | 2:d7cd4deef7be | 152 | du3[30] = 1344; |
BAC | 2:d7cd4deef7be | 153 | |
BAC | 2:d7cd4deef7be | 154 | du1[31] = 1122; |
BAC | 2:d7cd4deef7be | 155 | du2[31] = 596; |
BAC | 2:d7cd4deef7be | 156 | du3[31] = 1334; |
BAC | 2:d7cd4deef7be | 157 | |
BAC | 2:d7cd4deef7be | 158 | du1[32] = 1104; |
BAC | 2:d7cd4deef7be | 159 | du2[32] = 586; |
BAC | 2:d7cd4deef7be | 160 | du3[32] = 1330; |
BAC | 2:d7cd4deef7be | 161 | |
BAC | 2:d7cd4deef7be | 162 | du1[33] = 1090; |
BAC | 2:d7cd4deef7be | 163 | du2[33] = 566; |
BAC | 2:d7cd4deef7be | 164 | du3[33] = 1328; |
BAC | 2:d7cd4deef7be | 165 | |
BAC | 2:d7cd4deef7be | 166 | du1[34] = 1064; |
BAC | 2:d7cd4deef7be | 167 | du2[34] = 560; |
BAC | 2:d7cd4deef7be | 168 | du3[34] = 1324; |
BAC | 2:d7cd4deef7be | 169 | |
BAC | 2:d7cd4deef7be | 170 | du1[35] = 1048; |
BAC | 2:d7cd4deef7be | 171 | du2[35] = 558; |
BAC | 2:d7cd4deef7be | 172 | du3[35] = 1320; |
BAC | 2:d7cd4deef7be | 173 | |
BAC | 2:d7cd4deef7be | 174 | du1[36] = 1016; |
BAC | 2:d7cd4deef7be | 175 | du2[36] = 580; |
BAC | 2:d7cd4deef7be | 176 | du3[36] = 1330; |
BAC | 0:f15aa1706e16 | 177 | |
BAC | 0:f15aa1706e16 | 178 | } |
BAC | 0:f15aa1706e16 | 179 | |
BAC | 0:f15aa1706e16 | 180 | void MotorDriver::Actuate() { |
BAC | 0:f15aa1706e16 | 181 | M1.pulsewidth_us(D1); |
BAC | 0:f15aa1706e16 | 182 | M2.pulsewidth_us(D2); |
BAC | 0:f15aa1706e16 | 183 | M3.pulsewidth_us(D3); |
BAC | 0:f15aa1706e16 | 184 | //printf("d1 = %d, d2 = %d, d3 = %d\r\r",D1,D2,D3); |
BAC | 0:f15aa1706e16 | 185 | } |
BAC | 0:f15aa1706e16 | 186 | |
BAC | 0:f15aa1706e16 | 187 | // 100/9 |
BAC | 0:f15aa1706e16 | 188 | void MotorDriver::Angle2Duty(float a, float b, float c){ |
BAC | 0:f15aa1706e16 | 189 | float k; |
BAC | 0:f15aa1706e16 | 190 | |
BAC | 0:f15aa1706e16 | 191 | k = (float) (100.0/9.0); // degree to radian |
BAC | 0:f15aa1706e16 | 192 | D1 = (unsigned int) (k*a); |
BAC | 0:f15aa1706e16 | 193 | D2 = (unsigned int) (k*b); |
BAC | 0:f15aa1706e16 | 194 | D3 = (unsigned int) (k*c); |
BAC | 0:f15aa1706e16 | 195 | } |
BAC | 0:f15aa1706e16 | 196 | |
BAC | 0:f15aa1706e16 | 197 | void MotorDriver::DirectDrive(unsigned int d1, unsigned int d2, unsigned int d3){ |
BAC | 0:f15aa1706e16 | 198 | M1.pulsewidth_us(d1); |
BAC | 0:f15aa1706e16 | 199 | M2.pulsewidth_us(d2); |
BAC | 0:f15aa1706e16 | 200 | M3.pulsewidth_us(d3); |
BAC | 0:f15aa1706e16 | 201 | printf("PW1 = %d us,PW2 = %d us,PW3 = %d us \n\r",d1,d2,d3); |
BAC | 0:f15aa1706e16 | 202 | |
BAC | 0:f15aa1706e16 | 203 | } |
BAC | 0:f15aa1706e16 | 204 | void MotorDriver::DriveTable(unsigned int index){ |
BAC | 0:f15aa1706e16 | 205 | M1.pulsewidth_us(du1[index]); |
BAC | 0:f15aa1706e16 | 206 | M2.pulsewidth_us(du2[index]); |
BAC | 0:f15aa1706e16 | 207 | M3.pulsewidth_us(du3[index]); |
BAC | 0:f15aa1706e16 | 208 | } |
BAC | 0:f15aa1706e16 | 209 | |
BAC | 0:f15aa1706e16 | 210 | |
BAC | 0:f15aa1706e16 | 211 | unsigned int MotorDriver::GetD1 (void){ |
BAC | 0:f15aa1706e16 | 212 | return D1; |
BAC | 0:f15aa1706e16 | 213 | } |
BAC | 0:f15aa1706e16 | 214 | unsigned int MotorDriver::GetD2 (void){ |
BAC | 0:f15aa1706e16 | 215 | return D2; |
BAC | 0:f15aa1706e16 | 216 | } |
BAC | 0:f15aa1706e16 | 217 | unsigned int MotorDriver::GetD3 (void){ |
BAC | 0:f15aa1706e16 | 218 | return D3; |
BAC | 0:f15aa1706e16 | 219 | } |
BAC | 0:f15aa1706e16 | 220 | unsigned int MotorDriver::Getdu1 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 221 | return du1[i]; |
BAC | 0:f15aa1706e16 | 222 | } |
BAC | 0:f15aa1706e16 | 223 | unsigned int MotorDriver::Getdu2 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 224 | return du2[i]; |
BAC | 0:f15aa1706e16 | 225 | } |
BAC | 0:f15aa1706e16 | 226 | unsigned int MotorDriver::Getdu3 (unsigned int i){ |
BAC | 0:f15aa1706e16 | 227 | return du3[i]; |
BAC | 0:f15aa1706e16 | 228 | } |