圆点博士小四轴主程序采用状态机结构的方式编写。
状态机的基本结构是:
1。有一个驱动时钟
2。在各个状态中设置下一个需要运行的状态。
下面我们结合源代码进行分析:
system_timer_1ms_event是一个每1ms触发一次的事件。在定时器的控制下,每1ms,事件标志system_timer_1ms_event北置位到1。
while(1)是一个死循环,代码不断检测1ms事件到达标志。
圆点博士小四轴状态机主要由下列三个事件组成:
IDLE 为开机后的初始化状态,主要用于检查陀螺仪数据的稳定性。
UPDATE_COMMAND 为接收遥控器指令以及读取陀螺仪数据的状态
UPDATE_MOTOR 为更新电机转速的状态
RESET_MOTOR 为关停电机的状态。
while(1)
{
if(system_timer_1ms_event) //圆点博士:1MS事件触发
{
system_timer_1ms_event=0; //圆点博士:清除事件
system_timer_counter++; //圆点博士:系统计数器
//
switch (system_timer_state)
{
case IDLE:
system_idle_counter++;
BS004_Get_MPU6050_Data();
//
if(system_idle_counter>5) system_timer_state=UPDATE_COMMAND;
break;
case UPDATE_COMMAND:
BS004_Get_MPU6050_Data();
system_status=BS004_COM1_Task_Process();
//
if(system_status) system_timer_state=UPDATE_MOTOR;
else system_timer_state=RESET_MOTOR;
break;
case UPDATE_MOTOR:
BS004_Get_MPU6050_Data();
BS004_Motor_Control();
//
system_timer_state=UPDATE_COMMAND;
break;
case RESET_MOTOR:
BS004_Get_MPU6050_Data();
BS004_Motor_Reset();
//
system_timer_state=UPDATE_COMMAND;
break;
default:
break;
}
}
}