- 16
- 0
- 约5.29千字
- 约 7页
- 2016-09-23 发布于江苏
- 举报
28333_TMS320F28335_PID调节.doc
/*************************************************************************************/
#include Task_Global_h.h
/*****************************************************************/
extern void AdcComputer_HighSpeed(void);
extern void WaveRecorder(void); /* 准备录波数据 */
#pragma CODE_SECTION(PIDInitCtrl,.UserProgramCode)
void PIDInitCtrl(void)
{
Sys.PID.Ukn_0 = 4000000;
Sys.PID.Ukn_1 = 4000000;
Sys.PID.Ukn_2 = 4000000;
Sys.PID.Ien_0 = 0;
Sys.PID.Ien_1 = 0;
Sys.PID.Ien_2 = 0;
Sys.PID.Uk = 4000;
OS_ENTER_CRITICAL();
Sys.EnF0Reg.bit.PWM_Enable = OFF;
OS_EXIT_CRITICAL();
}
/****************************************************************************/
// PID输出到PWM最后输出的转换
/****************************************************************************/
#pragma CODE_SECTION(Transition,.UserProgramCode)
void Transition(int16 Uk)
{
int32 Temp;
Uint16 Temp1, Temp2;
if(Uk UkMax)Uk = UkMax;
if(Uk UkMin)Uk = UkMin;
Temp = Uk;
Temp1 = (Sys.PWMCon.PR 1) - 125;
Temp2 = (Uint16)((Temp * Sys.PWMCon.PR) / 20000);
if(Temp2 Temp1)Temp2 = Temp1;
Sys.PID.Uc = Temp2;
}
/****************************************************************************/
// PID 参变量求值
/****************************************************************************/
#pragma CODE_SECTION(PID_Par,.UserProgramCode)
void PID_Par(int32 Kp, int32 Ti, int32 Td)
{
int32 Ts; // 时间常数
Ts = 50; // 运算周期 50 us
Sys.PID.A = (Ts * Ts) + (Td * Ti) + (Ts * Ti);
Sys.PID.B = ((Ts * Ts) - (Td * Ti)) 1;
Sys.PID.C = (Ts * Ts) + (Td * Ti) - (Ts * Ti);
Sys.PID.S = Ts * Ti;
Sys.PID.Kp = Kp;
}
/****************************************************************************/
// 使双线性变换算子处于 零 状态响应, 大电流模式下
/****************************************************************************/
#pragma CODE_SECTION(SetZeroState,.UserProgramCode)
void SetZeroState(void)
{
Sys.PID.Ukn_2 = Sys.PID.Ukn_0;
Sys.PID.Ukn_1 = Sys.PID.Ukn_0;
Sys.PID.Ien_0 = Sys.PID.If * Sys.PID.Kp;
Sys.PID.I
原创力文档

文档评论(0)