发新帖我要提问
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 | 只看该作者
顶上去~

使用特权

评论回复
45
panxiaoyi| | 2025-4-8 13:36 | 只看该作者
可控硅Q1画反了,要上下对调才是正确的。
至于过零,建议使用过零检测光耦,里面是两个发光二极管反向并联的那种,例如MP3H4光耦

使用特权

评论回复
46
蚊子的噩梦| | 2025-4-9 23:24 | 只看该作者
关于接电机后驱动信号变化的问题,可能是由于电机启动时的电流冲击导致可控硅触发不稳定。建议检查电机启动电流是否过大,或者在可控硅触发电路中加入缓冲电路来减少冲击。

使用特权

评论回复
47
hzocce|  楼主 | 2025-4-14 14:09 | 只看该作者
本帖最后由 hzocce 于 2025-4-14 16:18 编辑

有的时候 (极少数)启动会顿挫一下或者说抖动一下,是什么原因?
绝大部分时候不会有。----电机开转动那1~2s内
是不是速度大的时候,突然掉下来然后又起来的速度?
还是什么原因?

使用特权

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

本版积分规则