ホールセンサの値を見てBLDCモータを回す。

Dependencies:   mbed

/media/uploads/mxy7/half_bridge.jpg /media/uploads/mxy7/high_side.jpg /media/uploads/mxy7/low_side.jpg

Committer:
mxy7
Date:
Wed Jul 23 01:16:43 2014 +0000
Revision:
1:0165e226b5af
Parent:
0:3a3b03651663
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mxy7 0:3a3b03651663 1 #include "mbed.h"
mxy7 0:3a3b03651663 2
mxy7 0:3a3b03651663 3 DigitalOut l1(LED1);
mxy7 0:3a3b03651663 4 DigitalOut l2(LED2);
mxy7 0:3a3b03651663 5 DigitalOut l3(LED3);
mxy7 0:3a3b03651663 6
mxy7 1:0165e226b5af 7 PwmOut uH(p21);//high side
mxy7 0:3a3b03651663 8 PwmOut vH(p22);
mxy7 0:3a3b03651663 9 PwmOut wH(p23);
mxy7 0:3a3b03651663 10
mxy7 1:0165e226b5af 11 PwmOut uL(p24);//low side
mxy7 0:3a3b03651663 12 PwmOut vL(p25);
mxy7 0:3a3b03651663 13 PwmOut wL(p26);
mxy7 0:3a3b03651663 14
mxy7 1:0165e226b5af 15 InterruptIn u(p16);//hole sensor
mxy7 0:3a3b03651663 16 InterruptIn v(p17);
mxy7 0:3a3b03651663 17 InterruptIn w(p18);
mxy7 0:3a3b03651663 18
mxy7 1:0165e226b5af 19 Serial pc(USBTX,USBRX);
mxy7 1:0165e226b5af 20
mxy7 1:0165e226b5af 21 int p,dir;
mxy7 0:3a3b03651663 22 float period = 1;
mxy7 0:3a3b03651663 23 float pulse = period / 10;
mxy7 0:3a3b03651663 24
mxy7 0:3a3b03651663 25 void mode(int);
mxy7 1:0165e226b5af 26 void out(float,float,float,float,float,float);
mxy7 0:3a3b03651663 27 void A();void B();void C();
mxy7 0:3a3b03651663 28 void D();void E();void F();
mxy7 1:0165e226b5af 29 void LED(int,int,int);
mxy7 0:3a3b03651663 30
mxy7 0:3a3b03651663 31 void init(){
mxy7 0:3a3b03651663 32 u.mode(PullUp);
mxy7 0:3a3b03651663 33 v.mode(PullUp);
mxy7 0:3a3b03651663 34 w.mode(PullUp);
mxy7 0:3a3b03651663 35
mxy7 0:3a3b03651663 36 uH.period_us(period);
mxy7 0:3a3b03651663 37 vH.period_us(period);
mxy7 0:3a3b03651663 38 wH.period_us(period);
mxy7 0:3a3b03651663 39 uH.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 40 vH.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 41 wH.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 42
mxy7 0:3a3b03651663 43 uL.period_us(period);
mxy7 0:3a3b03651663 44 vL.period_us(period);
mxy7 0:3a3b03651663 45 wL.period_us(period);
mxy7 0:3a3b03651663 46 uL.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 47 vL.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 48 wL.pulsewidth_us(pulse);
mxy7 0:3a3b03651663 49
mxy7 0:3a3b03651663 50 p = 0;//start
mxy7 1:0165e226b5af 51 dir = 0;// 0/1 <=> CW/CCW
mxy7 0:3a3b03651663 52 }
mxy7 0:3a3b03651663 53
mxy7 0:3a3b03651663 54 int main() {
mxy7 0:3a3b03651663 55 init();
mxy7 1:0165e226b5af 56 u.rise(&A);
mxy7 1:0165e226b5af 57 w.fall(&B);
mxy7 1:0165e226b5af 58 v.rise(&C);
mxy7 1:0165e226b5af 59 u.fall(&D);
mxy7 1:0165e226b5af 60 w.rise(&E);
mxy7 1:0165e226b5af 61 v.fall(&F);
mxy7 0:3a3b03651663 62 while(1) {
mxy7 0:3a3b03651663 63 mode(p);
mxy7 1:0165e226b5af 64 //wait_us(1);
mxy7 1:0165e226b5af 65 //pc.printf("%d\n",p);
mxy7 0:3a3b03651663 66 }
mxy7 0:3a3b03651663 67 return 0;
mxy7 0:3a3b03651663 68 }
mxy7 0:3a3b03651663 69
mxy7 0:3a3b03651663 70 void mode(int p){
mxy7 0:3a3b03651663 71 switch(p){
mxy7 0:3a3b03651663 72 case 0:
mxy7 0:3a3b03651663 73 out(1,1,1,0,0,0);
mxy7 1:0165e226b5af 74 LED(1,1,1);
mxy7 0:3a3b03651663 75 break;
mxy7 0:3a3b03651663 76 case 1:
mxy7 0:3a3b03651663 77 out(0,1,1,0,1,0);
mxy7 1:0165e226b5af 78 LED(1,0,0);
mxy7 0:3a3b03651663 79 break;
mxy7 0:3a3b03651663 80 case 2:
mxy7 0:3a3b03651663 81 out(0,1,1,0,0,1);
mxy7 1:0165e226b5af 82 LED(1,0,0);
mxy7 0:3a3b03651663 83 break;
mxy7 0:3a3b03651663 84 case 3:
mxy7 0:3a3b03651663 85 out(1,0,1,0,0,1);
mxy7 1:0165e226b5af 86 LED(0,1,0);
mxy7 0:3a3b03651663 87 break;
mxy7 0:3a3b03651663 88 case 4:
mxy7 0:3a3b03651663 89 out(1,0,1,1,0,0);
mxy7 1:0165e226b5af 90 LED(0,1,0);
mxy7 0:3a3b03651663 91 break;
mxy7 0:3a3b03651663 92 case 5:
mxy7 0:3a3b03651663 93 out(1,1,0,1,0,0);
mxy7 1:0165e226b5af 94 LED(0,0,1);
mxy7 0:3a3b03651663 95 break;
mxy7 0:3a3b03651663 96 case 6:
mxy7 0:3a3b03651663 97 out(1,1,0,0,1,0);
mxy7 1:0165e226b5af 98 LED(0,0,1);
mxy7 0:3a3b03651663 99 break;
mxy7 0:3a3b03651663 100 default:
mxy7 0:3a3b03651663 101 out(1,1,1,0,0,0);
mxy7 1:0165e226b5af 102 LED(0,0,0);
mxy7 0:3a3b03651663 103 break;
mxy7 0:3a3b03651663 104 }
mxy7 0:3a3b03651663 105 }
mxy7 0:3a3b03651663 106
mxy7 1:0165e226b5af 107 void out(float uh,float vh,float wh,float ul,float vl,float wl){
mxy7 0:3a3b03651663 108 uL.write(ul);
mxy7 0:3a3b03651663 109 vL.write(vl);
mxy7 1:0165e226b5af 110 wL.write(wl);
mxy7 0:3a3b03651663 111 uH.write(uh);
mxy7 0:3a3b03651663 112 vH.write(vh);
mxy7 0:3a3b03651663 113 wH.write(wh);
mxy7 0:3a3b03651663 114 }
mxy7 0:3a3b03651663 115
mxy7 1:0165e226b5af 116 void LED(int i,int ii,int iii){
mxy7 1:0165e226b5af 117 l1 = i;
mxy7 1:0165e226b5af 118 l2 = ii;
mxy7 1:0165e226b5af 119 l3 = iii;
mxy7 1:0165e226b5af 120 }
mxy7 1:0165e226b5af 121
mxy7 1:0165e226b5af 122 void A(){
mxy7 1:0165e226b5af 123 if(dir == 0)p = 1;
mxy7 1:0165e226b5af 124 else p = 3;}
mxy7 1:0165e226b5af 125 void B(){
mxy7 1:0165e226b5af 126 if(dir == 0)p = 2;
mxy7 1:0165e226b5af 127 else p = 4;}
mxy7 1:0165e226b5af 128 void C(){
mxy7 1:0165e226b5af 129 if(dir == 0)p = 3;
mxy7 1:0165e226b5af 130 else p = 5;}
mxy7 1:0165e226b5af 131 void D(){
mxy7 1:0165e226b5af 132 if(dir == 0)p = 4;
mxy7 1:0165e226b5af 133 else p = 6;}
mxy7 1:0165e226b5af 134 void E(){
mxy7 1:0165e226b5af 135 if(dir == 0)p = 5;
mxy7 1:0165e226b5af 136 else p = 1;}
mxy7 1:0165e226b5af 137 void F(){
mxy7 1:0165e226b5af 138 if(dir == 0)p = 6;
mxy7 1:0165e226b5af 139 else p = 2;}
mxy7 0:3a3b03651663 140