Lib para L6230
L6230_BLDC.cpp@0:5b1b141e5837, 2020-06-25 (annotated)
- Committer:
- Marcelocostanzo
- Date:
- Thu Jun 25 17:21:30 2020 +0000
- Revision:
- 0:5b1b141e5837
funcionando V1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Marcelocostanzo | 0:5b1b141e5837 | 1 | #include "L6230_BLDC.h" |
Marcelocostanzo | 0:5b1b141e5837 | 2 | #include "mbed.h" |
Marcelocostanzo | 0:5b1b141e5837 | 3 | |
Marcelocostanzo | 0:5b1b141e5837 | 4 | L6230_BLDC::L6230_BLDC(PinName en1_pin, PinName en2_pin, PinName en3_pin, PinName out1_pin, PinName out2_pin, PinName out3_pin) : |
Marcelocostanzo | 0:5b1b141e5837 | 5 | _en1_pin(en1_pin), _en2_pin(en2_pin), _en3_pin(en3_pin), _out1_pin(out1_pin), _out2_pin(out2_pin), _out3_pin(out3_pin) |
Marcelocostanzo | 0:5b1b141e5837 | 6 | { |
Marcelocostanzo | 0:5b1b141e5837 | 7 | _en1_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 8 | _en2_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 9 | _en3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 10 | _out1_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 11 | _out2_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 12 | _out3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 13 | } |
Marcelocostanzo | 0:5b1b141e5837 | 14 | |
Marcelocostanzo | 0:5b1b141e5837 | 15 | void L6230_BLDC::stop() |
Marcelocostanzo | 0:5b1b141e5837 | 16 | { |
Marcelocostanzo | 0:5b1b141e5837 | 17 | _out1_pin = 0; _out2_pin = 0; _out3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 18 | _en1_pin = 0; _en2_pin = 0; _en3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 19 | } |
Marcelocostanzo | 0:5b1b141e5837 | 20 | |
Marcelocostanzo | 0:5b1b141e5837 | 21 | void L6230_BLDC::turn(bool dir, int delay_time) |
Marcelocostanzo | 0:5b1b141e5837 | 22 | { |
Marcelocostanzo | 0:5b1b141e5837 | 23 | } |
Marcelocostanzo | 0:5b1b141e5837 | 24 | |
Marcelocostanzo | 0:5b1b141e5837 | 25 | |
Marcelocostanzo | 0:5b1b141e5837 | 26 | void L6230_BLDC::turn_n_steps(bool dir, int delay_time, int stepNum) |
Marcelocostanzo | 0:5b1b141e5837 | 27 | { |
Marcelocostanzo | 0:5b1b141e5837 | 28 | /* Digital outputs are initially zero */ |
Marcelocostanzo | 0:5b1b141e5837 | 29 | _out1_pin = 0; _out2_pin = 0; _out3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 30 | |
Marcelocostanzo | 0:5b1b141e5837 | 31 | /* Enable the outputs initially */ |
Marcelocostanzo | 0:5b1b141e5837 | 32 | _en1_pin = 1; _en2_pin = 1; _en3_pin = 1; |
Marcelocostanzo | 0:5b1b141e5837 | 33 | |
Marcelocostanzo | 0:5b1b141e5837 | 34 | int stepCount = 0; // Number of step counts |
Marcelocostanzo | 0:5b1b141e5837 | 35 | |
Marcelocostanzo | 0:5b1b141e5837 | 36 | /* Magical data_array to drive the brushless motor */ |
Marcelocostanzo | 0:5b1b141e5837 | 37 | // HIGH:1, LOW:0, HIGH-Z:2 |
Marcelocostanzo | 0:5b1b141e5837 | 38 | char data_array[]={1,2,0, 1,0,2, 2,0,1, 0,2,1, 0,1,2, 2,1,0}; |
Marcelocostanzo | 0:5b1b141e5837 | 39 | char data_arrayInv[]={0,1,2, 0,2,1, 2,0,1, 1,0,2, 1,2,0, 2,1,0}; |
Marcelocostanzo | 0:5b1b141e5837 | 40 | |
Marcelocostanzo | 0:5b1b141e5837 | 41 | if(dir==1) // if dir = 1, reverse the motor direction |
Marcelocostanzo | 0:5b1b141e5837 | 42 | for(int k=0; k<18; k++) |
Marcelocostanzo | 0:5b1b141e5837 | 43 | data_array[k] = data_arrayInv[k]; |
Marcelocostanzo | 0:5b1b141e5837 | 44 | |
Marcelocostanzo | 0:5b1b141e5837 | 45 | for (int i=0; i<stepNum; i++) |
Marcelocostanzo | 0:5b1b141e5837 | 46 | { |
Marcelocostanzo | 0:5b1b141e5837 | 47 | i%=6; // Steps will be repeated at mod6 |
Marcelocostanzo | 0:5b1b141e5837 | 48 | _out1_pin = data_array[3*i]; (data_array[3*i] == 2)?(_en1_pin = 0):(_en1_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 49 | _out2_pin = data_array[3*i+1]; (data_array[3*i+1] == 2)?(_en2_pin = 0):(_en2_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 50 | _out3_pin = data_array[3*i+2]; (data_array[3*i+2] == 2)?(_en3_pin = 0):(_en3_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 51 | wait_us(delay_time); |
Marcelocostanzo | 0:5b1b141e5837 | 52 | if(++stepCount == stepNum) break; |
Marcelocostanzo | 0:5b1b141e5837 | 53 | } |
Marcelocostanzo | 0:5b1b141e5837 | 54 | } |
Marcelocostanzo | 0:5b1b141e5837 | 55 | |
Marcelocostanzo | 0:5b1b141e5837 | 56 | void L6230_BLDC::one_step(bool dir, int delay_time, int* prevStep) |
Marcelocostanzo | 0:5b1b141e5837 | 57 | { |
Marcelocostanzo | 0:5b1b141e5837 | 58 | /* Digital outputs are initially zero */ |
Marcelocostanzo | 0:5b1b141e5837 | 59 | _out1_pin = 0; _out2_pin = 0; _out3_pin = 0; |
Marcelocostanzo | 0:5b1b141e5837 | 60 | |
Marcelocostanzo | 0:5b1b141e5837 | 61 | /* Enable the outputs initially */ |
Marcelocostanzo | 0:5b1b141e5837 | 62 | _en1_pin = 1; _en2_pin = 1; _en3_pin = 1; |
Marcelocostanzo | 0:5b1b141e5837 | 63 | |
Marcelocostanzo | 0:5b1b141e5837 | 64 | /* Magical data_array to drive the brushless motor */ |
Marcelocostanzo | 0:5b1b141e5837 | 65 | // HIGH:1, LOW:0, HIGH-Z:2 |
Marcelocostanzo | 0:5b1b141e5837 | 66 | char data_array[]={1,2,0, 1,0,2, 2,0,1, 0,2,1, 0,1,2, 2,1,0}; |
Marcelocostanzo | 0:5b1b141e5837 | 67 | |
Marcelocostanzo | 0:5b1b141e5837 | 68 | if(dir==1) |
Marcelocostanzo | 0:5b1b141e5837 | 69 | *prevStep = *prevStep + 1; // Increase prevStep for next step || WARNING: *prevStep++ did not work |
Marcelocostanzo | 0:5b1b141e5837 | 70 | else |
Marcelocostanzo | 0:5b1b141e5837 | 71 | *prevStep = *prevStep - 1; |
Marcelocostanzo | 0:5b1b141e5837 | 72 | |
Marcelocostanzo | 0:5b1b141e5837 | 73 | int i = *prevStep; |
Marcelocostanzo | 0:5b1b141e5837 | 74 | |
Marcelocostanzo | 0:5b1b141e5837 | 75 | if (i<0) // Mod operation for the negative number |
Marcelocostanzo | 0:5b1b141e5837 | 76 | { |
Marcelocostanzo | 0:5b1b141e5837 | 77 | i*=(-1); i%=6; i=6-i; |
Marcelocostanzo | 0:5b1b141e5837 | 78 | i%=6; // if i=6, it should be zero. |
Marcelocostanzo | 0:5b1b141e5837 | 79 | } |
Marcelocostanzo | 0:5b1b141e5837 | 80 | else |
Marcelocostanzo | 0:5b1b141e5837 | 81 | i%=6; // Steps will be repeated at mod6 |
Marcelocostanzo | 0:5b1b141e5837 | 82 | |
Marcelocostanzo | 0:5b1b141e5837 | 83 | _out1_pin = data_array[3*i]; (data_array[3*i] == 2)?(_en1_pin = 0):(_en1_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 84 | _out2_pin = data_array[3*i+1]; (data_array[3*i+1] == 2)?(_en2_pin = 0):(_en2_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 85 | _out3_pin = data_array[3*i+2]; (data_array[3*i+2] == 2)?(_en3_pin = 0):(_en3_pin = 1); |
Marcelocostanzo | 0:5b1b141e5837 | 86 | wait_us(delay_time); |
Marcelocostanzo | 0:5b1b141e5837 | 87 | } |