-
Notifications
You must be signed in to change notification settings - Fork 0
/
motor_control.h
84 lines (65 loc) · 1.55 KB
/
motor_control.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* motor_control_timer.h
*
* Created on: 2012. 8. 7.
* Author: East
*/
#ifndef MOTOR_CONTROL_H_
#define MOTOR_CONTROL_H_
#include <inttypes.h>
#include "type.h"
#define CONTROL_MOTOR_COUNT 2
#define PULSE_PER_ROTATION (38 * 49)
#define DEFAULT_POSITION_ERROR_LIMIT (3)
#define CONTROL_PERIOD_MS 10
typedef enum MotorControlMode
{
CONTROL_FREE, CONTROL_PID_TUNING, CONTROL_VELOCITY, CONTROL_POSITION
} ControlMode;
typedef struct PidParameter
{
float desiredValue;
float currentValue;
float proportionalGain;
float integralGain;
float derivativeGain;
//for debuging
float error, proportionalTerm, derivativeTerm, mainpulatedValue;
//
float manipulatedValueLimit;
float dt;
//read-only
float integralTerm;
float previousError;
} PidParameter;
typedef struct MovingAverageType
{
float values[5];
unsigned int index;
} MovingAverageType;
typedef struct VelocityParameter
{
float acceleration;
float maximumVelocity;
} VelocityParameter;
typedef struct MotorControlType
{
ControlMode controlMode;
float controlDeisredValue;
PidParameter pid;
VelocityParameter velocityParameter;
MovingAverageType movingAverageVelocitySamples;
float averageVelocity;
float positionErrorLimit;
float pulsePerRotation;
int64_t previousEncoder;
uint32_t time;
uint32_t desiredTime;
float startVelocity;
} MotorControlType;
void MotorControlTimerRccConfig();
void MotorControlTimerNvicConfig();
void MotorControlTimerInit();
void MotorControlProcess();
extern MotorControlType motorControlTypes[CONTROL_MOTOR_COUNT];
#endif /* MOTOR_CONTROL_TIMER_H_ */