Lines Matching refs:pc

39 pidctrl_init(struct pidctrl *pc, int interval, int setpoint, int bound,  in pidctrl_init()  argument
43 bzero(pc, sizeof(*pc)); in pidctrl_init()
44 pc->pc_setpoint = setpoint; in pidctrl_init()
45 pc->pc_interval = interval; in pidctrl_init()
46 pc->pc_bound = bound * setpoint * Kid; in pidctrl_init()
47 pc->pc_Kpd = Kpd; in pidctrl_init()
48 pc->pc_Kid = Kid; in pidctrl_init()
49 pc->pc_Kdd = Kdd; in pidctrl_init()
53 pidctrl_init_sysctl(struct pidctrl *pc, struct sysctl_oid_list *parent) in pidctrl_init_sysctl() argument
57 &pc->pc_error, 0, "Current difference from setpoint value (P)"); in pidctrl_init_sysctl()
59 &pc->pc_olderror, 0, "Error value from last interval"); in pidctrl_init_sysctl()
61 &pc->pc_integral, 0, "Accumulated error integral (I)"); in pidctrl_init_sysctl()
63 &pc->pc_derivative, 0, "Error derivative (D)"); in pidctrl_init_sysctl()
65 &pc->pc_input, 0, "Last controller process variable input"); in pidctrl_init_sysctl()
67 &pc->pc_output, 0, "Last controller output"); in pidctrl_init_sysctl()
69 &pc->pc_ticks, 0, "Last controller runtime"); in pidctrl_init_sysctl()
71 &pc->pc_setpoint, 0, "Desired level for process variable"); in pidctrl_init_sysctl()
73 &pc->pc_interval, 0, "Interval between calculations (ticks)"); in pidctrl_init_sysctl()
75 &pc->pc_bound, 0, "Integral wind-up limit"); in pidctrl_init_sysctl()
77 &pc->pc_Kpd, 0, "Inverse of proportional gain"); in pidctrl_init_sysctl()
79 &pc->pc_Kid, 0, "Inverse of integral gain"); in pidctrl_init_sysctl()
81 &pc->pc_Kdd, 0, "Inverse of derivative gain"); in pidctrl_init_sysctl()
85 pidctrl_classic(struct pidctrl *pc, int input) in pidctrl_classic() argument
90 error = pc->pc_setpoint - input; in pidctrl_classic()
91 pc->pc_ticks = ticks; in pidctrl_classic()
92 pc->pc_olderror = pc->pc_error; in pidctrl_classic()
95 Kpd = MAX(pc->pc_Kpd, 1); in pidctrl_classic()
96 Kid = MAX(pc->pc_Kid, 1); in pidctrl_classic()
97 Kdd = MAX(pc->pc_Kdd, 1); in pidctrl_classic()
100 pc->pc_error = error; in pidctrl_classic()
101 pc->pc_integral = in pidctrl_classic()
102 MAX(MIN(pc->pc_integral + error, pc->pc_bound), -pc->pc_bound); in pidctrl_classic()
103 pc->pc_derivative = error - pc->pc_olderror; in pidctrl_classic()
106 output = (pc->pc_error / Kpd) + (pc->pc_integral / Kid) + in pidctrl_classic()
107 (pc->pc_derivative / Kdd); in pidctrl_classic()
109 pc->pc_output = output; in pidctrl_classic()
110 pc->pc_input = input; in pidctrl_classic()
116 pidctrl_daemon(struct pidctrl *pc, int input) in pidctrl_daemon() argument
121 error = pc->pc_setpoint - input; in pidctrl_daemon()
128 if ((u_int)ticks - pc->pc_ticks >= pc->pc_interval) { in pidctrl_daemon()
129 pc->pc_ticks = ticks; in pidctrl_daemon()
130 pc->pc_olderror = pc->pc_error; in pidctrl_daemon()
131 pc->pc_output = pc->pc_error = 0; in pidctrl_daemon()
134 error -= pc->pc_error - pc->pc_output; in pidctrl_daemon()
138 Kpd = MAX(pc->pc_Kpd, 1); in pidctrl_daemon()
139 Kid = MAX(pc->pc_Kid, 1); in pidctrl_daemon()
140 Kdd = MAX(pc->pc_Kdd, 1); in pidctrl_daemon()
143 pc->pc_error += error; in pidctrl_daemon()
144 pc->pc_integral = in pidctrl_daemon()
145 MAX(MIN(pc->pc_integral + error, pc->pc_bound), 0); in pidctrl_daemon()
146 pc->pc_derivative = pc->pc_error - pc->pc_olderror; in pidctrl_daemon()
149 output = (pc->pc_error / Kpd) + (pc->pc_integral / Kid) + in pidctrl_daemon()
150 (pc->pc_derivative / Kdd); in pidctrl_daemon()
151 output = MAX(output - pc->pc_output, 0); in pidctrl_daemon()
153 pc->pc_output += output; in pidctrl_daemon()
154 pc->pc_input = input; in pidctrl_daemon()