
If you want to use BLDC with FUTABA without going backward, use it
Dependencies: mbed Servo Pulse1
main.cpp@4:c9fda60b0332, 2019-12-27 (annotated)
- Committer:
- kyucheol
- Date:
- Fri Dec 27 09:16:54 2019 +0000
- Revision:
- 4:c9fda60b0332
- Parent:
- 3:c47e538f3aec
Can use if you want BLDC motor without Backward
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kyucheol | 0:b806d9855f21 | 1 | #include "mbed.h" |
kyucheol | 0:b806d9855f21 | 2 | #include "Servo.h" |
kyucheol | 0:b806d9855f21 | 3 | #include "Map.h" |
kyucheol | 2:4e3761881124 | 4 | #include "Pulse1.h" |
kyucheol | 0:b806d9855f21 | 5 | |
kyucheol | 4:c9fda60b0332 | 6 | // 후진 불가능한 BLDC 사용 |
kyucheol | 4:c9fda60b0332 | 7 | |
kyucheol | 0:b806d9855f21 | 8 | |
kyucheol | 0:b806d9855f21 | 9 | PwmOut led_left(LED1); //확인용 LED1 |
kyucheol | 0:b806d9855f21 | 10 | PwmOut led_right(LED2); //확인용 LED2 |
kyucheol | 0:b806d9855f21 | 11 | |
kyucheol | 4:c9fda60b0332 | 12 | Servo bldc_left(PB_8); // 왼쪽 BLDC D12 |
kyucheol | 4:c9fda60b0332 | 13 | Servo bldc_right(PB_9); // 오른쪽 BLDC PC_7 |
kyucheol | 0:b806d9855f21 | 14 | |
kyucheol | 2:4e3761881124 | 15 | PulseInOut Channel1(A0); //채널1, futaba기준 좌우방향(오른쪽 조이스틱) |
kyucheol | 2:4e3761881124 | 16 | PulseInOut Channel2(A1); //채널2, futaba기준 상하방향(오른쪽 조이스틱) |
kyucheol | 2:4e3761881124 | 17 | PulseInOut Channel3(A2); //채널3, futaba기준 상하방향(왼쪽 조이스틱) |
kyucheol | 0:b806d9855f21 | 18 | |
kyucheol | 0:b806d9855f21 | 19 | int main() { |
kyucheol | 0:b806d9855f21 | 20 | bldc_left.write(0); // BLDC 초기 설정 |
kyucheol | 0:b806d9855f21 | 21 | bldc_right.write(0); |
kyucheol | 0:b806d9855f21 | 22 | |
kyucheol | 4:c9fda60b0332 | 23 | led_left = 1; // 확인을 위한 LED |
kyucheol | 4:c9fda60b0332 | 24 | led_right=1; // 확인을 위한 LED |
kyucheol | 0:b806d9855f21 | 25 | wait(0.5); |
kyucheol | 0:b806d9855f21 | 26 | |
kyucheol | 0:b806d9855f21 | 27 | bldc_left.write(1); |
kyucheol | 0:b806d9855f21 | 28 | bldc_right.write(1); |
kyucheol | 0:b806d9855f21 | 29 | |
kyucheol | 4:c9fda60b0332 | 30 | led_left =0; // 확인을 위한 LED |
kyucheol | 4:c9fda60b0332 | 31 | led_right=0; // 확인을 위한 LED |
kyucheol | 0:b806d9855f21 | 32 | wait(2); |
kyucheol | 0:b806d9855f21 | 33 | |
kyucheol | 4:c9fda60b0332 | 34 | bldc_left.write(0); // BLDC 초기 설정 |
kyucheol | 4:c9fda60b0332 | 35 | bldc_right.write(0); // BLDC 초기 설정 |
kyucheol | 0:b806d9855f21 | 36 | wait(2); |
kyucheol | 0:b806d9855f21 | 37 | |
kyucheol | 2:4e3761881124 | 38 | float raw1,raw2,raw3; |
kyucheol | 2:4e3761881124 | 39 | float mod1,mod2,mod3,mod4,mod5; |
kyucheol | 0:b806d9855f21 | 40 | printf("\nBLDC Setup & end\n"); |
kyucheol | 0:b806d9855f21 | 41 | |
kyucheol | 0:b806d9855f21 | 42 | while (1) { |
kyucheol | 0:b806d9855f21 | 43 | |
kyucheol | 2:4e3761881124 | 44 | |
kyucheol | 2:4e3761881124 | 45 | raw1 = Channel1.read_high_us(30000); |
kyucheol | 2:4e3761881124 | 46 | raw2 = Channel2.read_high_us(30000); |
kyucheol | 2:4e3761881124 | 47 | raw3 = Channel3.read_high_us(30000); |
kyucheol | 0:b806d9855f21 | 48 | |
kyucheol | 0:b806d9855f21 | 49 | |
kyucheol | 4:c9fda60b0332 | 50 | //printf("raw1=%.0f mV\t", raw1); |
kyucheol | 4:c9fda60b0332 | 51 | mod1 = map(raw2, 1450, 1000, 0, 60); // 후진 //PWM 150을 변환 |
kyucheol | 4:c9fda60b0332 | 52 | mod2 = map(raw2, 1550, 2000, 0, 90); // 전진 //PWM 150을 변환 |
kyucheol | 0:b806d9855f21 | 53 | |
kyucheol | 0:b806d9855f21 | 54 | |
kyucheol | 0:b806d9855f21 | 55 | |
kyucheol | 4:c9fda60b0332 | 56 | //printf("raw2=%.0f mV\t", raw2); |
kyucheol | 4:c9fda60b0332 | 57 | mod3 = map(raw1, 1450, 1000, 0, 60); // 좌회전 //PWM 150을 변환 |
kyucheol | 4:c9fda60b0332 | 58 | mod4 = map(raw1, 1550, 2000, 0, 60); // 우회전 //PWM 150을 변환 |
kyucheol | 2:4e3761881124 | 59 | |
kyucheol | 4:c9fda60b0332 | 60 | //printf("raw3=%.0f mV\t", raw3); |
kyucheol | 2:4e3761881124 | 61 | mod5 = map(raw3, 920, 2080, 0, 100); |
kyucheol | 2:4e3761881124 | 62 | |
kyucheol | 2:4e3761881124 | 63 | printf("mod1=%.0f mV\t", mod1); |
kyucheol | 2:4e3761881124 | 64 | printf("mod2=%.0f mV\t", mod2); |
kyucheol | 2:4e3761881124 | 65 | printf("mod3=%.0f mV\t", mod3); |
kyucheol | 2:4e3761881124 | 66 | printf("mod4=%.0f mV\t", mod4); |
kyucheol | 2:4e3761881124 | 67 | printf("mod5=%.0f mV\t", mod5); |
kyucheol | 0:b806d9855f21 | 68 | |
kyucheol | 0:b806d9855f21 | 69 | mod1 = mod1/100; |
kyucheol | 0:b806d9855f21 | 70 | mod2 = mod2/100; |
kyucheol | 2:4e3761881124 | 71 | mod3 = mod3/100; |
kyucheol | 2:4e3761881124 | 72 | mod4 = mod4/100; |
kyucheol | 2:4e3761881124 | 73 | mod5 = mod5/100; |
kyucheol | 2:4e3761881124 | 74 | |
kyucheol | 2:4e3761881124 | 75 | printf("measure1 = %f mV\t", mod1); |
kyucheol | 0:b806d9855f21 | 76 | printf("measure2 = %f mV\t", mod2); |
kyucheol | 4:c9fda60b0332 | 77 | printf("measure3 = %f mV\t", mod3); |
kyucheol | 4:c9fda60b0332 | 78 | printf("measure4 = %f mV\t", mod4); |
kyucheol | 2:4e3761881124 | 79 | printf("measure5 = %f mV\n", mod5); |
kyucheol | 2:4e3761881124 | 80 | |
kyucheol | 2:4e3761881124 | 81 | |
kyucheol | 4:c9fda60b0332 | 82 | if(mod3 > 0.01) { // 2 |
kyucheol | 2:4e3761881124 | 83 | mod4 = 0; |
kyucheol | 2:4e3761881124 | 84 | } |
kyucheol | 2:4e3761881124 | 85 | |
kyucheol | 4:c9fda60b0332 | 86 | if(mod4 > 0.01) { // 2 |
kyucheol | 2:4e3761881124 | 87 | mod3 = 0; |
kyucheol | 2:4e3761881124 | 88 | } |
kyucheol | 2:4e3761881124 | 89 | |
kyucheol | 2:4e3761881124 | 90 | |
kyucheol | 3:c47e538f3aec | 91 | float bldc_l, bldc_r; // bldc 왼쪽 오른쪽 선언 |
kyucheol | 4:c9fda60b0332 | 92 | bldc_l = mod2 - mod3 + mod4; |
kyucheol | 4:c9fda60b0332 | 93 | bldc_r = mod2 + mod3 - mod4; |
kyucheol | 2:4e3761881124 | 94 | |
kyucheol | 3:c47e538f3aec | 95 | if(bldc_l >= 0.6) { // PWM 150을 변환 |
kyucheol | 3:c47e538f3aec | 96 | bldc_l = 0.6; |
kyucheol | 3:c47e538f3aec | 97 | } |
kyucheol | 4:c9fda60b0332 | 98 | if(bldc_l <= 0.03) { // PWM 20을 변환 |
kyucheol | 3:c47e538f3aec | 99 | bldc_l = 0; |
kyucheol | 3:c47e538f3aec | 100 | } |
kyucheol | 3:c47e538f3aec | 101 | |
kyucheol | 3:c47e538f3aec | 102 | if(bldc_r >= 0.6) { // PWM 150을 변환 |
kyucheol | 3:c47e538f3aec | 103 | bldc_r = 0.6; |
kyucheol | 3:c47e538f3aec | 104 | } |
kyucheol | 4:c9fda60b0332 | 105 | if(bldc_r <= 0.03) { // PWM 20을 변환 |
kyucheol | 3:c47e538f3aec | 106 | bldc_r = 0; |
kyucheol | 3:c47e538f3aec | 107 | } |
kyucheol | 0:b806d9855f21 | 108 | |
kyucheol | 3:c47e538f3aec | 109 | bldc_left.write(bldc_l); |
kyucheol | 3:c47e538f3aec | 110 | bldc_right.write(bldc_r); |
kyucheol | 0:b806d9855f21 | 111 | |
kyucheol | 0:b806d9855f21 | 112 | |
kyucheol | 3:c47e538f3aec | 113 | led_left.write(bldc_l); |
kyucheol | 3:c47e538f3aec | 114 | led_right.write(bldc_r); |
kyucheol | 0:b806d9855f21 | 115 | } |
kyucheol | 2:4e3761881124 | 116 | } |
kyucheol | 2:4e3761881124 | 117 |