当前位置: 首页 > news >正文

STM32输出PWM波控制电机转速,红外循迹避障智能车+L298N的详细使用手册、接线方法及工作原理,有代码

智能循迹红外避障小车

本设计的完整的系统主要包括STM32单片机最小系统、L298n电机驱动,超声波 ,舵机 ,红外模块等。寻迹小车相信大家都已经耳熟能祥了。
我们在这里主要讲一下L298N驱动电机和单片机输出PWM控制电机转速。

本设计软件系统采用模块设计思想,采用C语言作为程序设计语言,通过KEI MDK完成程序设计,使用仿真器下载软件完成程序的烧录和在线调试。

1.采用C8T6开发板,这个板子我只能说性价比无敌。
在这里插入图片描述
STM32F103C8T6是一个中密度性能线,配有ARM Cortex-M3 32位微控制器,48路LQFP封装.它结合了高性能的RISC内核,运行频率可达72MHz,以及高速内嵌存储器,增强范围的强化输入/输出和外部连接至两个APB总线.STM32F103C8T6具有12位模数转换器,4个计时器,3个串口等等。
2.电机驱动模块,当时看有人用这个 我也买了。后来很多人反映以及我在使用过程中,发现L298N不算是那么好用。
在这里插入图片描述
L298N我也只是在这个简单的小车上用一下这个模块,做别的一般不推荐这个,推荐TB6612等。对于L298N的讲解此网站上有很多 我只能说讲的好的每一个,我初次找L298N的资料时,真的被搞的迷迷糊糊,怎么说的都有,服了。我再次为大家讲解明白。
L298N双通道输出,输出A与输出B
供电方式 :12V供电,左下角三个接口,最左边为12V输入,中间为GND引脚,右边是5v输出(要将上面跳线帽连接)
如果输入大于12v要将上面跳线帽拔掉!!!
通道输出:
1.不考虑电机调速:使能ENA、ENB置于高电平,直接对N1、N2、N3、N4接入高低电平
(电机以最快速度转动)---------------------------------没办法调整左右轮速度
2.考虑电机调速:ENA和ENB接单片机的PWM波输出引脚!别被其他文章搞混了。
IN1,IN2,IN3,IN4按章上面的接法控制方向。就这么简单。别好多人讲的迷迷糊糊。
在这里插入图片描述
在这里插入图片描述
这里采用这种简单的减速小马达减速比好像是1:48,童年回忆哈哈哈哈。
bsp_pwm.c

#include "bsp_pwm.h"
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
//TIM1_PWM_Init(7199,0);//PWM频率=72000/(7199+1)=10Khz
void TIM1_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //时基单元配置TIM_OCInitTypeDef  TIM_OCInitStructure;    //tim定时器输出模式结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能//设置该引脚为复用输出功能,输出TIM1 CH1 CH4的PWM脉冲波形GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; //TIM_CH1 //TIM_CH4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = 0;                            //设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_Pulse = arr >> 1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;     //输出极性:TIM输出比较极性高TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_CtrlPWMOutputs(TIM1,ENABLE);	//MOE 主输出使能	 高级定时器输出PWM波特殊配置TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能	 TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH4预装载使能	TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_Cmd(TIM1, ENABLE);  //使能TIM1
}

bsp_pwm.h

#ifndef __PWM_H
#define __PWM_H#include "sys.h"void TIM1_PWM_Init(u16 arr,u16 psc);#endif

main.c

#include "sys.h"   //这个文件有点基础的都懂吧  不懂私信我/*** @brief  主函数* @param  无* @retval 无*/ #define SOFT_DELAY Delay(0x0FFFFF);void Delay(__IO u32 nCount); int main(void)
{	delay_init();/* LED端口初始化 */LED_GPIO_Config();TIM1_PWM_Init(99,71);//72+100/72000Motor_Init();LED2_ON;//我习惯在都初始化后亮个灯表示一下。while(1){LED2_ON;delay_ms(500);LED2_OFF;;advance();delay_ms(3000);retreat();delay_ms(3000);left();delay_ms(3000);right();delay_ms(3000);stop();}

bsp_motor.c

#include "bsp_motor.h"void Motor_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;	//端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //50MHZGPIO_Init(GPIOB, &GPIO_InitStructure);					      //根据设定参数初始化GPIOB AIN1=0,AIN2=0;BIN1=0,BIN2=0;
}
void stop(void)
{	
TIM_SetCompare1(TIM1,  0);
TIM_SetCompare4(TIM1, 0 );AIN1=0,AIN2=0;BIN1=0,BIN2=0;
}
void advance(void)
{PWM1=100;PWM4=100;
//TIM_SetCompare1(TIM1,  100);
//TIM_SetCompare4(TIM1, 100 );AIN1=1,AIN2=0;BIN1=1,BIN2=0;
}void  retreat(void)
{PWM1=100;PWM4=100;AIN1=0,AIN2=1;BIN1=0,BIN2=1;
}void right(void)
{PWM1=100;PWM4=100;AIN1=0,AIN2=1;BIN1=1,BIN2=0;
}
void left(void)
{PWM1=100;PWM4=100;AIN1=1,AIN2=0;BIN1=0,BIN2=1;
}

