void Main_Loop(void) { static uint8_t SpeedLoopcnt; static uint32_t LsData1,LsData2; if(T2ms_Flag) { T2ms_Flag=0; ReadSignedADC0( &ReadADCParm ); SB_Temp=SB_FilterHe; //12bit if(SB_Temp>200) // { if(Motor_State!=RUN) { Motor_Start(); } } else if(SB_Temp>190) ; else { if(Motor_State!=WAIT) Motor_Stop(); } if(++SpeedLoopcnt>1) { SetSpeed=SB_Temp+200; //100;// if(SetSpeed>NOMINALSPEEDINRPM) SetSpeed=NOMINALSPEEDINRPM; SpeedLoopcnt=0; LsData1=60*PWMFREQUENCY; LsData2=SpeedCnt*POLEPAIRS; SpeedData=LsData1/LsData2; #ifdef OPEN_I LsData1=(Curr_q_d.qI_Component1*VQ_Reference); LsData1/=32768; if(LsData1>POWER_MAX) VQ_Reference-=100; else { VQ_Reference=PID_Regulator(SetSpeed,SpeedData,&SPEED_PID_t); } #else IQ_Reference=PID_Regulator(SetSpeed,SpeedData,&SPEED_PID_t); #endif } } if(T100ms_Flag) { //LED2Toggle(); T100ms_Flag=0; } }
void CommandProcess(void) { int command; char mode; // Read incoming control messages //if (Serial_available() >= 2) if(getUartData == TRUE) { char start=g_u8RecData[0];//UART_READ(UART);//Serial_read(); if (start == '@') {// Start of new control message printf("@HOOK \n"); //int command = UART_READ(UART);//Serial_read(); // Commands command = g_u8RecData[1]; mode = g_u8RecData[2]; if (command == 's') { printf("@s ok \n"); // 's'tream output control if (mode == 's') {// 's'tart stream //stream_mode = STREAM_START; Motor_Start(); } else if (mode == 'p') {// 'p'ause stream //stream_mode = STREAM_PAUSE; Motor_Stop(); } } // else // { // if (report_format == REPORT_FORMAT_TEXT) { // printf("Unknown command.\n"); // } } // Skip character getUartData = FALSE; //标记接收完成 } }
void loop() { static uint32_t nextTick = 0; while(millis()<nextTick){} nextTick = millis()+TICK_FRAME_PERIOD; //循环间隔FRAME //处理蓝牙命令 CommandProcess(); //读取遥控命令 Comm_Process(); if(GetFrameCount()%10 == 0) { //读取姿态传感器数据 //读取欧拉角 #ifdef IMU_SW //软件姿态解算 //IMUSO3Thread(); #else DMP_Routing(); //DMP 线程 所有的数据都在这里更新 #endif //imu校准 // if(imuCaliFlag) // { // if(IMU_Calibrate()) // { // imuCaliFlag=0; // gParamsSaveEEPROMRequset=1; //请求记录到EEPROM // imu.caliPass=1; // } // } //PID二环角速度 //CtrlAttiRate(); //控制电机 //CtrlMotor(); } if(GetFrameCount()%20 == 0) { //处理遥控数据 //PID一环角度控制 //CtrlAttiAng(); } //10HZ,每100ms一次 //if(getTickCount()%100 == 0) if(GetFrameCount()%1000 == 0) { //检测电池电量 BatteryCheck(); //printf("Convert result is %d\n", GetBatteryAD()); //遥控通信丢失处理 //更新LED灯状态 UpdateLED(); } if(GetFrameCount()%100 == 0) { //printf("yaw=%d, roll=%d, pitch=%d \n",(int)imu.yaw, (int)imu.roll, (int)imu.pitch); //printf("\n"); } //故障保护 if(GetFrameCount() > 6000 && GetFrameCount() < 8000) { Motor_Start(); MotorPwmOutput(0,0,85,0); } // else if(GetFrameCount() >= 8000 && GetFrameCount() < 10000) // { // MotorPwmOutput(40,40,40,40); // } // else if(GetFrameCount() >= 10000 && GetFrameCount() < 12000) // { // MotorPwmOutput(60,60,60,60); // } // else if(GetFrameCount() >= 12000 && GetFrameCount() < 14000) // { // MotorPwmOutput(80,80,80,80); // } // else if(GetFrameCount() >= 14000 && GetFrameCount() < 16000) // { // MotorPwmOutput(100,100,100,100); // } else if(GetFrameCount() >= 40000 && !falg) { falg = true; //MotorPwmOutput(0,0,0,0); Motor_Stop(); } IncFrameCount(1); }