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

main.cpp@1:0165e226b5af, 2014-07-23 (annotated)
- Committer:
- mxy7
- Date:
- Wed Jul 23 01:16:43 2014 +0000
- Revision:
- 1:0165e226b5af
- Parent:
- 0:3a3b03651663
test
Who changed what in which revision?
| User | Revision | Line number | New 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 |