灰度PID

文章目录

  • 灰度PID
  • 一、灰度传感器背景
  • 二、原理介绍
  • 三、通信协议
  • 四、传感器的调试方法

一、灰度传感器背景

世界正处在科技革命和产业革命的交汇点上,科学技术在广泛交叉和深度融合中不断创新,以信息、生命、纳米、材料等科技为基础的系统集成创新,以前所未有的力量驱动着经济社会发展。而且,随着信息化、工业化不断融合,以机器人科技为代表的智能产业蓬勃兴起,成为现代科技创新的一个重要标志。机器人运行时需要不断地循迹,即需要借助传感器探测地面色调迥异的两种色彩以修正其运动轨迹。目前,市场上广泛使用的传感器有颜色传感器、光敏电阻灰度传感器和激光传感器,其中,颜色传感器容易受外界光线影响,需要在黑暗环境下使用,而且颜色传感器获得的信号是反应 RGB 三色的复杂数据信号,因此,颜色传感器的通信过程非常复杂,更重要的是价格昂贵。光敏电阻灰度传感器同样易受外界光源的干扰,而且稳定性差,采集的灰度对比值偏差较大,机器人循迹时容易出错。由于激光传感器的接收器是接收激光的散射光,当多个激光传感器在同一空间循迹时,激光传感器会相互干扰,导致机器人循迹失败。

二、原理介绍

灰度传感器有数字传感器和模拟传感器两种,其原理大致相同。原理:一只发光二极管和一只光敏二极管,安装在同一面上。灰度传感器利用不同颜色的检测面对光的反射程度不同的原理进行颜色深浅检测。在有效的检测距离内(理论上距离可以无限远,实际受外界光源的影响,最佳距离为 15mm 至 50mm,如果距离过高的话,需要进行遮光),发光二极管发出的光,照射在检测面上,检测面反射部分光线,光敏二极管检测此光线的强度并将其转换为单片机可以识别的电信号。这个电信号是一个模拟值,单片机可以根据模拟值的大小进行二值化处理,也就是给一个电平分界线,当电压大于一个值的时候给一个高电平(或低电平),当电压小于一个值的时候给一个低电平(或高电平)。当然这里可以用电压比较器作为电平的参考电压。这就是我们用的数字量灰度传感器。数字量的灰度传感器如果加入的是单片机处理数据,那么可以把得到的原始数据加入滤波算法、数据混合算法得到一个波动小、适应环境强的数字传感器。如果对采集的原始的数据不做处理,那么就是模拟值输出。也就是我们的模拟量灰度传感器。因为每路传感器相互之间都是有误差的,所以同样的条件下模拟值肯定不是一样。在数字量和模拟量外,我们又创新出一种新的数据形式——偏移量。偏移量又称误差,所谓的偏移量就是输出传感器在循线所处的位置的值。其实偏移量是源自我们经常用到的PID 算法,P 值是误差值的系数,I 值是误差值的积分系数,D 是误差值的微分系数。所以 PID实际就是对误差的处理,我们通过单片机把这种误差通过运算直接可以通过串口输出,省去了我们测量模拟值然后再进行误差计算的过程。我们可以把得到的偏移量直接用于 PID 算法,PID 算法和速度结合,也就成了 PID 循线。如果要减小外界光线对数据的影响,可以传感器上加遮光罩。

三、通信协议

要想得到偏移量就必须使用串口传输的形式

下面来看偏移量是如何采集的


可以看到数据示例

下面看pid的代码

/*************************************
*函数名称:track_PID
*函数功能:直线循迹,用串口线连接,只输出偏移值
*参数:pwm:最大速度值,P:比例系数
*说明:根据位置式离散PID公式
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差
e(k-1)代表上一次的偏差
∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
*
**************************************/
void track_PID(int pwm,float P)
{static float Integral_error,Last_error;u16 temp_data[2] = { 0 };       //数据缓存区int error = 0;         //偏差值int L_Pwm,R_Pwm;            //左右轮速度float I = 0,D = 0.8;       //积分系数,微分系数Read_Data(temp_data);if(temp_data[0]==0){error = -temp_data[1];}else{error = temp_data[1];}Integral_error += error;R_Pwm = (pwm-(error*P+Integral_error*I+(error-Last_error)*D));L_Pwm = (pwm+(error*P+Integral_error*I+(error-Last_error)*D));Last_error = error;if(pwm > 0){if(L_Pwm > (pwm+10))L_Pwm = (pwm+10);if(R_Pwm > (pwm+10))R_Pwm = (pwm+10);if(L_Pwm <= 15)L_Pwm = 15;if(R_Pwm <= 15)R_Pwm = 15;}Set_Pwm(R_Pwm,L_Pwm);printf("error=%d\r\n",error);printf("RPWM=%d\r\n",L_Pwm);printf("LPWM=%d\r\n",R_Pwm);
}

