1 Star 0 Fork 1

xuhhaihua109/5KW高功率FOC,实现速度环转矩环

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
pid_control.h 2.89 KB
一键复制 编辑 原始数据 按行查看 历史
yi 提交于 2024-07-30 16:25 . 速度环,转矩环
/*
* 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_ */
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xuhhaihua109/FOC_speed_Torque.git
git@gitee.com:xuhhaihua109/FOC_speed_Torque.git
xuhhaihua109
FOC_speed_Torque
5KW高功率FOC,实现速度环转矩环
da

搜索帮助