Arduino UNO R3自学笔记21 之 Arduino电机的闭环控制

news2024/11/28 0:53:52

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。

前言:上篇写了电机速度测定,这篇主要是讲测定出的速度用于反馈,使得实际速度快速响应到需要的速度。

1.控制系统介绍

分2大类:开环控制系统和闭环控制系统。

         一般来说,开环控制构比较简单,成本较低。开环控制系统的缺点是控制精度不高,抑制干扰能力差,而且对系统参数变化比较敏感。

        闭环控制系统是指: 把控制系统输出量的一部分或全部,通过一定方法和装置反送回系统的输入端,然后将反馈信息与原输入信息进行比较,再将比较的结果施加于系统进行控制,避免系统偏离预定目标。闭环控制系统利用的是负反馈。

2.电机的闭环控制

        闭环控制电机是通过在电机中加入传感器等反馈机制,实现精准控制的电机。在闭环控制电机中,电机控制器会根据反馈信号动态调整控制器的输出,从而使电机输出的运动轨迹精确达到预期目标。

        通常情况下,闭环控制电机会通过传感器等设备来获取电机的位置、速度等参数信息,并将这些信息传回电机控制器进行处理。控制器根据反馈信息对电机进行控制,从而精确调节电机的转速、转角等参数,实现精准控制。

3.电机闭环控制的优点

相比于开环控制电机,闭环控制电机具有以下优点:

        ● 精准控制:闭环控制电机可以在不同负载、温度等环境下精确控制转速、转角等参数,从而实现精准的定位、速度调节等功能。

        ● 响应速度快:由于具备反馈机制,闭环控制电机能够快速检测电机的运动状态,从而能够更快速地调整电机控制器的输出,实现快速响应。

        ● 稳定性高:闭环控制电机能够根据反馈信息调整输出,提高电机的稳定性,确保输出质量。

4.搭建电路

5.测试代码

注:以下代码pid值只测试用了一下,没有做调参。

#include<MsTimer2.h>

#define moto_in1 7
#define moto_in2 8
#define moto_pwm 9

#define moto_num1 2
#define moto_num2 3
int interrupt_time = 40;

//计数
float num1=0;
float num2=0;
bool num_over_flag=0;
void speed_c1();
void speed_c2();
void int_time();

//pid
float sumerror;
float lasterror;
float nowerror;
void pid(float real_value);

float set_value=150;
float output_value = 0;
float speed_real=0;
double kp = 10, //0.7
             ki = 0.01,  //0.13
             kd = 0.1;  //0.01

void setup()
 { // put your setup code here, to run once:
    Serial.begin(9600);
	pinMode(moto_in1,OUTPUT);
	pinMode(moto_in2,OUTPUT);
	pinMode(moto_pwm,OUTPUT);
	pinMode(moto_num1,INPUT);
	pinMode(moto_num2,INPUT);
    noInterrupts();
    attachInterrupt( 0,speed_c1,CHANGE );
    attachInterrupt( 1,speed_c2,CHANGE);
    MsTimer2::set(interrupt_time,int_time);   
    MsTimer2::start(); 
    interrupts();//开所有中断,准备进入程序运行模式
 }

void loop()
 { // put your main code here, to run repeatedly:
 
   digitalWrite(moto_in1,HIGH);
   digitalWrite(moto_in2,LOW);

 }

void speed_c1()
{
  num1++;
}
void speed_c2()
{
  num2++;
}
void int_time()
{
  speed_real = (num1+num2)/(1200*0.04)*60;
  pid(speed_real);
  if(output_value>255)output_value=255;
  else if(output_value<-255)output_value=-255;
  analogWrite(moto_pwm,output_value);
 Serial.print(speed_real); Serial.print("       ");
 Serial.print(set_value); Serial.println("        ");
 //Serial.print(output_value); Serial.println("   ");

 num1=0;
 num2=0;
}

