当前位置: 首页 > news >正文

【TB作品】51单片机 Proteus仿真 00001仿真实物PID电机调速系统

在这里插入图片描述

实验报告:Proteus 仿真 PID 电机调速系统

一、实验背景

PID(比例-积分-微分)控制器广泛应用于工业控制系统中,用于调节各种物理变量。本实验的目的是通过 Proteus 仿真软件设计并实现一个 PID 电机调速系统,以控制直流电机的转速,使其能够按照设定的目标转速稳定运行。

二、器件与硬件介绍

  1. 微控制器:选用 51 系列单片机(如 AT89S51)作为控制核心。
  2. 直流电机:用于演示 PID 控制效果。
  3. 编码器:用于测量电机的实际转速。
  4. LCD 显示屏:用于显示目标转速和实际转速。
  5. 按键:用于增减目标转速。
  6. PWM(脉宽调制)模块:用于控制电机的转速。

三、系统设计原理

PID 控制器通过比较目标值和实际值的差异(误差),通过比例、积分和微分三个环节计算出控制量,用于调整系统输出,使误差趋于零。

  • 比例(P):与当前误差成正比。
  • 积分(I):与误差的累计值成正比。
  • 微分(D):与误差的变化率成正比。

四、电路原理

系统主要由单片机、电机、编码器、LCD 显示屏和控制按键组成。电机的转速通过编码器反馈到单片机,单片机通过 PID 算法计算出合适的 PWM 信号,控制电机的转速。

电路连接如下:

  1. 电机与 PWM 控制模块相连,PWM 信号控制电机的转速。
  2. 编码器连接到单片机的外部中断口,用于测量电机转速。
  3. LCD 显示屏连接到单片机的 I/O 口,用于显示目标和实际转速。
  4. 增加和减少目标转速的按键连接到单片机的 I/O 口。

五、程序原理

程序主要包括初始化、主循环和中断处理三部分。

1. 初始化
void SystemInit()
{TMOD=0X21;    // Timer 0 和 Timer 1 初始化TH0=THC0;TL0=TLC0;TH1=0xC0;TL1=0XC0;ET1=1;ET0=1;TR0=1;TR1=1;EX0=1;     // 中断 0 用来测量转速IT0=1;EA=1;e =0;e1=0;e2=0;
}
2. 主循环

主循环不断检查按键状态,更新目标转速,并调用 LCD 显示目标和实际转速。

void main()
{SystemInit();init();LCD_Write_String(0,0,aa);zs=1;while(1){SetSpeed();if(zs==1){zs=0;cc[7]=num/1000+'0';cc[8]=num/100%10+'0';cc[9]=num/10%10+'0';cc[10]=num%10+'0';LCD_Write_String(0,1,cc);}}
}
3. 中断处理

外部中断用于测量电机转速,定时器中断用于产生 PWM 信号和执行 PID 控制算法。

void int0() interrupt 0
{Inpluse++;
}void t0() interrupt 1
{static unsigned int time=0;TH0=THC0;TL0=TLC0;time++;  // 转速测量周期if(time>500){zs=1;time=0;num=Inpluse;Inpluse=0;PIDControl();}PWMOUT();
}void timer_1()  interrupt 3
{cnt++;
}

六、PID 算法实现

PID 算法根据当前误差计算控制输出,调整 PWM 信号的占空比。

void PIDControl()
{e=SpeedSet-num;duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2));  uk=uk1+duk;out=(int)uk;if(out>1000){out=1000;}else if(out<0){out=0;}uk1=uk;e2=e1;e1=e;PWMTime=out;
}

七、实验结果

通过调整目标转速,观察电机实际转速的变化。PID 控制器能够快速响应并稳定在设定的目标转速上,验证了 PID 控制算法的有效性。

八、总结

本实验通过 Proteus 仿真平台,设计并实现了一个基于 PID 控制的电机调速系统。实验结果表明,PID 控制算法能够有效调节电机转速,使其快速稳定在目标值上,为实际应用提供了参考依据。

资源代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/393776.html

相关文章:

  • 【LInux】从动态库的加载深入理解页表机制
  • IDEA与通义灵码的智能编程之旅
  • 多表查询sql
  • 移动端UI风格营造舒适氛围
  • 摸鱼大数据——Spark SQL——DataFrame详解一
  • 【Java探索之旅】初识多态_概念_实现条件
  • [Day 26] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 算法 —— 滑动窗口
  • 【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
  • Linux之计划和日志
  • C++ 多态篇
  • 【LVGL-SquareLine Studio】
  • mysqli 与mysql 区别和联系, 举例说明
  • 【SpringCloud应用框架】Nacos安装和服务提供者注册
  • 英语学习交流小程序的设计
  • 实现Java多线程中的线程间通信
  • C++模板元编程(一)——可变参数模板
  • kafka中
  • Android 获取当前电池状态
  • 【JVM 的内存模型】
  • 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01—短信/邮件/异常/MD5
  • geom buffer制作
  • 微软正在放弃React
  • U盘非安全退出后的格式化危机与高效恢复策略
  • 安卓虚拟位置修改
  • 大数据面试题之Presto[Trino](5)
  • 对编程开发人员在今年的一些建议
  • VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono
  • SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API
  • 第1集《修习止观坐禅法要》