使用简单的状态机仿真实现一个电机正反转。
1. 电机角度从0开始,每一个循环增加一个值,角度到360度时电机圈数值加1,角度又从0开始递增。
2.当电机圈数达到指定的圈数时,电机反转,角度从360度开始递减,递减到0时,圈数减1.
3.当电机圈数递减到一个给定的值时,电机正转,角度从0开始递增,以此循环。
#include "stdafx.h"
#include <iostream>
#include <windows.h>
/*电机状态定义*/
typedef enum MotorMode {
STOP,
POSTURN,
NEGTURN,
}MotorMode;
/*定义一个结构体存储电机的角度值,圈数,正弦值,余弦值*/
typedef struct imulationSMB{
double angle;
double x;
double y;
int revcnt;
}SimulationSMB;
#define REVCNT_LIMIT_POS 10 /*电机正转圈数限值*/
#define REVCNT_LIMIT_NEG -10 /*电机反转圈数限值*/
#define MOTOR_STEP 1 /*电机角度递增值*/
#define PI 3.14159265
SimulationSMB SMBdata = {0};
SimulationSMB calSMBdata = { 0 };
MotorMode motorMode = STOP;
/*模拟电机转动的简单状态机,包含停止,正转和反转三种状态
停止状态会跳转到正转状态
在正转状态时,电机角度从0度开始,每循环一次递增MOTOR_STEP,角度到360时,圈数值增加1,,然后角度值又从0开始递增
在反转状态时,电机角度从360度开始