找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16401|回复: 5
打印 上一主题 下一主题
收起左侧

STM32循迹小车电路原理图+代码

  [复制链接]
跳转到指定楼层
楼主
ID:268247 发表于 2019-1-4 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32红外避障&红外寻迹
一、功能实现

1、红外避障:单片机通过安装在小车前端两侧的红外避障模块检测障碍物与小车间的距离,加以判断实现避障功能。

  • 红外寻迹:单片机通过安装在小车底盘两侧的红外寻迹模块检测黑线与小车的相对位置,加以判断实现寻迹功能。
2、元器件选择
2.1单片机型号选择

单片机选择STM32F103C8T6,此款单片机有48个引脚,72M主频,64K Flash、20K RAM,3个普通定时器,1个高级定时器,2个SPI,2个I2C,3个串口,1个USB,1个CAN,37个可使用IO口,2个12位10通道ADC。

如此丰富的内设硬件资源足以应付大多数场合使用,相对于STM32F103同系列其他单片具有机性价比高,网络资源多、例程丰富,适合STM32入门初探与产品设计应用。


单片机资料网盘下载:http://pan.baidu.com/s/1hrGMLA8

2.2红外避障模块选择

红外数字反射传感器,一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出,因而有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离。可以应用于机器人避障、走迷宫机器人、流水线计件、多功能提醒器。

资料下载链接:http://pan.baidu.com/s/1miR2bbU

2.3红外寻迹模块选择

采用TCRT5000红外反射传感器,一种集发射与接收于一体的光电传感器,它由一个红外发光二极管和一个NPN红外光电三极管组成。检测反射距离1mm-25mm适用,传感器特设M3固定安装孔,调节方向与固定方便易用,使用宽电压LM393比较器,信号干净,波形好,驱动能力强,超过15mA。可以应用于机器人避障、机器人进行白线或者黑线的跟踪,可以检测白底中的黑线,也可以检测黑底中的白线,是寻线机器人的必备传感器。流水线计件、电度表脉冲数据采样、传真机碎纸机纸张检测等众多场合。

资料下载链接:http://pan.baidu.com/s/1i5FwN4L

2.4电机驱动模块

资料下载链接:http://pan.baidu.com/share/link?shareid=457085&uk=2302102993

2.5智能小车底盘选择


3、原理图


准备好以上模块后就可以组装出一套具有寻迹避障功能的STM32智能小车了。

4、连线

按照GPIO口分配表进行连线

STM32F103单片机最小系统

L298N电机驱动模块

注意,全部模块都要共地(GND要连在一起)




单片机源程序如下:
  1. /* 包含头文件 ----------------------------------------------------------------*/
  2. #include "stm32f1xx_hal.h"
  3. #include "pwm.h"
  4. #include "gpio.h"
  5. #include "delayus.h"
  6. #include "direction.h"
  7. #include "avoid.h"
  8. #include "track.h"
  9. /* 扩展变量 ------------------------------------------------------------------*/
  10. /* 私有函数原形 --------------------------------------------------------------*/
  11. /* 函数体 --------------------------------------------------------------------*/
  12. /**
  13.   * 函数功能: 系统时钟配置
  14.   * 输入参数: 无
  15.   * 返 回 值: 无
  16.   * 说    明: 无
  17.   */
  18. void SystemClock_Config(void)
  19. {
  20.   RCC_OscInitTypeDef RCC_OscInitStruct;
  21.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  22.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  23.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  24.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  25.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  26.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  27.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
  28.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  29.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  30.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  31.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz
  32.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  33.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  34.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  35.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  36.          // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次
  37.         // HAL_RCC_GetHCLKFreq()/100000         10us中断一次
  38.         // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
  39.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器
  40.   /* 系统滴答定时器时钟源 */
  41.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  42.   /* 系统滴答定时器中断优先级配置 */
  43.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  44. }


  45. /**
  46.   * 函数功能: 主函数.
  47.   * 输入参数: 无
  48.   * 返 回 值: 无
  49.   * 说    明: 无
  50.   */
  51. int main(void)
  52. {
  53.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  54.   HAL_Init();
  55.   /* 配置系统时钟 */
  56.   SystemClock_Config();
  57.         
  58. /**************GPIO******************************************************************/
  59.         GPIOA_Init();//初始化L298N接口
  60.         GPIOB_Init();//初始化寻迹和红外避障模块接口

  61. /***************PWM******************************************************************/        
  62.          /* 通用定时器初始化并配置PWM输出功能 */
  63.   GENERAL_TIMx_Init();
  64.   
  65.   /* 启动通道PWM输出 */
  66.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1);
  67.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_2);
  68.         TIM3->CCR1=TIM3->CCR2=1000;//调车速,范围0~1000,数值越大速度越快
  69.         
  70. /* 无限循环 */
  71.   while (1)
  72.   {        
  73.                 Avoid();//避障
  74. //                Track();//寻迹
  75.         }

  76. }
复制代码

所有资料51hei提供下载: STM32寻迹避障-资料.7z (3.64 MB, 下载次数: 393)


此商品已被删除

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:311215 发表于 2019-1-7 14:16 | 只看该作者
请问楼主原理图是用什么软件
回复

使用道具 举报

板凳
ID:316690 发表于 2019-1-15 13:40 | 只看该作者
jetty-9 发表于 2019-1-7 14:16
请问楼主原理图是用什么软件

Altium Designer吧
回复

使用道具 举报

地板
ID:526143 发表于 2019-5-7 18:59 | 只看该作者
这个怎么修改
回复

使用道具 举报

5#
ID:191393 发表于 2020-5-8 15:41 | 只看该作者
感谢分享
回复

使用道具 举报

6#
ID:747352 发表于 2020-5-9 03:50 | 只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表