tao_z
2021-07-10 4a89e24804b91902def506a9e898293fa36ccb59
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
#include "bsp_pid.h"
#include "bldc_ctrl.h"
 
//¶¨ÒåÈ«¾Ö±äÁ¿
pid_t pid;
 
/**
  * @brief  PID²ÎÊý³õʼ»¯
    *    @note     ÎÞ
  * @retval ÎÞ
  */
void PID_param_init()
{
  /* ³õʼ»¯²ÎÊý */
  pid.target_val = 0.0;
  pid.actual_val = 0.0;
  pid.err = 0.0;
  pid.err_last = 0.0;
  pid.integral = 0.0;
 
  pid.Kp = 0.07; //24
  pid.Ki = 0.03;
  pid.Kd = 0.0;
 
#if defined(PID_ASSISTANT_EN)
  float pid_temp[3] = {pid.Kp, pid.Ki, pid.Kd};
  set_computer_value(SEND_P_I_D_CMD, CURVES_CH1, pid_temp, 3); // ¸øÍ¨µÀ 1 ·¢ËÍ P I D Öµ
#endif
}
 
/**
  * @brief  ÉèÖÃÄ¿±êÖµ
  * @param  val        Ä¿±êÖµ
    *    @note     ÎÞ
  * @retval ÎÞ
  */
void set_pid_target(float temp_val)
{
  pid.target_val = temp_val; // ÉèÖõ±Ç°µÄÄ¿±êÖµ
}
 
/**
  * @brief  »ñȡĿ±êÖµ
  * @param  ÎÞ
    *    @note     ÎÞ
  * @retval Ä¿±êÖµ
  */
float get_pid_target(void)
{
  return pid.target_val; // ÉèÖõ±Ç°µÄÄ¿±êÖµ
}
 
/**
  * @brief  ÉèÖñÈÀý¡¢»ý·Ö¡¢Î¢·ÖϵÊý
  * @param  p£º±ÈÀýϵÊý P
  * @param  i£º»ý·ÖϵÊý i
  * @param  d£ºÎ¢·ÖϵÊý d
    *    @note     ÎÞ
  * @retval ÎÞ
  */
void set_p_i_d(float p, float i, float d)
{
  pid.Kp = p; // ÉèÖñÈÀýϵÊý P
  pid.Ki = i; // ÉèÖûý·ÖϵÊý I
  pid.Kd = d; // ÉèÖÃ΢·ÖϵÊý D
}
 
/**
  * @brief  PIDË㷨ʵÏÖ
  * @param  actual_val:ʵ¼ÊÖµ
    *    @note     ÎÞ
  * @retval Í¨¹ýPID¼ÆËãºóµÄÊä³ö
  */
float PID_realize(float actual_val)
{
  /*¼ÆËãÄ¿±êÖµÓëʵ¼ÊÖµµÄÎó²î*/
  pid.err = pid.target_val - actual_val;
  pid.integral += pid.err;
 
  /*PIDË㷨ʵÏÖ*/
  pid.actual_val = pid.Kp * pid.err +
                   pid.Ki * pid.integral +
                   pid.Kd * (pid.err - pid.err_last);
 
  /*Îó²î´«µÝ*/
  pid.err_last = pid.err;
 
  /*·µ»Øµ±Ç°Êµ¼ÊÖµ*/
  return pid.actual_val;
}