Isnis-fallen 2024-01-29 13:27 采纳率: 0%
浏览 3

PID_pm->Integ_e += limit_abs1f(PID_pm->e, PID_pm->e_max) * PID_pm->dt; 请问这个PID_pm->dt是什么赋值的?

https://blog.csdn.net/xiazhouzhou?type=blog

这篇博客里,

PID_pm->Integ_e += limit_abs1f(PID_pm->e, PID_pm->e_max) * PID_pm->dt; 请问这个PID_pm->dt是什么赋值的?麻烦给个使用的代码例子,谢谢

  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-29 13:44
    关注

    PID_pm->dt应该是指PID控制,特别是离散PID控制中的采样时间。在实现PID控制算法的时候,通常需要在一定的时间间隔内采样系统的状态。这个时间间隔就是dt,也就是微分时间。
    对于离散的PID控制器来说,采样时间dt是一个重要的参数,因为PID控制器的微分和积分部分与微分时间dt有关。这个dt通常需要在每次循环或者每次调用PID更新函数的时候更新。
    这里是一个可能的示例,演示了如何计算并更新dt:

    #include <time.h>
    
    struct PID {
        float e;
        float e_max;
        float dt; 
        // ... 省略其余部分
    };
    
    void updatePID(struct PID * PID_pm) {
        // 获取当前时间
        time_t now = time(NULL);
    
        // 计算dt
        time_t dt = now - PID_pm->last_update_time;
    
        // 更新PID控制器的上次更新时间
        PID_pm->last_update_time = now;
    
        // 现在可以使用dt来更新PID控制器的状态
        PID_pm->Integ_e += limit_abs1f(PID_pm->e, PID_pm->e_max) * dt;
        // ... 省略其余部分
    }
    
    

    请注意上面的代码只是示例,并没有考虑错误检查或者其他可能的实现细节,并且在实际的代码中,你可能需要更精确的时间,可能需要使用比如gettimeofday等更精确的时间函数。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月29日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题