31 static void moterEnable(
uint8_t en);
32 static void execUARTCommand();
33 static void execCommand(
uint8_t *cmd);
36 volatile static float motor_duty = 0.0;
37 volatile static float degree = 0.0;
38 volatile static uint8_t flag_send_data_enable = 0;
41 volatile static uint8_t flag_slope = 0;
42 volatile static uint8_t flag_curve = 0;
43 volatile static uint8_t flag_stop = 0;
65 flag_send_data_enable = en;
74 static void moterEnable(
uint8_t en)
76 if(en == 1) LPC_GPIO1->DATA |= 0x0800 ;
77 if(en == 0) LPC_GPIO1->DATA &= ~(0x0800);
87 static void setRotationDir(
int8_t dir)
89 if(dir == 1) LPC_GPIO0->DATA |=0x0080;
90 if(dir == -1) LPC_GPIO0->DATA &= ~(0x0080);
107 motor_duty = pwm_duty;
111 if(pwm_duty < - 1.0) pwm_duty = -1.0;
112 motor_duty = pwm_duty;
121 if(pwm_duty > 1.0) pwm_duty = 1.0;
122 motor_duty = pwm_duty;
163 float acc_norm = 0.0;
164 float acc_norm_LPF = 0.0;
167 float omega_str_LPF_vec[3];
176 LPC_TMR32B1->IR=0x08;
180 send_data.
d[0] = 0xff;
181 send_data.
d[1] = 0xff;
182 send_data.
d[2] = 0x52;
183 send_data.
d[3] = 0x54;
184 send_data.
d[4] = 0x34;
185 send_data.
d[5] = 0x57;
186 send_data.
d[6] = 0x00;
187 send_data.
d[7] = timestamp;
189 if(timestamp == 0xff) timestamp = 0;
202 acc_norm =
tSqrt(acc_vec[0]*acc_vec[0]+acc_vec[1]*acc_vec[1]+acc_vec[2]*acc_vec[2]);
203 acc_norm_LPF = gain_LPF * acc_norm_LPF + (1.0-
gain_LPF)*acc_norm;
206 if(
ABS(acc_norm_LPF - acc_norm )<0.02 )
211 diff_omega[i] = omega_str_LPF_vec[i] - omega_vec[i] ;
224 if(
ABS(omega_vec[2]) >
DEG2RAD(100)) flag_curve = 1;
227 if(
ABS( 1-
ABS(acc_vec[2])) >0.1 ) flag_slope = 1;
232 degree += 0.01* omega_vec[2];
248 deg = (
int16_t)(degree/ (2*
PI) * 32767.0);
249 send_data.
d[28] = 0x00ff & deg;
250 send_data.
d[29] = (0xff00 & deg)>>8;
252 duty = (
int16_t)(motor_duty * 32767.0);
253 send_data.
d[30] = 0x00ff & duty;
254 send_data.
d[31] = (0xff00 & duty)>>8;
261 send_data.
d[35] = 0x000000ff & time;
262 send_data.
d[36] = (0x0000ff00 & time)>>8;
263 send_data.
d[37] = (0x00ff0000 & time)>>16;
264 send_data.
d[38] = (0xff000000 & time)>>24;
267 send_data.
d[39] = 0x000000ff & v_lipo;
268 send_data.
d[40] = (0x0000ff00 & v_lipo)>>8;
271 send_data.
d[41] = 0x000000ff & v_bat;
272 send_data.
d[42] = (0x0000ff00 & v_bat)>>8;
276 if(count % 5 == 0 && flag_send_data_enable == 1)
304 static void execUARTCommand()
366 static void execCommand(
uint8_t *cmd)
375 duty_int = cmd[4] + (cmd[5]<<8);
376 if (duty_int > 32767) duty_int -= 65536;
383 case 3:
flashGreenLED( cmd[4]+(cmd[5]<<8), cmd[6]+(cmd[7]<<8) );
385 case 4:
flashRedLED( cmd[4]+(cmd[5]<<8), cmd[6]+(cmd[7]<<8) );
388 deg_int = cmd[4] + (cmd[5]<<8);
389 if (deg_int > 32767) deg_int -= 65536;
void getDataFromMPU6050(uint8_t *dest_array)
uint32_t getElapsedTime(void)
void getOmega(float *vec)
void setSendDataEnable(uint8_t en)
int myPrintfUART(const char *fmt,...)
void setDutyMotor(float pwm_duty)
void setDegree(float deg)
volatile uint8_t UARTBuffer[BUFSIZE]
CMSIS Cortex-M3 Core Peripheral Access Layer Header File.
void UARTSend(uint8_t *BufferPtr, uint32_t Length)
void flashRedLED(uint16_t on_count, uint16_t off_count)
volatile uint32_t UARTCount
void VCOM_SendData(GETDAT_T dat)
void startTimer32_1(void)
float getMotorVoltage(void)
float getLipoVoltage(void)
void getAccLPF(float *vec)
unsigned short int uint16_t
void getDataFromAK8975(uint8_t *dest_array)
void getOmegaStrLPF(float *vec)
uint8_t isUSBConfig(void)
void flashGreenLED(uint16_t on_count, uint16_t off_count)
void turnRedLED(uint8_t state)
void setDutyPWM2(float duty)
void turnGreenLED(uint8_t state)
void TIMER32_1_IRQHandler(void)