void pid(float real_value) 
{
  // put your main code here, to run repeatedly:
  float output_err;
  nowerror = set_value - real_value;
  sumerror += nowerror; 
  output_err = kp*nowerror + ki*sumerror + kd*(lasterror - nowerror);
  lasterror = nowerror;
  output_value= real_value+output_err;
}

6.测试视频

PID仿真调试

仿真工程链接:Arduino UNO R3 proteus 电机PID参数整定工程文件(含驱动代码)

上一篇:Arduino UNO R3自学笔记20 之 Arduino如何测定电机速度?

下一篇:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192532.html

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

相关文章

ECML PKDD 2024 | 时空数据(Spatial-Temporal)和时间序列(Time series)论文总结

ECML PKDD 2024于9月9号-9月13号在立陶宛维尔纽斯举行&#xff08;Vilnius&#xff09; 本文总结了ECML PKDD 2024有关时空数据&#xff08;spatial-temporal data&#xff09;的相关论文&#xff0c;主要包含交通预测&#xff0c;预训练&#xff0c;迁移学习等内容&#xff0…

latex本地运行(MiKTeX+VScode)-20241006

1、安装 LaTex 主流的分发版本应该就是 TeXLive 和 MikTeX 了,这里使用 MikTex(只有几百M)—— TeXLive 太大了、默认安装全部包,可选自选部分安装单实在有些许麻烦,MikTeX 则方便得多,需要的时候可以自动安装全部包 点击跳转到 MiKTeX 官网,直接下载即可:不用担心什…

jQuery——事件委托

1、事件委托(委派/代理): 将多个子元素的事件监听委托给父辈元素处理监听回调是加在了父辈元素上当操作任何一个子元素 时&#xff0c;事件会冒泡到父辈元素父辈元素不会直接处理事件&#xff0c;而是根据 event.target 得到发生事件的子元素&#xff0c;通过这个子元素调用事…

微信第三方开放平台接入本地消息事件接口报错问题java.security.InvalidKeyException: Illegal key size

先看报错&#xff1a; java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)at javax.crypto.Cipher.implInit(Cipher.java:805)at javax.crypto.Cipher.chooseProvider(Cipher.java:864)at javax.crypto.Cipher.in…

Spring MVC__@RequestMapping注解、获取请求参数、域对象共享数据、视图、Restful

目录 一、RequestMapping注解1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性&#xff08;了解&#xff09;6、RequestMapping注解的headers属性&#xff08;了解…

登 Nature 子刊!论文一作详解蛋白质语言模型的小样本学习方法,解决湿实验数据匮乏难题

在「Meet AI4S」系列直播第三期中&#xff0c;我们有幸邀请到了上海交通大学自然科学研究院 & 上海国家应用数学中心博士后周子宜&#xff0c; 他所在的上海交通大学洪亮课题组研究方向主要为 AI 蛋白和药物设计、分子生物物理。该课题组研究成果颇丰&#xff0c;截止目前共…

小程序图片资源等使用阿里服务链接更新问题

同名更换图片&#xff0c;小程序无需发版本更新&#xff0c;存在图片缓存问题解决方法 修改Cache-Control参数即可

一个真实可用的登录界面!

需要工具&#xff1a; MySQL数据库、vscode上的php插件PHP Server等 项目结构&#xff1a; login | --backend | --database.sql |--login.php |--welcome.php |--index.html |--script.js |--style.css 项目开展 index.html&#xff1a; 首先需要一个静态网页&#x…

双十一适合买什么东西?数码好物推荐指南!

​临近双十一&#xff0c;我猜很多朋友已经为双11做好了准备&#xff0c;打算开启买买买的节奏了&#xff01;都想着趁着双十一把平时因为价格太贵舍不得下单的东西彻底拿下&#xff01;作为一名数码博主&#xff0c;每年双11的时候都会疯狂囤很多物品&#xff0c;所以今天就跟…

创始人模式--格雷厄姆

