MSPM0G3507(三十六)——超声波PID控制小车固定距离

效果图:

波形图软件是VOFA,B站有教程 ,虽然有缺点但是非常简单。

视频效果:

PID控制距离

之前发过只有超声波测距的代码,MSPM0G3507(三十二)——超声波模块移植代码-CSDN博客

 SYSCFG配置:

 ultrasonic_two.c

#include "ti_msp_dl_config.h"
#include "Delay_two.h"
#include "motor_two.h"
int distance=0;
int overcount=0;      //记录定时器溢出次数  
int  Senor_Using();
extern int MOTO1,MOTO2;
int left_pwm=0;int right_pwm=0;
//PID控制距离      (速度环)             第二题的PID
int Senor_control_PID(int true_distance,int Target_distance)
{ 	float Position_KP=40,Position_KI=0.2,Position_KD=1.2;static float Bias,Pwm,Integral_bias,Last_Bias;Bias=Target_distance-true_distance;                                  //计算偏差Integral_bias+=Bias;	                                 //求出偏差的积分Pwm=-(Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias));       //位置式PID控制器Last_Bias=Bias;                                       //保存上一次偏差 return Pwm;                                           //增量输出}void Senor_control()
{distance=Senor_Using();left_pwm= Senor_control_PID(distance,15);;right_pwm= Senor_control_PID(distance,15);;
MOTO1=left_pwm;
MOTO2= right_pwm;Limit(&MOTO1,&MOTO2);	//速度限幅Load(MOTO1,MOTO2);		 //加载到电机上。}//测距函数
int  Senor_Using() 
{unsigned int sum=0;unsigned int tim;unsigned int i=0;unsigned int length;int cnt_i=0;while(i!=3)        {DL_GPIO_setPins( ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN );                     //TRIG=1;              //给发送端高电平delay_us(20);    DL_GPIO_clearPins(ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN );               //TRIG=0;              //给发送端低电平cnt_i=0;//DL_GPIO_readPins(xunji_PORT_PIN1_PORT                 , xunji_PORT_PIN1_PIN       )==xunji_PORT_PIN1_PINwhile(DL_GPIO_readPins(ultrasonic_Port_PORT,ultrasonic_Port_MCHO_Pin_PIN)!=ultrasonic_Port_MCHO_Pin_PIN)    //当接收端为0,一直循环      while(ECHO==0){cnt_i++;delay_us(1);if(cnt_i>300){	DL_GPIO_setPins( ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN );        // TRIG=1;        发送端给高电平  delay_us(20);DL_GPIO_clearPins(ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN );                //TRIG=0;    发送端给低电平cnt_i=0;          }} //跳出循环说明已经接收到信号,开启定时器记录时间DL_Timer_startCounter(TIMER_ultrasonic_INST    );     //  TIM_Cmd(TIM3,ENABLE);      使能定时器                                         i+=1;                     while(DL_GPIO_readPins(ultrasonic_Port_PORT,ultrasonic_Port_MCHO_Pin_PIN)==ultrasonic_Port_MCHO_Pin_PIN)	          //这里是知道信号结束,等待定时器计时      while(ECHO==1);	     {}DL_Timer_stopCounter(TIMER_ultrasonic_INST) ;                  //TIM_Cmd(TIM3,DISABLE);         失能定时器                     tim=DL_Timer_getTimerCount(TIMER_ultrasonic_INST) ;                  //tim=TIM_GetCounter(TIM3);         得到时计单元个数length=(tim*100)/58.0;                                               //微秒计算法求距离sum=length+sum;DL_Timer_setTimerCount(TIMER_ultrasonic_INST,0) ;                          //TIM3->CNT=0;     将计数值清零overcount=0;                                        //一般来说没有超过一个定时器周期该值不需要调用,一直给0即可//delay_ms(10);}length=sum/3;                                           //三次作为平均值return length; 
}//测距定时器中断服务函数
void TIMER_ultrasonic_INST_IRQHandler (void)
{switch (DL_TimerA_getPendingInterrupt(TIMER_ultrasonic_INST)){case DL_TIMER_IIDX_ZERO:overcount++;break;default:break;}}

ultrasonic_two.h

#ifndef __ultrasonic_two_H
#define	__ultrasonic_two_H#include "ti_msp_dl_config.h"int Senor_Using() ;
void TIMER_ultrasonic_INST_IRQHandler (void);
int Senor_control_PID(int true_distance,int Target_distance);
void Senor_control();#endif

主函数中while循环调用  Senor_control();即可

这里只列出了超声波的所有代码

有些函数没有列出来,大家可以自己给他加上去,就是驱动电机的程序,非常简单。比如limit和load 一个是速度限幅一个是给电机加载PWM,每个人有每个人的写法,实在不会在评论区回复就行。

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

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

相关文章

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,实现企业的数字化转型和业务流程优化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口处存在FastJson反序列…

开源PHP论坛HadSky本地部署与配置公网地址实现远程访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置)2.4 公网访问测试 总结 前言 今天和大家分享…

idea启动ssm项目详细教程

前言 今天碰到一个ssm的上古项目,项目没有使用内置的tomcat作为服务器容器,这个时候就需要自己单独设置tomcat容器。这让我想起了我刚入行时被外置tomcat配置支配的恐惧。现在我打算记录一下配置的过程,希望对后面的小伙伴有所帮助吧。 要求…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案,新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后,可不设置系统变量java_home,仅在id…

开发技术-Java BigDecimal 精度丢失问题

文章目录 1. 背景2. 方法3. 总结 1. 背景 昨天和小伙伴排查一个问题时,发现一个 BigDecimal 精度丢失的问题,即 double a 1.1;BigDecimal ba new BigDecimal(a).subtract(new BigDecimal(0.1));System.out.println(ba);输出: 1.000000000…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

快速使用BRTR公式出具的大模型Prompt提示语

Role:文章模仿大师 Background: 你是一位文章模仿大师&#xff0c;擅长分析文章风格并进行模仿创作。老板常让你学习他人文章后进行模仿创作。 Attention: 请专注在文章模仿任务上&#xff0c;提供高质量的输出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

半边数据结构学习

半边数据结构学习 一、网格数据结构二、半边数据结构顶点(Vertex)半边(HalfEdge)面片(Face) 三、OpenMesh 相关代码拓扑关联对象遍历 四、OpenFilpper 相关代码HoleInfo类孔洞检测孔洞信息HoleFiller类孔洞补全 一、网格数据结构 对于表面网络来说&#xff0c;其关键在于拓扑&…

【MySQL系列】VARCHAR的底层存储

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python-亲和数(赛氪OJ)

[题目描述] 古希腊数学家毕达哥拉斯在自然数研究中发现&#xff0c;220 的所有真约数(即不是自身的约数)之和为&#xff1a; 1245101120224455110&#xff1d;284 。 而 284 的所有真约为 1 、 2 、 4 、 71 、 142 &#xff0c;加起来恰好为 220 。人们对这样的数感到很惊奇&a…

如何搞定美国TikTok直播网络?

在全球范围内&#xff0c;TikTok已经积累了超过30亿次的下载量&#xff0c;月活跃用户达到13亿以上&#xff0c;支持75种语言&#xff0c;覆盖了150多个国家和地区。这一庞大的流量池吸引了众多国内电商人尝试在TikTok上进行业务拓展。本文将探讨如果要在美国运营TikTok直播&am…

MySql性能调优03-[SQL优化]

SQL优化 MySQL优化SQL优化-不要写select *SQL优化-小表驱动大表&#xff0c;而不是大表驱动小表SQL优化-连接查询代替子查询SQL优化-提升group by的效率SQL优化-使用limitSQL优化-union all代替unionSQL优化-join的表不宜过多 MySQL优化 trace工具 set session optimizer_trac…

Kithara与OpenCV (一)

Kithara使用 OpenCV 库 目录 Kithara使用 OpenCV 库简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 Ope…

数字化打造行业生态产业链,企业新增益全知道

在当今数字化时代&#xff0c;利用数字化打造行业生态产业链成为企业发展的重要战略选择。那么&#xff0c;这一举措究竟能为企业带来哪些新增益呢&#xff1f;让我们一探究竟。 一、运营效率大幅提高 数字化技术就像一条神奇的纽带&#xff0c;将产业链上的各个环节紧紧相…

Python函数 之 匿名函数

1.概念 匿名函数: 使用 lambda 关键字 定义的表达式&#xff0c;称为匿名函数. 2.语法 lambda 参数, 参数: 一行代码 # 只能实现简单的功能&#xff0c;只能写一行代码 # 匿名函数 一般不直接调用&#xff0c;作为函数的参数使用的 3.代码 4.练习 # 1, 定义匿名函数, 参数…

32路串口服务器 应用领域

32路串口服务器在多个领域有着广泛的应用&#xff0c;以下是详细的应用实例&#xff1a; 一、工业自动化 在工业自动化领域&#xff0c;32路串口服务器发挥着举足轻重的作用。传统的工业设备往往采用串口通信方式&#xff0c;而串口服务器能够将这些设备接入网络&#xff0c;…

集训 Day 3 总结 虚树 + dfs tree + 基环树

虚树 虚树&#xff0c;顾名思义是 只关注原树上的某些 关键点&#xff0c;在保留原树祖孙关系的前提下建出的一棵边数、点数大大减少的树 适用于优化某些在整棵树上进行 d p dp dp、 d f s dfs dfs 的问题 通常是题目中出现多次询问&#xff0c;每次给出树上的一些关键点&a…

人为因素:为什么网络安全不仅仅关乎技术

关注公众号网络研究观获取更多最新内容。 我们生活在一个生活与技术日益紧密交织的世界。但在构建防火墙和安装防病毒软件时&#xff0c;我们常常会忘记一个关键因素&#xff1a;人的行为。 网络犯罪分子正是利用了人为因素&#xff0c;利用巧妙的心理战术绕过最强大的安全措…

【MySQL基础篇】事务

事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 典型事例&#xff1a;银行转账操作 假设张三向李四进行转账…

防火墙NAT、智能选路综合实验

一、实验拓扑 二、实验要求 1&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3&#xff0c;多出口环境基于带宽比例…