写在前面

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

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

实验所需的硬件

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

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

1

STM32F103C8T6最小系统板

2

智能小车底板

3

L298N电机驱动模块

4

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

5

4节5号电池

6

TCRT5000循迹模块2个

7

面包板和杜邦线若干

8

下载器

9

5v转3.3v DC-DC模块

附上它们的图片

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

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

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

让小车动起来

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

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

图表 1电机转动示意图

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

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

CobeMX配置

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

图表 2GPIO选择

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

具体每个IO口的配置如图

图表 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波,来实现施加在电机上电压的时间,进而改变电机转动的速度。

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

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

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

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

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

图表 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

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

  1. 基于STM32的智能循迹避障小车

    [1]研究背景 随着计算机,微电子技术的快速发展,智能化技术的开发越来越快,智能程度也越来越高,应用的范围也得到了极大的扩展.因此,基于嵌入式技术的智能小车应运而生. 近来两年,智能小车在生活中有着广 ...

  2. c语言智能车跑道检测程序,基于单片机的智能循迹避障小车(附电路原理图,程序清单)...

    基于单片机的智能循迹避障小车(附电路原理图,程序清单)(论文10000字) 摘要:目前,移动机器人的开发和研究越来越令人瞩目,而智能循迹壁障小车作为移动机器人的一个重要分支,非常值得我们探索和讨论.智 ...

  3. 基于STC12C5616AD芯片智能循迹避障小车完整制作过程(详细教程)

    前言:本篇文章适合小白阅读,其中有很基础的Keil 5的使用教程等.大多网友知道如何使用,因此大家可以看目录,对于自己而言比较基础的可以不用阅读,重点关注一些迷茫的部分. 智能循迹避障小车教程目录 智 ...

  4. 智能循迹避障小车C语言程序编写思路,基于单片机的智能小车红外避障循迹系统设计与制作...

    余秀玲 余秀娟 摘 要:随着科技的高速发展,人们对生活质量的要求越来越高,无人驾驶汽车已经被广为研发和试用,由此智能小车的快速发展也是在情理之中.通过对基于单片机的智能小车的硬件及软件设计分析,实现红 ...

  5. 基于单片机智能灯光光控照明系统设计、基于单片机HX711电子秤自动计价系统设计、基于单片机GPRS远程测控系统设计、基于单片机多功能循迹避障无线遥控蓝牙智能小车-设计资料

    基于单片机智能灯光光控照明系统设计 智能光控照明系统设计原理: 本系统采用STC89C52系列的单片机为核心,利用BH1750传感器测量实时光照强度,并将亮度的模拟信号转化成数字信号,大大减少了系统的 ...

  6. STM32蓝牙控制循迹避障小车——2.循迹模块

    STM32蓝牙控制循迹避障小车源代码--2.循迹模块 注意-所需模块: 接线:四个循迹模块(从左到右分别为1,2,3,4) B4–第1个循迹模块的D0 B5–第2个循迹模块的D0 B6–第3个循迹模块 ...

  7. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块

    STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...

  8. 基于STM32F103的红外循迹避障小车设计(含Proteus仿真)

    基于STM32F103的红外循迹避障小车设计 红外循迹及红外避障实现较简单,无论是51单片机还是STM32单片机,其例程随处可见.但是完全可以运行的Proteus仿真,开源的并不多,更不要说基于STM ...

  9. STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制

    STM32蓝牙控制循迹避障小车源代码--4.蓝牙控制 注意-所需模块: 蓝牙模块 接线: 串口通信 A2–RX A3–TX 所有的代码都是直接从工程里面复制的,实测是没有问题的. 蓝牙控制原理: 设计 ...

最新文章

  1. delphi variant和stream相互转换的函数
  2. 这块抖音爆红的支架,搞到一波优惠,按需而入!
  3. [翻译]在GridView中插入新记录
  4. 嵌入式tomcat例子
  5. docker php示例,Docker PHP 例子
  6. visualsvn php,VisualSVN 手动记录访问日志
  7. 中国 AI 开发者真实现状:人才依赖海外引进,本科 AI 教育盛行
  8. thinkpadt410接口介绍_Thinkpad-T410 T410S笔记本左右接口以及硬件设备详细介绍!
  9. 短视频去水印威信小程序源码下载,内附去水印解析接口
  10. 结构化数据,非结构化数据,半结构化数据的区别
  11. 来套近乎啊——思维导图
  12. css中图片不清晰解决方法
  13. 【c++篇】STL常见容器Stackqueue
  14. sql 当为空值时置0_SQL查询值为空时默认输出0的方法
  15. [转]金属加工工艺基础知识
  16. ostu阈值分割python实现_opencv python 图像二值化/简单阈值化/大津阈值法
  17. 活动目录安装|活动目录教程
  18. 【shell】实现交互|read读取键盘输入
  19. html5行星环绕,Two.js实现星球环绕动画效果
  20. GNSS数据下载网站整理,包括gamit、bernese更新文件地址[2021.08更新]

热门文章

  1. 『Kubernetes』在Linux中快速安装K8S集群
  2. 从“中国制造”转向“中国智造”,柔性制造充当了什么角色?
  3. 基于Android的高考志愿填报咨询系统APP-计算机毕业设计
  4. 交换机和路由器有什么区别?网关和路由又指的是什么呢?
  5. 【架构师之路 四】需要掌握的技能点---架构性能优化
  6. derby mysql 同步_三分钟学会使用Derby数据库
  7. 电商 mongodb mysql,MongoDB电商数据建模
  8. html图片排列布局下面字_div+css(ul li)实现图片上文字下列表布局
  9. ANSI编码是什么编码方式?ANSI编码和GBK什么关系
  10. 云服务器怎么有wifi,我为什么推崇带有云服务的WiFi音箱