博客
关于我
[转]PID算法与直流电机的PWM技术控制()
阅读量:222 次
发布时间:2019-03-01

本文共 1733 字,大约阅读时间需要 5 分钟。

PID控制算法与直流电机的PWM控制

PID控制算法是工业控制领域使用最广泛的算法之一,而嵌入式系统是实现智能控制的最常见手段。在本文中,我们将通过一个实际案例——使用单片机控制两个带编码器的直流电机,使二者转速保持一致——来详细讲解PID算法与直流电机的PWM技术控制。

PID控制算法的基本原理

PID控制算法由三个环节组成:比例、积分和微分控制。其基本工作原理如下:

  • 比例环节:根据系统的偏差e(t)立即产生控制输出,控制效果与偏差成正比。
  • 积分环节:对系统的历史误差进行记忆,消除静差,提高系统的无差度。积分时间常数Ti决定了积分环节的强度。
  • 微分环节:对偏差的变化率进行响应,能够快速调整系统输出,减小调节时间。
  • PID控制器的三个参数Kp、Ki、Kd需要通过实际调试确定。通常情况下,Kp > Kd,Ki的大小根据具体需求调整。参数的确定需要结合实际控制需求和系统输出情况进行优化。

    直流电机控制与编码器反馈

    在本文中,我们使用带编码器的直流减速电机。编码器的作用是将电机的角位移或角速度信号转换为电脉冲信号,通过检测脉冲信号的频率可以准确获取电机的转速。

    直流电机的控制主要通过PWM技术实现。PWM控制的核心是调节占空比,从而改变电机两端电压,进而控制电机转速。控制系统的结构图如上图所示。

    程序实现步骤

    1. 系统初始化

    • 配置全局变量和外设:完成PID参数、定时器、串口等外设的初始化。
    • 初始化延时功能、PWM、编码器以及中断管理。

    2. PID参数设置

    通过串口接收命令,用户可以实时调整PID参数。参数调整的具体实现如下:

    do {
    switch(go) {
    case 'P': mts.Kp += val; go = 0; break;
    case 'I': mts.Ki += val; go = 0; break;
    case 'D': mts.Kd += val; go = 0; break;
    case 'p': mts.Kp -= val; go = 0; break;
    case 'i': mts.Ki -= val; go = 0; break;
    case 'd': mts.Kd -= val; go = 0; break;
    default: break;
    }
    delay_ms(10);
    } while(go != '0');

    3. 主控制循环

    在循环体中,实现PID控制算法的核心逻辑,包括计算控制输出并发送数据。

    while(1) {
    detPID_PWM_out(); //计算控制输出
    if(sendFlag) {
    send_intData(mts.detPWM_out); //发送数据
    sendFlag = 0;
    }
    TIM_SetCompare1(TIM5, BASE_SPEED - mts.detPWM_out); //控制电机转速
    TIM_SetCompare2(TIM5, BASE_SPEED + mts.detPWM_out); //控制电机转速
    TIM_SetCompare3(TIM5, 0); //通道3、4为0
    TIM_SetCompare4(TIM5, 0); //通道3、4为0
    }

    4. 中断处理

    • 串口中断:用于接收上位机的命令和数据,实现PID参数的实时调整。
    • 定时器中断:用于采集编码器反馈信号,计算偏差值,并触发PID控制算法。

    总结

    本文通过一个实际案例,详细介绍了PID控制算法的基本原理及其在直流电机控制中的应用。PID控制算法的核心在于参数的确定和调节,而直流电机的控制则主要依赖于PWM技术。通过本文的实现,可以清晰地看到PID算法的优势以及其在嵌入式系统中的实际应用价值。

    如果对PID控制算法的改进方法或其他控制算法感兴趣,可以关注公众号“24K纯学渣”,回复关键词“PID电机控制”即可获取相关资源。如有任何疑问或建议,欢迎在评论区留言交流。

    转载地址:http://prwv.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现图层混合算法(附完整源码)
    查看>>
    Objective-C实现图层混合算法(附完整源码)
    查看>>
    Objective-C实现图形着色算法(附完整源码)
    查看>>
    Objective-C实现图片dilation operation扩张操作算法(附完整源码)
    查看>>
    Objective-C实现图片erosion operation侵蚀操作算法(附完整源码)
    查看>>
    Objective-C实现图片格式转换(附完整源码)
    查看>>
    Objective-C实现图片的放大缩小(附完整源码)
    查看>>
    Objective-C实现图片腐蚀(附完整源码)
    查看>>
    Objective-C实现图片膨胀(附完整源码)
    查看>>
    Objective-C实现图片转化为 ASCII图(附完整源码)
    查看>>
    Objective-C实现图的拓扑序列(附完整源码)
    查看>>
    Objective-C实现图的邻接矩阵(附完整源码)
    查看>>
    Objective-C实现图结构(附完整源码)
    查看>>
    Objective-C实现圆球的表面积和体积(附完整源码)
    查看>>
    Objective-C实现在list中找到next greatest element下一个更大元素算法(附完整源码)
    查看>>
    Objective-C实现在Regex的帮助下检查字谜算法(附完整源码)
    查看>>
    Objective-C实现在指定区间 [a, b] 中找到函数的实根,其中 f(a)*f(b) < 0算法(附完整源码)
    查看>>
    Objective-C实现均值滤波(附完整源码)
    查看>>
    Objective-C实现埃拉托斯特尼筛法算法(附完整源码)
    查看>>
    Objective-C实现埃拉托色尼筛法(附完整源码)
    查看>>