blob: d1d23598fd85aee13bf916b302dcc0b2ad4f8346 (
plain)
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
85
86
87
88
89
90
|
#ifndef MODULES_THREAD_THREAD_H_
#define MODULES_THREAD_THREAD_H_
#include "PMR/common/MessageContainer.pb-c.h"
#include "PMR/Hardware/HardwareMotor.pb-c.h"
#include "PMR/Hardware/HardwareMotorType.pb-c.h"
#include "PMR/Hardware/HardwareDancer.pb-c.h"
#include "PMR/Hardware/HardwareDancerType.pb-c.h"
#include "PMR/Hardware/HardwareWinder.pb-c.h"
#include "PMR/Hardware/HardwarePidControl.pb-c.h"
#include "PMR/Hardware/HardwareConfiguration.pb-c.h"
#include "PMR/Printing/JobSpool.pb-c.h"
#include "PMR/Printing/JobSpoolType.pb-c.h"
#include "drivers/Motors/Motor.h"
#include "../control/pidalgo.h"
#include "thread_ex.h"
#define NORMAL_COEF_DIVIDER 100
typedef struct
{
uint32_t startoffsetpulses;
uint32_t spoolbackingrate;
uint32_t segmentoffsetpulses;// the spool winding initial length in mm
uint32_t milimetersperrotation;
uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool
double NumberOfRotationPerPassage; // how many rotations per spool passage
double diameter;
}InternalWinderConfigStruc;
typedef struct
{
bool m_isEnabled;
int32_t m_SetParam;
float m_mesuredParam;
float m_preError;
float m_integral;
float m_calculatedError;
bool m_isReady;
uint32_t m_ingnoreValue;
PID_Config_Params m_params;
}MotorControlConfig_t;
#define MAX_THREAD_FEED_MOTORS (WINDER_MOTOR+1)
#define MAX_SYSTEM_DANCERS (HARDWARE_DANCER_TYPE__RightDancer+1)
extern TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM];
extern HardwareDancerType ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM];
extern HardwarePidControlType ThreadMotorIdToControlId[MAX_THREAD_MOTORS_NUM];
extern bool BreakSensorenabled;
extern int32_t BreakSensordebouncetimemilli;
extern bool SampleWinding;
//extern MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS];
extern HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM];
//extern InternalWinderConfigStruc InternalWinderCfg;
extern HardwareDancer DancersCfg[MAX_SYSTEM_DANCERS];
extern double CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM];
extern double OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM];
#define MAX_CONTROL_SAMPLES 10
extern int32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES];
extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM];
extern double NormalizedErrorCoEfficient[MAX_THREAD_MOTORS_NUM];
extern int DancerStopActivityLimit[MAX_THREAD_MOTORS_NUM];
extern MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM];
extern double MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES];
extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM];
uint32_t InternalWinderConfigMessage(HardwareWinder* request);
uint32_t MotorsConfigMessage( HardwareConfiguration* HW_request);
uint32_t InternalWindingConfigMessage(JobSpool* request);
uint32_t ThreadInitialTestStub(HardwareMotor * request);
uint32_t MotorPidRequestMessage(HardwarePidControl* request);
void SetKeepWindingCone(bool value);
void SetWinderBackToBaseTime(uint32_t value);
uint32_t DancerConfigMessage(HardwareDancer * request);
uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read);
void SetOriginMotorSpeed(float process_speed);
#endif //MODULES_THREAD_THREAD_H_
|