Lib para L6230

Committer:
Marcelocostanzo
Date:
Thu Jun 25 17:21:30 2020 +0000
Revision:
0:5b1b141e5837
funcionando V1

Who changed what in which revision?

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