コード例 #1
0
ファイル: Contrl.c プロジェクト: Sailorwu/HallFocF051Focv7
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;	
	}
	
}
コード例 #2
0
ファイル: UartCtrl.c プロジェクト: yanyu130/JRW_4
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;	//标记接收完成
	}
}
コード例 #3
0
ファイル: main.c プロジェクト: yanyu130/JRW_4
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);
}