brushless motor control library with l293d
Diff: brushlessController_L293D.cpp
- Revision:
- 2:ac825be76379
- Parent:
- 1:f7babaac1149
- Child:
- 3:d6e8fbc04a43
--- a/brushlessController_L293D.cpp Tue Jul 14 07:35:41 2015 +0000 +++ b/brushlessController_L293D.cpp Tue Jul 14 08:43:10 2015 +0000 @@ -47,21 +47,28 @@ /* Enable the outputs initially */ en1 = 1; en2 = 1; en3 = 1; - /* Magical data_array to drive the brushless motor */ + /* Magical data_array to drive the brushless motor */ // HIGH:1, LOW:0, HIGH-Z:2 char data_array[]={1,2,0, 1,0,2, 2,0,1, 0,2,1, 0,1,2, 2,1,0}; - char data_arrayInv[]={0,1,2, 0,2,1, 2,0,1, 1,0,2, 1,2,0, 2,1,0}; - - if(dir==1) // if dir = 1, reverse the motor direction - for(int k=0; k<18; k++) - data_array[k] = data_arrayInv[k]; - + + if(dir==1) + *prevStep = *prevStep + 1; // Increase prevStep for next step || WARNING: *prevStep++ did not work + else + *prevStep = *prevStep - 1; + int i = *prevStep; - i%=6; // Steps will be repeated at mod6 - *prevStep = *prevStep + 1; // Increase prevStep for next step || WARNING: *prevStep++ did not work + + if (i<0) // Mod operation for the negative number + { + i*=(-1); i%=6; i=6-i; + i%=6; // if i=6, it should be zero. + } + else + i%=6; // Steps will be repeated at mod6 out1 = data_array[3*i]; (data_array[3*i] == 2)?(en1 = 0):(en1 = 1); out2 = data_array[3*i+1]; (data_array[3*i+1] == 2)?(en2 = 0):(en2 = 1); out3 = data_array[3*i+2]; (data_array[3*i+2] == 2)?(en3 = 0):(en3 = 1); wait_ms(delay_time); } +