发新帖我要提问
123
返回列表
打印

交流电机可控硅调速 困惑

[复制链接]
楼主: hzocce
手机看帖
扫描二维码
随时随地手机跟帖
41
lunen| | 2025-3-21 20:42 | 只看该作者 回帖奖励 |倒序浏览
以AC的周期为PID计算周期,例如50HZ,就是20ms,过零信号的每个上升或者下降沿为PID的计算时刻,两个边沿采集霍尔个数并启动定时器,到边沿用计数个数跟定时器时间计算此时转速(或者直接用定时时间/个数为PID的输入),PID采用增量式,限制每次计算值在几个数之间,P=80,I=88,D=80,实际调整,相位角越小转速越高,注意计算时参数符号,差值越大相位角就要调小

使用特权

评论回复
42
hzocce|  楼主 | 2025-3-22 10:21 | 只看该作者
lunen 发表于 2025-3-21 20:42
以AC的周期为PID计算周期,例如50HZ,就是20ms,过零信号的每个上升或者下降沿为PID的计算时刻,两个边沿采集霍 ...

感谢 lunen 的指导~~~

似懂非懂的感觉

能分享一个 程序 研究一下不?

使用特权

评论回复
43
hzocce|  楼主 | 2025-3-22 10:22 | 只看该作者
struct PID
{
        float SetSpeed;//每100ms的转速
        float DriverOut;//为检测到零点之后延时打开可控硅的时间。
        float Err;//当次误差
        float LastErr;//上次误差
        float Kp;
        float Ki;
        float Kd;
        float Integral;
};
void Pid_init(void)
{
        PID.SetSpeed=60;
        PID.DriverOut=0;
        PID.Err=0;
        PID.LastErr=0;
        PID.Kp=2.2;
        PID.Ki=0;
        PID.Kd=0;

}

//定时调用
void AutoReloadCallback(void)
{
        int Actual_Encoder_Hall_Speed = 0;
        int res_pwm = 0;

        Actual_Encoder_Hall_Speed=HallPulseNumber;//
        PID.LastErr = PID.Err;
        PID.Err = Actual_Encoder_Hall_Speed-PID.SetSpeed ;//发现这样才行,为什么?        
//PID.Err = PID.SetSpeed -  Actual_Encoder_Hall_Speed;
      
        PID.Integral += PID.Err;


        PID.DriverOut = PID.Kp * PID.Err +
                                     PID.Ki * PID.Integral +
                                     PID.Kd * (PID.Err - PID.LastErr);

        //DriverOut为检测到零点之后延时打开可控硅的时间。
        if(PID.DriverOut>165)PID.DriverOut=165;;
        if(PID.DriverOut<30)PID.DriverOut=30;
               
                Out(PID.DriverOut);
}

看到的现象是,屏蔽上面的取值,直接给PID.DriverOut赋值,如下
赋值时得到如下数值:
PID.DriverOut=172;HallPulseNumber=12;
PID.DriverOut=170;HallPulseNumber=20;
PID.DriverOut=165;HallPulseNumber=45;
PID.DriverOut=160;HallPulseNumber=70;
PID.DriverOut=150;HallPulseNumber=100;
PID.DriverOut=140;HallPulseNumber=125;
PID.DriverOut=130;HallPulseNumber=143;

如上AutoReloadCallback有没有那里有问题?

PID.Kp、PID.Ki、PID.Kd大概怎么取值才合适,

上面这个失控状态,应该是错了,但是不知道哪里错了!

使用特权

评论回复
44
hzocce|  楼主 | 2025-3-24 08:11 | 只看该作者
顶上去~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则