bsp_motor.h

#ifndef __BSP_MOTOR_H
#define __BSP_MOTOR_H#include "sys.h"#define PWM1   TIM1->CCR1  //PA8#define PWM4   TIM1->CCR4  //PA11#define AIN2   PBout(13)
#define AIN1   PBout(12)
#define BIN1   PBout(14)
#define BIN2   PBout(15)void Motor_Init(void);void stop(void);
void advance(void);
void  retreat(void);
void left(void);
void right(void);#endif  /*__BSP_MOTOR_H*/

相关文章:

STM32输出PWM波控制电机转速,红外循迹避障智能车+L298N的详细使用手册、接线方法及工作原理,有代码

智能循迹红外避障小车 本设计的完整的系统主要包括STM32单片机最小系统、L298n电机驱动,超声波 ,舵机 ,红外模块等。寻迹小车相信大家都已经耳熟能祥了。 我们在这里主要讲一下L298N驱动电机和单片机输出PWM控制电机转速。 本设计软件系统采…...

3、AI的道德性测试

AI的道德性 AI系统的道德性如何保障是一个重要而复杂的问题,涉及到人工智能的发展、应用、监管、伦理、法律等多个方面。保障AI系统的道德性是一个很重要的问题,因为AI系统不仅会影响人类的生活和工作,也会涉及人类的价值观和伦理道德原则。针对这部分,也需要测试AI系统是…...

银行数字化转型导师坚鹏:银行业务需求分析师技能快速提升之道

银行业务需求分析师技能快速提升之道 ——以推动银行战略目标实现为核心,实现知行果合一课程背景: 很多银行都在开展业务需求分析工作,目前存在以下问题急需解决:不知道银行业务需求分析师掌握哪些关键知识?不清楚…...

C++IO流

文章目录一、CIO流体系二、C标准IO流三、C文件IO流1.ifstream2.ofstream一、CIO流体系 C流是指信息从外部输入设备向计算机内部输入,从内存向外部输出设备输出的过程,这种输入输出的过程非常形象地被称为流的概念。IO流指的就是输入输出流。 我们平时对…...

交友项目【后端环境搭建】

目录 1:环境搭建 1.1:MYSQL数据库 1.1.1:导入相应的sql 1.2:Linux中的docker-compose方法集中部署 1.2.1:介绍 1.3:IDEA设置 1.3.1:基本要求 1.3.2:设置项目编码格式 1.3.3&…...

大事务问题解决方案

文章目录 大事务引发的问题解决办法少用@Transactional注解将查询(select)方法放到事务外事务中避免远程调用事务中避免一次性处理太多数据非事务执行异步处理总结大事务引发的问题 1、死锁 2、回滚时间长 3、并发情况下数据库连接池被占满 4、锁等待 5、接口超时 6、数据库主…...

python开启局域网传输

python开启局域网传输 1.找自己的IP 在命令提示窗口输入&#xff1a;ipconfig <----找自己的IP地址 2.创建要传输文件的文件夹&#xff08;只允许在该文件夹下访问传输&#xff09; a.复制文件夹路径 b.在命令提示窗口cd打开新创建的文件夹 cd “C:\Users\86151\Desktop…...

病毒丨熊猫烧香病毒分析

作者丨黑蛋 一、病毒简介 病毒名称&#xff1a; 熊猫烧香 文件名称&#xff1a; 40fee2a4be91d9d46cc133328ed41a3bdf9099be5084efbc95c8d0535ecee496 文件格式&#xff1a; EXEx86 文件类型(Magic)&#xff1a; MS-DOS executable 文件大小&#xff1a; 29.30KB SHA256&…...

SparkSQL学习——SparkSQL配置与文件的读取与保存

目录 一、添加依赖 二、配置log4j 三、spark提交jar包 四、读取文件 (一)加载数据 (二)保存数据 1.Parquet 2.json 3.CSV 4.MySql 5.hive on spark 6.IDEA的Spark中操作Hive 一、添加依赖 <properties><project.build.sourceEncoding>UTF-8</proje…...

