查看: 1506|回复: 1

[其他] 求一个PWM直流加热用的PID程序.也可以探讨下.急急..

[复制链接]
  • TA的每日心情
    开心
    2021-4-15 09:17
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    219

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    445
    最后登录
    2024-8-28
    发表于 2016-1-19 18:19:39 | 显示全部楼层 |阅读模式
    如题. 有做过的朋友么?
    我知道答案 目前已有1人回答
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    8
    最后登录
    1970-1-1
    发表于 2016-1-20 14:39:28 | 显示全部楼层
    先调试出 PWM(看调节占空比)这个容易 如果是飞思卡尔的 可以直接PE生成
    /*
    ** ===================================================================
    **     Method      :  PWMPID_SetRatio16 (component PWM)
    **
    **     Description :
    **         This method sets a new duty-cycle ratio.
    **     Parameters  :
    **         NAME       - DESCRIPTION
    **         Ratio      - Ratio is expressed as an 16-bit unsigned integer
    **                      number. 0 - 0xFFFF value is proportional
    **                      to ratio 0 - 100%
    **         Note: Calculated duty depends on the timer possibilities
    **               and on the selected period.
    **     Returns     :
    **         ---        - Error code, possible codes:
    **                           ERR_OK - OK
    **                           ERR_SPEED - This device does not work in
    **                           the active speed mode
    ** ===================================================================

    Pid采用位置式PID算法,主要是根据设定温度与当前温度之差,算出占空比
    把我的PID 结构体列一下 仅供参考
    typedef struct
    {
        uint8   u8Flag;         // 调节标志
        uint16  u16NowPw;        // 当前控制功率
        uint16  u16SetPw;
        uint8   u8State;        // 状态
        int16   i16AdjustH;      //调整幅值上限,防止积分饱和
        int16   i16AdjustL;      //调整幅值下限,防止积分饱和
        float   dSetValue;     // 设置控制温度
        float   dDifValue;
        float   dGetValue;     // 当前测量温度值
        //float   dT;            // 采样周期
        float   dHigh;         // 上限控制
        float   dLow;          // 下限控制
        float   dKp;           // PID 比例常数 P
        float   dKi;
        float   dKd;
        //float   dTi;           // PID 积分常数 I
        //float   dTd;           // PID 微分常数 D
        //float   dPreError;     // 上两次控温偏差值
        float   dLastError;    // 上一次控温偏差值
        float   dDError;       // 微分项偏差
        float   dSumError;     // 偏差积分和
        float   dDeadZOne;     // 死区限制
        uint8   u8ErrTimer;
        float   dNowTemp;
        float   dLastTemp;
    }stPID;
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 15:21 , Processed in 0.089233 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表