【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.mfbz.cn/a/780401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter-实现悬浮分组列表

在本篇博客中&#xff0c;我们将介绍如何使用 Flutter 实现一个带有分组列表的应用程序。我们将通过 CustomScrollView 和 Sliver 组件来实现该功能。 需求 我们需要实现一个分组列表&#xff0c;分组包含固定的标题和若干个列表项。具体分组如下&#xff1a; 水果动物职业菜…

C++、QT

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 人事端&#xff1a; 1、【产品中心】产品案列、新闻动态的发布&#xff1b; 2、【员工管理】新增、修改、删除、搜索功能&#xff1b;合同以图片的方式上传 3、【考勤总览】根据日期显示所有员工上班、下班时间…

STMF4学习笔记RTC(天空星)

前言&#xff1a;本篇笔记参考嘉立创文档&#xff0c;连接放在最后 #RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟&#xff0c;是单片机片内外设的一种&#xff0c;作用于提供准确的时间还有日期&#xff0c;这个外设有独立的电源&#xff0c;当单片机停止供电…

入门PHP就来我这(高级)11 ~ MySQL

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP操作MySQL数据库的方法 PHP操作数据库现在用的多的是mysqli拓展库&#xff0c;mysqli扩…

用HttpURLConnection复现http响应码405

目录 使用GET方法&#xff0c;访问GET接口&#xff0c;服务端返回405使用GET方法&#xff0c;访问POST接口&#xff0c;服务端返回405使用POST方法&#xff0c;访问GET接口&#xff0c;服务端返回405 使用GET方法&#xff0c;访问GET接口&#xff0c;服务端返回405 发生场景&a…

SSRF靶场通关合集

目录 前言 SSRF总结 1.pikachu 1.1SSRF(curl) 1.1.1http协议 1.1.2 file协议查看本地文件 1.1.3 dict协议扫描内网主机开放端口 1.2 SSRF&#xff08;file_get_content&#xff09; 1.2.1 file读取本地文件 1.2.2 php://filter/读php源代码 2.DoraBox靶场 前言 最近…

C++第一弹 -- C++基础语法上(命名空间 输入输出 缺省参数 函数重载 引用)

目录 前言一. C关键字(C98)二. 命名空间1.命名空间的定义2.命名空间的使用3.其它部分 三. C输入&输出四. 缺省参数1. 缺省参数的概念2.缺省参数的分类 五. 函数重载1.函数重载的概念2. 为什么C支持函数重载, 而C语言不支持重载呢? 六. 引用1.引用的概念2.引用的特性3.常引…

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite &#xff1f;二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了&#xff0c; Version 3.46.0 SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…

数学建模算法目标规划

在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支—数学规划&#xff0c;而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。特别是在计算机能处理成千上万个…

第二届网络、通信与智能计算国际会议(NCIC 2024)

随着科技的飞速发展&#xff0c;网络通信与智能计算领域正迎来前所未有的变革。在这样的背景下&#xff0c;网络、通信与智能计算国际会议&#xff08;NCIC 2024&#xff09;将于2024年11月22日至25日在中国北京隆重召开。本次大会汇聚了国际学术界的顶尖专家和行业精英&#x…

目标检测算法简述

招聘信息共享社群https://bbs.csdn.net/forums/f6512aad40c7444c8252754ce2dbb427 目标检测算法是一种计算机视觉技术&#xff0c;用于识别图像或视频中的特定对象&#xff0c;并确定这些对象在场景中的精确位置。这些算法通常结合了分类和定位的功能&#xff0c;能够输出每个…

算法系列--分治排序|归并排序|逆序对的求解

一.基本概念与实现 归并排序(mergeSort)也是基于分治思想的一种排序方式,思路如下: 分解:根据中间下标mid将数组分解为两部分解决:不断执行上述分解过程,当分解到只有一个元素时,停止分解,此时就是有序的合并:合并两个有序的子区间,所有子区间合并的结果就是原问题的解 归并…

ESP32 蓝牙网关实践:BLE 设备数据采集与 MQTT 云平台发布(附代码示例)

摘要: 本文详细介绍了如何使用 ESP32 构建强大的蓝牙网关&#xff0c;实现蓝牙设备与 Wi-Fi/互联网之间的无缝连接和数据桥接。文章涵盖了连接和桥接功能、数据处理和分析能力&#xff0c;并提供了详细的代码示例和 Mermaid 生成的图表&#xff0c;助您轻松构建自己的蓝牙网关解…

SCI一区TOP|准随机分形搜索算法(QRFS)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;LA Beltran受到分形几何、低差异序列启发&#xff0c;提出了准随机分形搜索算法&#xff08;Quasi-random Fractal Search, QRFS&#xff09;。 2.算法原理 2.1算法思…

【Python】搭建属于自己 AI 机器人

目录 前言 1 准备工作 1.1 环境搭建 1.2 获取 API KEY 2 写代码 2.1 引用库 2.2 创建用户 2.3 创建对话 2.4 输出内容 2.5 调试 2.6 全部代码 2.7 简短的总结 3 优化代码 3.1 规范代码 3.1.1 引用库 3.1.2 创建提示词 3.1.3 创建模型 3.1.4 规范输出&#xf…

SQL面试题-留存率计算

表定义&#xff1a; create table if not exists liuliang_detail (user_id string comment ,record_time string comment yyyymmdd hh:mi:ss ) comment 流量明细表 ; 方法一&#xff1a; 计算的是整段时间范围内&#xff0c;每一天为基准的所有的留存1、2、7天的用户数。 …

cs231n作业2 双层神经网络

双层神经网络 我们选用ReLU函数和softmax函数&#xff1a; 步骤&#xff1a; 1、LOSS损失函数&#xff08;前向传播&#xff09;与梯度&#xff08;后向传播&#xff09;计算 Forward: 计算score&#xff0c;再根据score计算loss Backward&#xff1a;分别对W2、b2、W1、b1求…

使用Charles mock服务端响应数据

背景 服务端未提供接口/服务端接口返回结果有逻辑限制&#xff08;次数限制&#xff09;&#xff0c;不能通过原始接口返回多次模拟预期的返回结果&#xff0c;例如边界值情况 客户端受到接口响应数据的限制&#xff0c;无法继续开发或测试&#xff0c;会极大影响开发测试效率…

Unity入门之重要组件和API(3) : Transform

前言 Transform类主要处理游戏对象(GameObject)的位移、旋转、缩放、父子关系和坐标转换。 1.位置和位移 1.1必备知识点&#xff1a;Vector3 Vector3 主要用来表示三维坐标系中的一个点或者一个向量。 【声明】 Vector3 v1 new Vector3(); Vector3 v2 new Vector3(10, 10…

谷粒商城----通过缓存和分布式锁获取数据。

高并发下缓存失效的问题 高并发下缓存失效的问题--缓存穿透 指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数据库也无此记录&#xff0c;我们没有将这次查询的不写入缓存&#xff0c;这将导致这个不存在的数据每次请求…