随想录Day45--动态规划:70. 爬楼梯 (进阶), 322. 零钱兑换, 279.完全平方数

70爬楼梯这道题之前已经做过&#xff0c;是动态规划思想的入门&#xff0c;想要爬上第n层阶梯&#xff0c;看爬上n-1层的方法和n-2层的方法共有多少种&#xff0c;两个相加就是爬上n层阶梯的方法。这里扩展到每次可以爬k层&#xff0c;这样就是一个动态规划问题。因为每次可以爬…...

原理+案例,关于主从延迟,一篇文章给你讲明白!

前言 在生产环境中&#xff0c;为了满足安全性&#xff0c;高可用性以及高并发等方面的需求&#xff0c;基本上采用的MySQL数据库架构都是MHA、MGR等&#xff0c;最低也得是一主一从的架构&#xff0c;搭配自动切换脚本&#xff0c;实现故障自动切换。 上述架构都是通过集群主…...

QT开发笔记(Camera)

Camera 此章节例程适用于 Ubuntu 和正点原子 I.MX6U 开发板&#xff0c;不适用于 Windows&#xff08;需要自行修改 才能适用 Windows&#xff0c;Windows 上的应用不在我们讨论范围&#xff09;! 资源简介 正点原子 I.MX6U 开发板底板上有一路“CSI”摄像头接口。支持正点原…...

从C++的角度讲解C#容器

讲解C#容器的文章网上一搜一大把&#xff0c;作为一名C程序员如何高效学习C#容器呢&#xff0c;其实学语言如果能讲到这点就能触类旁通&#xff0c;举一反三&#xff0c;那效果是最好的问题市面上没有这样的书籍&#xff0c;那就跟着老白来一起从C的角度去讲解C#容器1.List<…...

React组件库实践:React + Typescript + Less + Rollup + Storybook

背景 原先在做低代码平台的时候&#xff0c;刚好有搭载React组件库的需求&#xff0c;所以就搞了一套通用的React组件库模版。目前通过这套模板也搭建过好几个组件库。 为了让这个模板更干净和通用&#xff0c;我把所有和低代码相关的代码都剔除了&#xff0c;只保留最纯粹的…...

c++ atomic

文章目录why atomic?sequentially consistent atomicRelaxed memory modelswhy atomic? 当我们有一片内存空间S,线程A正在往S里写数据,这个时候线程B突然往S中做了操作,导致线程A的操作结果变得不可预知(对线程A来说),这种情况换句话说叫做data race,我们一般的操作时上锁,在…...

要想孩子写作文没烦恼?建议家长这样做

说起语文学习&#xff0c;就不得不提作文。作为语文学习中的重中之重&#xff0c;作文写作一直是压在学生和家长身上的一块“心头大石”。发现很多孩子在写作文时&#xff0c;往往存在四大问题&#xff1a;写不出、不生动、流水账、太空洞。如今&#xff0c;孩子怕写作文&#…...

基于Python的高光谱图像分析教程

1、前言超光谱图像 (HSI) 分析因其在从农业到监控的各个领域的应用而成为人工智能 (AI) 研究的前沿领域之一。 该领域正在发表许多研究论文&#xff0c;这使它变得更加有趣&#xff01; 和“对于初学者来说&#xff0c;在 HSI 上开始模式识别和机器学习是相当麻烦的”&#xff…...

【图神经网络】从0到1使用PyG手把手创建异构图

从0到1用PyG创建异构图异构图创建异构图电影评分数据集MovieLens建立二分图数据集转换为可训练的数据集建立异构图神经网络以OGB数据集为例HeteroData中常用的函数将简单图神经网络转换为异质图神经网络GraphGym的使用PyG中常用的卷积层参考资料在现实中需要对 多种类型的节点以…...

2023美赛春季赛思路分析汇总

将在本帖更新汇总2023美赛春季赛两个赛题思路&#xff0c;大家可以点赞收藏&#xff01; 2023美赛春季赛各赛题全部解题参考思路资料模型代码等全部实时更新&#xff01;第一时间获取全部美赛春季赛相关资料&#xff01; 目前思路整理仅为部分&#xff0c;请大家耐心等待&…...

GPT4国内镜像站

GPT-4介绍GPT-4是OpenAI发布的最先进的大型语言模型&#xff0c;是ChatGPT模型的超级进化版本。与ChatGPT相比&#xff0c;GPT-4的推理能力、复杂问题的理解能力、写代码能力得到了极大的强化&#xff0c;是当前人工智能领域&#xff0c;最有希望实现通用人工智能的大模型。但G…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...