简单循迹小车实验心得_stm32智能小车设计

提前说说:博主是用寄存器写的驱动。

历时两周,总算把小车弄好了,总体上来说做的太慢了。自己在32的学习中还不够仔细深入,只是浅面的学习,当真正做一个项目时,暴露的问题就太多了。这次在小车的制作的过程中,遇到了各种各样的问题,软件,硬件,各式各样的问题迎面而来,真的好几次心态崩了。不过还好小车这个项目不只是我一个人在搞,组里的其他成员也在一直在考虑问题,想办法,不断地解决解决,总归小车终于做好了,下面是小车完成图:

24573567e3c6996939cca39ddd0609d6.png 2a2c1db0fb824346a523623555fe55d6.png

是有点灵魂接线(·

26425c7b67b450b42e3bddb69b70029a.png

模块清单

4a5c611034c1cd67370dda1ae54324ef.png
  1. stm32f103C8T6开发板

  2. HC-SR04超声波测距模块X3

  3. TB6612FNG 电机驱动模块X2

  4. HC-05主从一体无线蓝牙模块X1

  5. 智能小车底盘 4WD小车循迹/避障小车 底盘X1

  6. LM2596S DC-DC降压电源模块X1

  7. 电源模块3.3V 5V 12V多路输出 电压转换模块DC-DC 12V转3.3V 5V X1

  8. 12V电池X1

  9. 杜邦线 Xn

  10. 转串口模块X1

  11. ST-linkX1

  12. 面包板X1

26425c7b67b450b42e3bddb69b70029a.png

完成功能

4a5c611034c1cd67370dda1ae54324ef.png
  1. 超声波避障

  2. 蓝牙控制

  3. 走矩形

各个模块就不再介绍了,具体介绍大家可以自行百度或者看一下我的前几篇Arduino智能小车博客,里面有简单的介绍。

小车的所有详细代码和成品演示在我的资源中,大家可以下载提取(包括代码,引脚图,效果演示):

https://download.csdn.net/download/nidie508/11458242

那么,开始吧。

准备工作

1.首先配置好keil5 c8t6模板(温馨提示:多看看模板的核心驱动,包括sys.h delay.h usart.h等,这些核心文件一定要保证准确无误!)

2.了解开发板和确保开发板无误
3.熟悉怎么用转串口模块和st-link将驱动下载到开发板上。


下图示为c8t6开发板的引脚图

18e2298d3d7b476f54401d36251f97f1.png 1.超声波避障功能

我们设计的思路如下,用三个超声波来避障。为什么用三个超声波呢?我们想的是如果用舵机的话,小车在行进过程中并不好判断,只能将车停下,舵机转动来检测哪个方向无障碍物,而用3个超声波不仅可以在行进中判断,也可以让小车没有停下的动作,显得整个过程比较流畅。这就是我们使用三个超声波的原因了。

我们使用的是定时器二的通道一,通道二,通道三来进行输入捕获的,那么,第一个问题就来了。

我们在写超声波代码时,用一个超声波先测试,发现超声波测试的并没有问题 ,串口显示的数据也并没有问题。但是,但是,在用三个超声波同时测试是,却发现数据显示的总有问题,输出的数据总是毫无规律,且数字都非常大,我们就在想是什么问题。


下面是三个超声波控制的代码:

//main.c#include "sys.h"#include "usart.h"    #include "delay.h"  #include "led.h"  #include "dianji.h"#include "hcsr.h"u32 DIS_Init(u8 STA,u16 VAL){
        u32 temp;    u32 lenth;    if((*STA)&0X80)//成功捕获到了一次高电平    {
            temp=STA&0X3F;        temp*=65536;               //溢出时间总和        temp+=VAL; //得到总的高电平时间        lenth=temp*0.017;           //计算长度        STA=0;     //开启下一次捕获    }    return lenth;}extern u8 TIM2CH2_CAPTURE_STA; //输入捕获状态extern u16 TIM2CH2_CAPTURE_VAL;  //输入捕获值extern u8 TIM2CH3_CAPTURE_STA; //输入捕获状态extern u16 TIM2CH3_CAPTURE_VAL;  //输入捕获值extern u8 TIM2CH4_CAPTURE_STA; //输入捕获状态extern u16 TIM2CH4_CAPTURE_VAL;  //输入捕获值int main(void){      u32 temp=0;  u32 length1;  u32 length2;  u32 length3;     Stm32_Clock_Init(9); //系统时钟设置  delay_init(72);       //延时初始化  uart_init(72,9600);  //串口初始化        //初始化与LED连接的硬件接口  TIM_PWM1_Init();//10000-1,36-1);//不分频。PWM频率=72M/(0.036M)=2Khz  Echo1=0;  Echo2=0;  Echo3=0;  HCSR04_Init(0XFFFF,72-1);//以1Mhz的频率计数  /*while(1)  {
          }*/  while(1)  {
        Echo3=1;    delay_us(20);    Echo3=0;    length1=DIS_Init(&TIM2CH4_CAP
  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值