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.
Dependencies: mbed Servo Pulse1
main.cpp@0:7663c81cdf71, 2019-12-27 (annotated)
- Committer:
- kyucheol
- Date:
- Fri Dec 27 09:09:04 2019 +0000
- Revision:
- 0:7663c81cdf71
modified codes and added some explanation
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kyucheol | 0:7663c81cdf71 | 1 | #include "mbed.h" |
| kyucheol | 0:7663c81cdf71 | 2 | #include "Pulse1.h" // RF통신을 위한 헤더파일 |
| kyucheol | 0:7663c81cdf71 | 3 | #include "Map.h" // 범위 변환을 위한 헤더파일 |
| kyucheol | 0:7663c81cdf71 | 4 | #include "Servo.h" // BLDC 구동을 위한 헤더파일 |
| kyucheol | 0:7663c81cdf71 | 5 | |
| kyucheol | 0:7663c81cdf71 | 6 | |
| kyucheol | 0:7663c81cdf71 | 7 | // BLDC 1100일 때 전진 최고 추진 |
| kyucheol | 0:7663c81cdf71 | 8 | // BLDC 1900일 때 후진 최고 추진 |
| kyucheol | 0:7663c81cdf71 | 9 | // BLDC 1500일 때 정지 |
| kyucheol | 0:7663c81cdf71 | 10 | // 후타바 범위 920 - 1500 - 2080 |
| kyucheol | 0:7663c81cdf71 | 11 | |
| kyucheol | 0:7663c81cdf71 | 12 | Servo Servo1(PB_8); //BLDC 핀 선언 |
| kyucheol | 0:7663c81cdf71 | 13 | Servo Servo2(PB_9); //BLDC 핀 선언 |
| kyucheol | 0:7663c81cdf71 | 14 | |
| kyucheol | 0:7663c81cdf71 | 15 | PulseInOut Channel1(PA_0); // 후타바 신호 1번 선언 |
| kyucheol | 0:7663c81cdf71 | 16 | PulseInOut Channel2(PA_4); // 후타바 신호 2번 선언 |
| kyucheol | 0:7663c81cdf71 | 17 | PulseInOut Channel3(PB_0); // 후타바 신호 3번 선언 |
| kyucheol | 0:7663c81cdf71 | 18 | PulseInOut Channel4(PC_1); // 후타바 신호 4번 선언 |
| kyucheol | 0:7663c81cdf71 | 19 | |
| kyucheol | 0:7663c81cdf71 | 20 | DigitalOut DC_e(D10); // DC 모터 방향 설정 |
| kyucheol | 0:7663c81cdf71 | 21 | PwmOut DC(D11); // DC 모터 PWM 설정 |
| kyucheol | 0:7663c81cdf71 | 22 | |
| kyucheol | 0:7663c81cdf71 | 23 | float max_speed = 1200; // 전진 최고 속도 |
| kyucheol | 0:7663c81cdf71 | 24 | float remax_speed= 1800;// 후진 최고 속도 |
| kyucheol | 0:7663c81cdf71 | 25 | |
| kyucheol | 0:7663c81cdf71 | 26 | int main() { |
| kyucheol | 0:7663c81cdf71 | 27 | Servo1.Enable(1000,20000); // BLDC 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 28 | Servo2.Enable(1000,20000); // BLDC 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 29 | Servo1.SetPosition(1500); // BLDC 초기 중간값 설정 |
| kyucheol | 0:7663c81cdf71 | 30 | Servo2.SetPosition(1500); // BLDC 초기 중간값 설정 |
| kyucheol | 0:7663c81cdf71 | 31 | wait(3); |
| kyucheol | 0:7663c81cdf71 | 32 | |
| kyucheol | 0:7663c81cdf71 | 33 | float raw1,raw2,raw3,raw4; // 후타바에서 채널별로 변수 선언 |
| kyucheol | 0:7663c81cdf71 | 34 | float a,b,c,d,dcp; // BLDC 추진 변수의 세부 변수 |
| kyucheol | 0:7663c81cdf71 | 35 | float bldc_l,bldc_r; // 각각 BLDC 추진 변수 |
| kyucheol | 0:7663c81cdf71 | 36 | |
| kyucheol | 0:7663c81cdf71 | 37 | DC_e = 0; // 모터 방향 설정 |
| kyucheol | 0:7663c81cdf71 | 38 | |
| kyucheol | 0:7663c81cdf71 | 39 | while(1) { |
| kyucheol | 0:7663c81cdf71 | 40 | |
| kyucheol | 0:7663c81cdf71 | 41 | raw1 = Channel1.read_high_us(30000); // 후타바 1번채널 펄스 읽은 값을 설정 |
| kyucheol | 0:7663c81cdf71 | 42 | raw2 = Channel2.read_high_us(30000); // 후타바 2번채널 펄스 읽은 값을 설정 |
| kyucheol | 0:7663c81cdf71 | 43 | raw3 = Channel3.read_high_us(30000); // 후타바 3번채널 펄스 읽은 값을 설정 |
| kyucheol | 0:7663c81cdf71 | 44 | raw4 = Channel4.read_high_us(30000); // 후타바 4번채널 펄스 읽은 값을 설정 |
| kyucheol | 0:7663c81cdf71 | 45 | |
| kyucheol | 0:7663c81cdf71 | 46 | // printf("%.0f\t", raw1); |
| kyucheol | 0:7663c81cdf71 | 47 | // printf("%.0f\t", raw2); |
| kyucheol | 0:7663c81cdf71 | 48 | // printf("%.0f\t", raw3); |
| kyucheol | 0:7663c81cdf71 | 49 | // printf("%.0f\t", raw4); |
| kyucheol | 0:7663c81cdf71 | 50 | // printf(" || "); |
| kyucheol | 0:7663c81cdf71 | 51 | |
| kyucheol | 0:7663c81cdf71 | 52 | a = map(raw1,1500,2080,0,400); // 후타바에서 받아온 변수를 범위 변환 (전진) |
| kyucheol | 0:7663c81cdf71 | 53 | b = map(raw1,1500,920,0,400); // 후타바에서 받아온 변수를 범위 변환 (후진) |
| kyucheol | 0:7663c81cdf71 | 54 | c = map(raw2,1500,920,0,200); // 후타바에서 받아온 변수를 범위 변환 (좌회전) |
| kyucheol | 0:7663c81cdf71 | 55 | d = map(raw2,1500,2080,0,200); // 후타바에서 받아온 변수를 범위 변환 (우회전) |
| kyucheol | 0:7663c81cdf71 | 56 | dcp = map(raw3,960,2080,0,100); // 후타바에서 받아온 변수를 범위 변환 (DC) |
| kyucheol | 0:7663c81cdf71 | 57 | |
| kyucheol | 0:7663c81cdf71 | 58 | dcp = dcp / 100; // DC 값을 PWM 값으로 변환 |
| kyucheol | 0:7663c81cdf71 | 59 | DC.write(dcp); // 모터 구동 |
| kyucheol | 0:7663c81cdf71 | 60 | |
| kyucheol | 0:7663c81cdf71 | 61 | |
| kyucheol | 0:7663c81cdf71 | 62 | // printf("%.0f\t", a); |
| kyucheol | 0:7663c81cdf71 | 63 | // printf("%.0f\t", b); |
| kyucheol | 0:7663c81cdf71 | 64 | // printf("%.0f\t", c); |
| kyucheol | 0:7663c81cdf71 | 65 | // printf("%.0f\t", d); |
| kyucheol | 0:7663c81cdf71 | 66 | // printf("%.0f\t", dcp); |
| kyucheol | 0:7663c81cdf71 | 67 | |
| kyucheol | 0:7663c81cdf71 | 68 | if(c >0) { // 좌회전 인식할 때 우회전 값은 0선언 |
| kyucheol | 0:7663c81cdf71 | 69 | d =0; |
| kyucheol | 0:7663c81cdf71 | 70 | } |
| kyucheol | 0:7663c81cdf71 | 71 | if(d >0) { // 우회전 인식할 때 좌회전 값은 0선언 |
| kyucheol | 0:7663c81cdf71 | 72 | c =0; |
| kyucheol | 0:7663c81cdf71 | 73 | } |
| kyucheol | 0:7663c81cdf71 | 74 | if( a>2) { // 전진 인식할 때 후진 값은 0선언 |
| kyucheol | 0:7663c81cdf71 | 75 | b=0; |
| kyucheol | 0:7663c81cdf71 | 76 | } |
| kyucheol | 0:7663c81cdf71 | 77 | if( b>2) { // 후진 인식할 때 전진 값은 0선언 |
| kyucheol | 0:7663c81cdf71 | 78 | a=-31; |
| kyucheol | 0:7663c81cdf71 | 79 | } |
| kyucheol | 0:7663c81cdf71 | 80 | if( a < -30) { // 후진하며 방향 설정시 역방향으로 선언 |
| kyucheol | 0:7663c81cdf71 | 81 | c = c*-1; |
| kyucheol | 0:7663c81cdf71 | 82 | d = d*-1; |
| kyucheol | 0:7663c81cdf71 | 83 | } |
| kyucheol | 0:7663c81cdf71 | 84 | bldc_l = 1500 - a + b + c - d; // BLDC 각각의 변수 선언 중간값 + 전진 + 좌,우회전 |
| kyucheol | 0:7663c81cdf71 | 85 | bldc_r = 1500 - a + b - c + d; // BLDC 각각의 변수 선언 중간값 + 전진 + 좌,우회전 |
| kyucheol | 0:7663c81cdf71 | 86 | |
| kyucheol | 0:7663c81cdf71 | 87 | if( a > -30) { // 전진 시 BDLC 변수 범위 선언 |
| kyucheol | 0:7663c81cdf71 | 88 | if(bldc_l >=1500) { |
| kyucheol | 0:7663c81cdf71 | 89 | bldc_l = 1500; |
| kyucheol | 0:7663c81cdf71 | 90 | } |
| kyucheol | 0:7663c81cdf71 | 91 | if(bldc_l <=1100) { |
| kyucheol | 0:7663c81cdf71 | 92 | bldc_l = 1100; |
| kyucheol | 0:7663c81cdf71 | 93 | } |
| kyucheol | 0:7663c81cdf71 | 94 | if(bldc_r >=1500) { |
| kyucheol | 0:7663c81cdf71 | 95 | bldc_r = 1500; |
| kyucheol | 0:7663c81cdf71 | 96 | } |
| kyucheol | 0:7663c81cdf71 | 97 | if(bldc_r <=1100) { |
| kyucheol | 0:7663c81cdf71 | 98 | bldc_r = 1100; |
| kyucheol | 0:7663c81cdf71 | 99 | } |
| kyucheol | 0:7663c81cdf71 | 100 | bldc_l = map(bldc_l,1500,1100,1500,max_speed); // BLDC 출력 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 101 | bldc_r = map(bldc_r,1500,1100,1500,max_speed); // BLDC 출력 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 102 | } |
| kyucheol | 0:7663c81cdf71 | 103 | if(a <= -31) { // 후진 시 BDLC 변수 범위 선언 |
| kyucheol | 0:7663c81cdf71 | 104 | if(bldc_l >=1900) { |
| kyucheol | 0:7663c81cdf71 | 105 | bldc_l = 1900; |
| kyucheol | 0:7663c81cdf71 | 106 | } |
| kyucheol | 0:7663c81cdf71 | 107 | if(bldc_l <=1500) { |
| kyucheol | 0:7663c81cdf71 | 108 | bldc_l = 1500; |
| kyucheol | 0:7663c81cdf71 | 109 | } |
| kyucheol | 0:7663c81cdf71 | 110 | |
| kyucheol | 0:7663c81cdf71 | 111 | if(bldc_r >=1900) { |
| kyucheol | 0:7663c81cdf71 | 112 | bldc_r = 1900; |
| kyucheol | 0:7663c81cdf71 | 113 | } |
| kyucheol | 0:7663c81cdf71 | 114 | if(bldc_r <=1500) { |
| kyucheol | 0:7663c81cdf71 | 115 | bldc_r = 1500; |
| kyucheol | 0:7663c81cdf71 | 116 | } |
| kyucheol | 0:7663c81cdf71 | 117 | bldc_l = map(bldc_l,1500,1900,1500,remax_speed); // BLDC 출력 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 118 | bldc_r = map(bldc_r,1500,1900,1500,remax_speed); // BLDC 출력 범위 설정 |
| kyucheol | 0:7663c81cdf71 | 119 | } |
| kyucheol | 0:7663c81cdf71 | 120 | // printf("%.0f\t", bldc_l); |
| kyucheol | 0:7663c81cdf71 | 121 | // printf("%.0f\n", bldc_r); |
| kyucheol | 0:7663c81cdf71 | 122 | |
| kyucheol | 0:7663c81cdf71 | 123 | Servo1.SetPosition(bldc_l); // BLDC 작동 |
| kyucheol | 0:7663c81cdf71 | 124 | Servo2.SetPosition(bldc_r); // BLDC 작동 |
| kyucheol | 0:7663c81cdf71 | 125 | wait(0.005); |
| kyucheol | 0:7663c81cdf71 | 126 | |
| kyucheol | 0:7663c81cdf71 | 127 | } |
| kyucheol | 0:7663c81cdf71 | 128 | } |