kazuyoshi makisumi
/
BLDC
ホールセンサの値を見てBLDCモータを回す。
Diff: main.cpp
- Revision:
- 0:3a3b03651663
- Child:
- 1:0165e226b5af
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jul 22 02:24:31 2014 +0000 @@ -0,0 +1,108 @@ +#include "mbed.h" + +DigitalOut l1(LED1); +DigitalOut l2(LED2); +DigitalOut l3(LED3); + +PwmOut uH(p21); +PwmOut vH(p22); +PwmOut wH(p23); + +PwmOut uL(p24); +PwmOut vL(p25); +PwmOut wL(p26); + +InterruptIn u(p16); +InterruptIn v(p17); +InterruptIn w(p18); + +int p; +float period = 1; +float pulse = period / 10; + +void mode(int); +void out(int,int,int,int,int,int); +void A();void B();void C(); +void D();void E();void F(); + +void init(){ + u.mode(PullUp); + v.mode(PullUp); + w.mode(PullUp); + + uH.period_us(period); + vH.period_us(period); + wH.period_us(period); + uH.pulsewidth_us(pulse); + vH.pulsewidth_us(pulse); + wH.pulsewidth_us(pulse); + + uL.period_us(period); + vL.period_us(period); + wL.period_us(period); + uL.pulsewidth_us(pulse); + vL.pulsewidth_us(pulse); + wL.pulsewidth_us(pulse); + + p = 0;//start +} + +int main() { + init(); + while(1) { + u.rise(&A); + w.fall(&B); + v.rise(&C); + u.fall(&D); + w.rise(&E); + v.fall(&F); + mode(p); + } + return 0; +} + +void mode(int p){ + switch(p){ + case 0: + out(1,1,1,0,0,0); + break; + case 1: + out(0,1,1,0,1,0); + break; + case 2: + out(0,1,1,0,0,1); + break; + case 3: + out(1,0,1,0,0,1); + break; + case 4: + out(1,0,1,1,0,0); + break; + case 5: + out(1,1,0,1,0,0); + break; + case 6: + out(1,1,0,0,1,0); + break; + default: + out(1,1,1,0,0,0); + break; + } +} + +void out(int uh,int vh,int wh,int ul,int vl,int wl){ + uL.write(ul); + vL.write(vl); + wL.write(vl); + uH.write(uh); + vH.write(vh); + wH.write(wh); +} + +void A(){p = 1;} +void B(){p = 2;} +void C(){p = 3;} +void D(){p = 4;} +void E(){p = 5;} +void F(){p = 6;} + \ No newline at end of file