00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef BLOCKING_DETECTION_MANAGER_H_
00026 #define BLOCKING_DETECTION_MANAGER_H_
00027
00028
00029 #define BD_DEBUG 128
00030
00031 #include <control_system_manager.h>
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 struct blocking_detection {
00045 struct cs *cs;
00046
00047 uint32_t i_thres;
00048 int32_t k1;
00049 int32_t k2;
00050 uint16_t cpt_thres;
00051 uint16_t cpt;
00052 uint16_t speed_thres;
00053 #ifdef BD_DEBUG
00054 uint16_t debug_cpt;
00055 #endif
00056
00057 int32_t prev_pos;
00058 int32_t speed;
00059 };
00060
00062 void bd_init(struct blocking_detection * bd);
00063
00066 void bd_set_current_thresholds(struct blocking_detection * bd,
00067 int32_t k1, int32_t k2,
00068 uint32_t i_thres, uint16_t cpt_thres);
00069
00072 void bd_set_speed_threshold(struct blocking_detection * bd,
00073 uint16_t speed);
00074
00076 void bd_reset(struct blocking_detection * bd);
00077
00079 void bd_manage_from_cs(struct blocking_detection * bd, struct cs *cs);
00080
00082 void bd_manage_from_pos_cmd(struct blocking_detection * bd,
00083 int32_t pos, int32_t cmd);
00084
00086 void bd_manage_from_speed_cmd(struct blocking_detection * bd,
00087 int32_t speed, int32_t cmd);
00088
00090 uint8_t bd_get(struct blocking_detection * bd);
00091
00092 #endif