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

news2024/12/26 10:25:21

在这里插入图片描述

实验报告: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.coloradmin.cn/o/1905806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次酣畅淋漓的UDF提权(Linux)

外网打点就不放了&#xff0c;翻了一下具备suid权限的命令&#xff0c;没啥结果。 可疑的命令是/usr/lib/dbus-1.0/dbus-daemon-launch-helper但是没有找到用这个命令提权的资料。 弹shell后翻找一下源码&#xff0c;/app/api.py文件中链接了mysql&#xff0c;事出反常必有妖&…

水冷液冷负载系统的六种基本类型

您可以选择六种基本类型的冷却系统&#xff0c;以满足负载的冷却需求。每个人都有其优点和缺点。本文旨在识别不同类型的冷却系统并确定它们的优缺点&#xff0c;以便您可以根据自己的需求做出明智的选择。 液体冷却系统有六种基本类型&#xff1a; 1.液对液 2.闭环干燥系统…

【论文阅读】AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising

论文&#xff1a;2406.06911 (arxiv.org) 代码&#xff1a;czg1225/AsyncDiff: Official implementation of "AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising" (github.com) 简介 异步去噪并行化扩散模型。提出了一种新的扩散模型分布式加…

J024_打印电影的全部信息

一、需求描述 展示多部电影的信息。 电影信息包括&#xff1a;电影名称、电影得分、电影票价格。 二、代码实现 2.1 Movie类 package com.itheima.collection;public class Movie {//电影名称private String name;//电影得分private int score;//电影票价格private double…

前端面试题(CSS篇五)

一、设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别&#xff1f; 设备像素指的是物理像素&#xff0c;一般手机的分辨率指的就是设备像素&#xff0c;一个设备的设备像素是不可变的。 css像素和设备独立像素是等价的&#xff0c;不管在何种分辨率的设备上&#xff0c;…

LLaMA2模型开源商用:实力比肩ChatGPT,探索AI新高度

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介 论文 GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日&#xff1a;Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合&#xff0c;其规模从…

java中反射(Reflection)的4个作用

java中反射&#xff08;Reflection&#xff09;的4个作用 作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断任意一个类所具有的成员变量和方法作用4、在运行时调用任意一个对象的方法总结 &#x1f496;The Begin&#x1f496;…

shared_ptr 线程安全

为什么 shared_ptr 可以安全地在多个线程中共享&#xff1f; 循环引用 因为shared_ptr std::shared_ptr 的引用计数是线程安全的。这意味着你可以在多个线程中安全地拷贝、赋值和销毁 std::shared_ptr。然而&#xff0c;访问或修改 shared_ptr 所指向的对象时&#xff0c;需要…

SpringBoot彩蛋之定制启动画面

写在前面 在日常开发中&#xff0c;我们经常会看到各种各样的启动画面。例如以下几种 ① spring项目启动画面 ② mybatisplus启动画面 ③若依项目启动画面 还有很多各式各样好看的启动画面&#xff0c;那么怎么定制这些启动画面呢&#xff1f; 一、小试牛刀 ① 新建一个Spr…

聊聊数据库变更管控的白屏化

在前文中介绍了当涉及到数据库相关的变更如数据更新或者误删表等误操作时&#xff0c;通过延迟库或者闪回等功能来恢复业务&#xff0c;这些已经属于事后的故障处理了。当故障发生后&#xff0c;所要面临的是故障影响的不可控&#xff0c;所面临的损失也是不可预估的。就像最近…

【Excel】求和带文字的数据

目录标题 1. 给出样例2. CtrlE3. CtrlH → A替换为 → 全部替换 1. 给出样例 2. CtrlE 3. CtrlH → A替换为 → 全部替换

从零开始的python学习生活

pycharm部分好用快捷键 变量名的定义 与之前学习过的语言有所不同的是&#xff0c;python中变量名的定义更加的简洁 such as 整形。浮点型和字符串的定义 money50 haha13.14 gaga"hello"字符串的定义依然是需要加上引号&#xff0c;也不需要写&#xff1b;了 字符…

重温express

前言 很久之前囫囵吞枣的学过一点node&#xff0c;最近决定用nodevue写个博客项目&#xff0c;所以重新学习了express的相关内容。 初始搭建 创建项目 npm init给项目命名创建项目终端进入项目&#xff0c;安装express依赖&#xff0c;npm i expressjs文件中引入express使用…

「C++系列」C++ 常量知识点-细致讲解

文章目录 一、C 常量定义1. 使用#define预处理指令2. 使用const关键字3. 局部常量4. 全局常量5. 指针常量6. 枚举&#xff08;Enumerations&#xff09;7. constexpr&#xff08;C11及以后&#xff09; 二、C 整数常量1. 十进制整数常量2. 八进制整数常量3. 十六进制整数常量4.…

RAG理论:ES混合搜索BM25+kNN(cosine)以及归一化

接前一篇:RAG实践:ES混合搜索BM25+kNN(cosine) https://blog.csdn.net/Xin_101/article/details/140230948 本文主要讲解混合搜索相关理论以及计算推导过程, 包括BM25、kNN以及ES中使用混合搜索分数计算过程。 详细讲解: (1)ES中如何通过BM25计算关键词搜索分数; (2)…

Postman使用指南①网页版使用

postman官网地址&#xff1a;Postman API Platform 进入后点击右上角免费注册&#xff0c;注册后登录 登录之后即可在网页使用&#xff0c;无需下载

static的理论学习

在说到static之前&#xff0c;需要先明确变量类型&#xff1a; 而在聊到变量类型之前我们可以将变量的两个属性好好学一学 变量的两个属性 作用域&#xff08;scope&#xff09;&#xff1a; 从内存的角度来看&#xff0c;就是变量存放在栈&#xff08;stack&#xff09;中&…

最新版Python安装教程

一、安装Python 1.下载Python 访问Python官网&#xff1a; https:/www.oython.orgl 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS./Linux等) 选择下载最新稳定版本的Python 以下内容以演示安装Windows操作系统64位的python 左边是稳定发布版本Stabl…

6000字以上论文参考:基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

可参考&#xff1a;基于JavaSpringMvcVue技术的实验室管理系统设计与实现&#xff08;6000字以上论文参考&#xff09;-CSDN博客 论文参考&#xff1a;

算法day03 桶排序 数据结构分类 时间复杂度 异或运算

学数据结构之前 必看_哔哩哔哩_bilibili 1.认识复杂度和简单排序算法_哔哩哔哩_bilibili 桶排序&#xff08;Bucket sort&#xff09;------时间复杂度为O(n)的排序方法&#xff08;一&#xff09;_多桶排序时间复杂度-CSDN博客 桶排序 测试场景&#xff1a;数组中有10000个随…