基于STM32的智能循迹避障小车实验(小车运动部分)

这篇具有很好参考价值的文章主要介绍了基于STM32的智能循迹避障小车实验(小车运动部分)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

这个实验是关于智能小车的实验,现在的想法就是先做出一个循迹和避障功能,后续可能会再添加一些其他的模块。

我在做这个实验之前基本了解了F1系列开发板的大部分模块,如果没有学习之前的模块,建议先学习下开发板的基本模块。

实验所需的硬件

本来是想在网上直接买成套的,但是碍于手头实在紧张,所以分开买的配件。

所有配件均从淘宝购入,适合动手能力强的人。

1

STM32F103C8T6最小系统板

2

智能小车底板

3

L298N电机驱动模块

4

舵机SG90云台和超声波模块HC-SR04

5

45号电池

6

TCRT5000循迹模块2

7

面包板和杜邦线若干

8

下载器

9

5v3.3v DC-DC模块

附上它们的图片

 基于STM32的智能循迹避障小车实验(小车运动部分)基于STM32的智能循迹避障小车实验(小车运动部分)

 基于STM32的智能循迹避障小车实验(小车运动部分)基于STM32的智能循迹避障小车实验(小车运动部分)

 基于STM32的智能循迹避障小车实验(小车运动部分)基于STM32的智能循迹避障小车实验(小车运动部分)

  

主芯片我当时也买了但是没用上,因为c8t6最小系统板是不带TTL串口下载功能的,如果要下载还需要一个下载器,我因为着急做,所以就用我自己的开发板了。

电路连接部分这里不再展开,可以在网上找些视频讲解,比较通俗易懂。

硬件整理完后就可以开始程序的书写了。

让小车动起来

让小车动起来的原理也非常简单, 看图:!!!!

基于STM32的智能循迹避障小车实验(小车运动部分)

这个图中标注了这些每个引脚的功能,将我们小车的电源线连接到12V供电,完后供电GND接入我们板子上的GND这里再附上L298N工作原理图:

基于STM32的智能循迹避障小车实验(小车运动部分)

图表 1电机转动示意图

这个图翻译成人话就是一共有4个输入引脚,引脚12控制电机1,也就是图上的输出A,引脚34控制电机2,也就是图上的输出B,当两个引脚输出的电平不同时,电机就会工作,反之电机就停止工作。所以我们可以用普通GPIO口输出高低电平来使它工作。

接下来我们就利用GPIO口来控制小车动起来:

CobeMX配置

首先先进行CobeMX的配置:选择你自己喜欢的GPIO口进行配置,然后根据你的配置来连线,之后选择将所有的GPIO初始值都拉低。

基于STM32的智能循迹避障小车实验(小车运动部分)

图表 2GPIO选择

我这里选择的是GPIOG2、4、6、8四个接口,将它们配置成GPIO_OutPut模式。

具体每个IO口的配置如图基于STM32的智能循迹避障小车实验(小车运动部分)

图表 3GPIO配置

代码实现部分

上述配置完成后就可以生成代码了。这部分我们先实现简单的让小车可以动起来,

根据图表1,我们知道当IN1和IN2的电平不同时就可以使OUT1的电机转起来,

所以这里先试着让一个电机转动:

HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

在主函数中让IN1的电平改变为高电平,烧录进开发板,如果车轮可以正常转动,说明之前配置和硬件电路的连接都是正常的。接下来我们将前进、后退、左转、右转都封装成函数:

// 前进

void Car_Go(void)

{

      

       HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}





// 后退

void Car_Back(void)

{

       HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, GPIO_PIN_SET);

}



// 左转

void Car_Left(void)

{

       //HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}



// 右转

void Car_Right(void)

{

       //HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}

这里的几个代码是相对于我这个接线方法的,如果使用这个代码的出现轮子转的方向不对,最简单的方法就是将线反接一下,或者改下代码中的接口也可以。

最后,就可以在主函数中测试刚才实现的几个功能了。

有兄弟可能会问这个正接、反接、1输出高还是2输出高最后导致的电机转动方向不同,这个问题可以自己到时候试几次,就可以试出来了,我现在说这些正接反接,到时候你一个线接反了就全反了,所以倒不如到时候自己试几次。

PWM驱动电机

我们只是实现了简单的运动,但是这样的运动有些局限性,我们不能调节小车的速度,转动的时候小车基本不向前移动,针对这个问题,我们可以使用PWM调波方式实现小车转速降低,也可以在转动时转弯半径增大。

实现原理:通过通用定时器控制PWM输出占空比不同的PWM波,来实现施加在电机上电压的时间,进而改变电机转动的速度。

基于STM32的智能循迹避障小车实验(小车运动部分)

通过查看手册,可以知道通用定时器可以生成PWM波。所以我们这里采用通用定时器实现PWM波的生成。

接线方法:在L298N的示意图上,我们可以看到有通道A使能和通道B使能,这两个本来是用跳帽和正极短接,现在我们将跳帽拔下,然后连接到开发板的PWM使能引脚(可以先用CobeMX进行使能,然后看对应使能的接口来连线)。

让我们回到CobeMX进行设置:在设置定时器之前我们首先得先开启RCC的时钟:这里配置为高速外部时钟。然后打开时钟树,将HCLK配置成最高的72MHz。

基于STM32的智能循迹避障小车实验(小车运动部分)

 完成时钟配置后,打开TIM2的通道1和2,将它们配置成PWM模式。

基于STM32的智能循迹避障小车实验(小车运动部分)

 完成后配置下方的具体配置,具体配置这里就不展开描述。

基于STM32的智能循迹避障小车实验(小车运动部分)

 图表 4PWM配置

只需注意:

1.PSC是预分频器,它可以对时钟进行预分频:也就是一次计时的计数次数,如果配置为7199,实际分频就为7200,这里因为影响不大,所以直接配置为7200。配置完后从分频器输出的时钟频率为(72MHz/7201)=1000,当计数值达到这个值就会触发中断然后计数器又归零重新计数(这里不需要中断)。

2.Counter Period是计数周期,这里配置为200,也就是计时200ms。

3.Pulise是PWM高低电平的时间,这里设置为高电平50ms,低电平150ms。

配置完成后就可以生成代码了。

代码实现:

// 前进

void Car_Go(void)

{

      

       HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}





// 后退

void Car_Back(void)

{

       HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, GPIO_PIN_SET);

}



// 左转

void Car_Left(void)

{

       HAL_TIM_Base_Start_IT(&htim2);

       __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,50);

       HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);

       HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_2);

       HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}



