代码拉取完成,页面将自动刷新
同步操作将从 xiaoyi-bit/5KW高功率FOC,实现速度环转矩环 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*
* pid_control.h
*
* Created on: Sep 12, 2023
* Author: smile
*/
#ifndef PID_CONTROL_H_
#define PID_CONTROL_H_
#include "main.h"
#include "stdlib.h"
#include <math.h>
#define LIMIT( x,min,max ) ( (x) < (min) ? (min) : ( (x) > (max) ? (max) : (x) ) )
#define INTEGRAL_MAX 6.930f //sqrt(3)/3 * Udc mv
#define POSITION_ACCURACY 2.0f //sqrt(3)/3 * Udc mv
typedef struct
{
float SetVal; //定义设定值
float ActualVal; //定义实际值
float out; //定义输出值
float err; //定义偏差值
float err_next; //定义上一个偏差值
float err_last; //定义最上前的偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
float Integral;
float Integral_max;
uint8_t dirc; //定义方向
uint8_t samp_time; //取样时间(每秒多少次)
}PID_Def;
typedef struct
{
uint8_t enable : 1; //输出使能
uint8_t enable_lim_sum_error : 1; //积分限幅使能
uint8_t enable_lim_ouput : 1; //输出限幅使能
uint8_t count : 4;
float kp; //比例参数
float ki; //积分参数
float kd; //微分参数
float lim_sum_error; //误差积分限幅
float lim_output; //输出限幅 防止输出过大
float sum_error; //误差积分
float last_error; //上一次的误差
float last_last_error; //上上一次的误差
float kd_output;
float ki_output;
float kp_output;
float error_dec;
float pid_output;
float error;
} PID_HANDLE, *P_PID_HANDLE;
// PID参数
typedef struct {
float Kp;
float Ki;
float Kd;
float previous_error;
float integral;
float max_output; // 最大输出
float min_output; // 最小输出
} PIDController;
typedef struct {
float Kp; // 比例系数
float Ki; // 积分系数
float integral; // 积分累积
float max_output; // 最大输出
float min_output; // 最小输出
} PI_Controller_t;
void PI_Controller_Init(void);
float PI_Controller(PI_Controller_t *controller, float setpoint, float measured_value);
float PID_Controller(PIDController *pid, float setpoint, float measured_value);
extern PI_Controller_t q_axis_controller;
extern PI_Controller_t d_axis_controller;
extern PIDController speed_pid_1;
extern PI_Controller_t PI_torque;
extern PID_HANDLE id_pid;
extern PID_HANDLE iq_pid;
extern PID_HANDLE speed_pid;
extern PID_Def curret_Id_pid;
extern PID_Def curret_Iq_pid;
extern PID_Def speed_loop_pid;
extern PID_Def position_loop_pid;
extern float pid_out_ud;
extern float pid_out_uq;
extern float pid_ud_set;
extern float pid_uq_set;
void PID_init(void);
float PID_control(PID_Def *PID,float set_Val,float Actual_Val);
float position_PID_control(PID_Def *PID,float set_Val,float Actual_Val);
float pidProcess(P_PID_HANDLE phdl, float input, float measure);
#endif /* PID_CONTROL_H_ */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。