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

本文共 1712 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    openfire开发(四)消息拦截器
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>
    Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
    查看>>
    OpenForest 开源项目安装与使用指南
    查看>>
    OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
    查看>>
    opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
    查看>>
    OpenGL 的内置矩阵种种
    查看>>
    OpenGL/OpenGL ES 入门:基础变换 - 初识向量/矩阵
    查看>>
    OpenGL中shader读取实现
    查看>>
    OpenGL中旋转平移缩放等变换的顺序对模型的影响
    查看>>
    Opengl中的gluProject函数认识
    查看>>
    OpenGl介绍
    查看>>
    OPENGL半透明图像产生黑色光环
    查看>>
    OpenGL和图形卡
    查看>>
    OpenGL字体绘制
    查看>>
    OpenGL学习
    查看>>
    openGL学习步骤
    查看>>
    OpenGL的基本概念介绍
    查看>>
    OpenGL着色器、纹理开发案例
    查看>>
    OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))
    查看>>