// 右转

void Car_Right(void)

{

       HAL_TIM_Base_Start_IT(&htim2);

       __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50);

       HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);

       HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_2);



       HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

       HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, GPIO_PIN_SET);

}

__HAL_TIM_SET_COMPARE()这个函数是修改PWM占空比的函数,也就是修改Pulise。可以通过使转弯时一个轮子的转速下降来实现转弯,也可以整体调整小车行驶速度。这里需要注意:主函数调用这个函数时每次调用完都得回调PWM的占空比。如下:

while (1)

  {

    /* USER CODE END WHILE */

              __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,199);  // 回调PWM

              __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,199);

              Car_Go();

              HAL_Delay(10);

    /* USER CODE BEGIN 3 */

  }

由于篇幅原因,在下一篇文章中我们再实现小车的循迹模块。

跳下一部分基于STM32的智能循迹避障小车实验(循迹部分)

最后附上整个项目的HAL库源码:

百度网盘 请输入提取码

提取码:1234文章来源地址https://www.toymoban.com/news/detail-460173.html

到了这里,关于基于STM32的智能循迹避障小车实验(小车运动部分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机的多功能智能语音循迹避障小车

    目录 一.功能介绍及硬件准备 二.电机控制及调速 三.小车循迹方案 四.跟随功能实现 五.测速功能实现 六.OLED显示车速 七.摇头避障功能实现 八.SU-03T语音模块介绍 九.语音切换小车模式+OLED显示模式 这是一款基于51单片机开发的智能小车,通过这篇文章我会记录下来开发这款小

    2024年02月03日
    浏览(36)
  • 基于stm32的智能小车(远程控制、避障、循迹)

    学完stm32,总是想做点东西“大显身手”一下,智能小车就成了首选项目,其核心只是就是PWM输出,I/O口引脚电平判断。 制作智能小车的硬件名单: 由于我们做的控制功能可以使用2.4G控制,也可以使用蓝牙进行控制, 两种传输方式所需购买的模块不同,已在硬件名单中加以

    2024年02月03日
    浏览(40)
  • [STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

    目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数,和重定向printf) Uart.c main.c  3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢? 4.小车PWM调速,  6.跟随功能 7.避障功能 超声波测距

    2024年02月13日
    浏览(48)
  • 机器人制作开源方案 | 智能循迹避障小车

    作者: 刘元青、邹海峰、付志伟、秦怀远、牛文进 单位: 哈尔滨信息工程学院 指导老师: 姚清元       智能小车是移动式机器人的重要组成部分,而移动机器人不仅能够在经济、国防、教育、文化和生活中起到越来越大的作用,也是研究复杂智能行为的产生、探索人类思

    2024年01月16日
    浏览(50)
  • 基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度

    wx供重浩:创享日记 对话框发送:单片机小车 免费获取完整无水印报告等 利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 1.1智能

    2023年04月22日
    浏览(45)
  • 【IoT】红外循迹避障小车

    随着生产自动化的发展需要,机器人已经越来越广泛地应用到生产自动化上,随着科学技术的发展,机器人的传感器种类也越来越多,其中红外传感器已经成为自动行走和驾驶的重要部件。 红外的典型应用领域为自主式智能导航系统,机器人要实现自动避障功能就必须要感知

    2024年02月04日
    浏览(28)
  • 基于STM32f103c8t6的简单红外巡迹避障小车制作

    (1)电源 电源模块选用的是18650锂电池(充电器及电池底座)、3.3v稳压模块。 (2)车模 淘宝最常见的智能车底。 (3)电机 买的智能车带有四个电机,选用L298N电机驱动板对电机进行驱动。 (4)巡迹及避障 巡迹选用四路红外模块实现,避障选用超声波模块HC-SR04实现。 (

    2023年04月15日
    浏览(35)
  • STM32输出PWM波控制电机转速,红外循迹避障智能车+L298N的详细使用手册、接线方法及工作原理,有代码

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

    2024年01月17日
    浏览(39)
  • 基于STM32F103的红外循迹 超声波避障小车

    单片机:stm32f103 传感器:普通红外(我用了4个) 超声波:HC-SR04 舵机:SG90 目标:可以循黑线(十字直行)、并避障 如果硬件配置和我一样以下代码可直接使用,用我配置的引脚即可。 亲测好用。 复制代码的同时请点个赞,多谢! .c .h .c .h .c .h .c .h 我的主函数有些啰嗦,

    2024年02月05日
    浏览(43)
  • STM32循迹寻光避障小车(二)(红外循迹部分)

    目录 TRCT5000寻迹模块介绍 1. 模块介绍: 2. 管脚介绍: 3. 使用原理: 4. 代码部分: Tracing.c文件全部代码(附带注释) Tracing.h文件全部代码 首先介绍一下使用到的红外寻迹模块,我们采用了TRCT5000的三路红外寻迹模 我从网上找到如下的图片和资料: 1、采用TCRT5000红外反射传感

    2024年02月17日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包