四、传感器的调试方法

STM32——灰度PID的使用相关推荐

  1. stm32直流电机PID控制hal库(Cubemx)

    stm32直流电机PID控制hal库(Cubemx),一步步手把手教你怎么配置cubemx怎么写代码. 未对pid就行深入解析,不过相信您通过配置和写代码以后大概可以知道pid的主要作用. 文章目录 ...

  2. STM32电机PID速度控制

    2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制.电机测速.本篇文章,将实现电机的速度闭环控制. 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM ...

  3. STM32的PID温控

    STM32的 PID和PWM墨水温度控制系统 控制方案: K_SENSOR热电偶作为温度传感器,50w电烙铁作为加温设备作为控制对象,预先设定一个温度值,微处理器为ARM公司Cortex-M3内核,S ...

  4. 【DIY】使用STM32及PID算法实现一个磁悬浮玩具

    今天教大家来做一个磁悬浮玩具,先上两张成品的效果图: 1)磁悬浮的基本原理 磁悬浮有下推式和上拉式两种基本形式. 所谓下推式,就是控制部分在底座上,悬浮的磁铁在上面,依靠底座从下往上的排斥磁力推动磁铁 ...

  5. STM32高级应用专题——基于STM32的PID温控器|PID控制算法详解|位置式PID|增量式PID

    一.位式控制算法 位式控制基本结构 位式控制基本结构图 Sv:用户设定的值 执行部件:一般是开关型的部件(比如说MOS管.继电器.可控硅之类的开关型的器件) 控制对象:加热器.步进电机.电磁阀 Pv: ...

  6. MySQL 8.0.16安装教程

    原 MySQL 8.0.16安装教程(windows 64位) 2018年08月15日 18:05:05 日日言谧 阅读数:140168 <span class="tags-box a ...

  7. 基于PID算法的STM32爬坡循迹智能小车的设计与实现

    目录 摘要 0 引言 1 需求分析 2 系统结构 3 硬件电路设计 3.1 整体硬件框架 3.2 主控制电路 3.3 电源模块 3.4 红外循迹 3.5 电机驱动 3.6 无线蓝牙控制 4 软件设计 ...

  8. stm32正交编码器 原理图_ROS机器人平台STM32底层控制部分

    2.6 ROS小车STM32底层控制代码 经过之前几篇文章,我相信大家一定对下面这些模块都已经有些了解了.今天,我们将编写ROS小车STM32单片机底层控制的最后一篇文章.我们将一起按照之前的软件流程 ...

  9. 学习笔记—增量式PID详细实现(C语言)

    增量式PID指数字控制器的输出只是控制量的增量∆uk.当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制. 1.公式推导: 增量式PID控制算法可以通过位置式 ...

最新文章

  1. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出
  2. windows下线程创建
  3. java延迟函数_Java 8:延迟计算
  4. java8 list 行转列_太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
  5. Codeforces-741A-Arpa's loud Owf and Mehrdad's evil plan(找有向图环及最大公倍数计算)
  6. Theano 中文文档 0.9 - 5.2 Mac OS安装说明
  7. 【Elasticsearch】如何设计可扩展的 Elasticsearch 数据存储的架构
  8. 走错路也要美美的!富有创意的404页面设计灵感
  9. JavaScript异步编程之事件
  10. dYdX 2020年度回顾:累计交易量增长40倍
  11. Android之SwipeRefreshLayout下拉刷新组件
  12. [渝粤教育] 中国地质大学 现代控制理论 复习题 (2)
  13. 正则学习之一:在js中使用正则表达式
  14. 中科院分区 计算机科学与技术专业就业前景,2020年中科院分区(升级版)最新数据分析...
  15. 光盘版的DOS启动盘
  16. 洛谷 字符串题单P1957:口算练习题
  17. c语言中 静态变量的默认值为,C中静态变量的默认值
  18. SAP 针对国家 country, 维护税码 tax code
  19. 关于树莓派(四):安装树莓派时遇见的错误
  20. VS Nuget的使用

热门文章

  1. PyQt5安装及使用教程
  2. python+pycharm+pyqt5安装教程
  3. UTC图表故事:美国消费者的耐用品开支将持续收紧
  4. 【调剂】杭州师范大学2023年硕士研究生预调剂公告
  5. Qt 控件填满布局
  6. html添加背景图片并且填满div,css background-size与背景图片填满div(示例代码)
  7. CPU和GPU主要区别:
  8. 分享软文要注意什么问题
  9. Android 系统编译之内核编译
  10. gitlab安装和基础管理