以下是 Paul Graham 的文章《创始人模式》的翻译&#xff1a; 创始人模式 2024 年 9 月 上周在一个 Y Combinator 的活动中&#xff0c;Brian Chesky 做了一个演讲&#xff0c;在场的每个人都会记住。我之后与大多数创始人交谈时&#xff0c;他们都说这是他们听过的最好的演…

pytorch基础:模型的权值初始化与损失函数

文章目录 一、权值初始化1.2Kaiming初始化1.4 十种权重初始化方法 2.损失函数2.1损失函数初步介绍2.2交叉熵损失CrossEntropyLoss 2.3 剩余的17种损失函数介绍 一、权值初始化 在搭建好网络模型之后&#xff0c;一个重要的步骤就是对网络模型中的权值进行初始化。适当的权值初…

SpringBoot框架在明星周边销售网站中的应用

3系统分析 3.1可行性分析 通过对本星之语明星周边产品销售网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本星之语明星周边产品销售网站采用JAVA作为开发语…

国庆期间不停歇—学习ROS2第四天

1.现在终端中创建文件 其次在该文件目录下打开&#xff0c;最后在VS中 创建两个文件夹&#xff0c;最后一个是src 在终端中创建pkg&#xff0c; ros2 pkg create demo_python_topic --build-type ament_python --dependencies rclpy example_interfaces --license Apache-2.0…

[C#]使用纯opencvsharp部署yolov11-onnx图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 使用纯OpenCvSharp部署YOLOv11-ONNX图像分类模型是一项复杂的任务&#xff0c;但可以通过以下步骤实现&#xff1a; 准备环境&#xff1a;首先&#xff0c;确保开发环境已安装OpenCvSharp和必…

Spring14——案例:利用AOP环绕通知计算业务层接口执行效率

前面介绍了这么多种通知类型&#xff0c;具体该选哪一种呢? 我们可以通过一些案例加深下对通知类型的学习。 34-案例&#xff1a;利用AOP环绕通知计算业务层接口执行效率 需求分析 这个需求也比较简单&#xff0c;前面我们在介绍AOP的时候已经演示过: 需求:任意业务层接口…

链表--链表的一个技巧

少年的书桌上没有虚度的光阴 2024.10.5 大家好&#xff0c;我是小苏。 今天给大家分享一下近期我刷力扣链表题的一个技巧&#xff01; 我们知道&#xff0c;链表和数组的重要区别之一是&#xff1a; 链表不支持随机访问&#xff0c;数组支持 我们可以根据这一特性&#xff1a;把…

信息安全工程师(35)访问控制类型

前言 访问控制是几乎所有系统&#xff08;包括计算机系统和非计算机系统&#xff09;都需要用到的一种技术&#xff0c;它基于用户身份及其所归属的某项定义组来限制用户对某些信息项的访问&#xff0c;或限制对某些控制功能的使用。 一、自主访问控制&#xff08;DAC&#xff…

ElasticSearch备考 -- Search across cluster

一、题目 配置两个集群&#xff0c;集群名称为my-application-01、my-application-02&#xff0c;导入es自带Sample flight data数据集&#xff0c;配置扩集群检索&#xff0c;查询数据 二、思考 准备工作有两个集群&#xff0c;并需要对集群配置角色中增加 remote_cluster_cl…

物联网智能设备:未来生活的变革者

文章目录 引言什么是物联网智能设备&#xff1f;技术架构应用场景挑战与解决方案未来发展趋势结论 引言 随着科技的迅猛发展&#xff0c;物联网&#xff08;IoT&#xff09;正在改变我们生活的方方面面。从智能家居到工业自动化&#xff0c;物联网智能设备正在逐步融入我们的日…

AI应用的东风,奥特曼不想错过

文&#xff5c;魏琳华 编&#xff5c;王一粟 作为炙手可热的AI公司&#xff0c;Open AI又一次拿到了一轮足以令对手眼红的巨额融资。10月2日&#xff0c;Open AI宣布顺利完成66亿美元融资&#xff0c;补上了烧钱研发亏损的同时&#xff0c;还为下一轮竞争拿到了资金支持。 跻…