Sheco_dev / Mbed 2 deprecated FINAL_BLUE_BLDC_DC

Dependencies:   mbed Servo Pulse1

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?

UserRevisionLine numberNew 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 }