跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

基于STM32标准库的智能小车避障与循迹实战

基于 STM32F103 标准库实现智能小车避障与循迹功能,涵盖硬件选型与代码逻辑。重点解析 TB6612 电机驱动接线规范及 PWM 控制原理,提供 TIM2 初始化与占空比设置示例。强调独立供电与元件预测重要性,助力快速搭建底层控制框架。

SqlMaster发布于 2026/4/10更新于 2026/7/2435 浏览

1. 项目概述与硬件准备

完成基础入门学习后,通过智能小车项目串联 STM32 外设应用是巩固知识的最佳途径。本项目涵盖避障、循迹等核心功能,适合进阶练习。

硬件清单如下:

  • 主控芯片:STM32F103C8T6 最小系统板
  • 电机驱动:TB6612 模块(根据电机数量配置)
  • 舵机:SG90(用于超声波扫描)
  • 传感器:HC-SR04 超声波模块、TCRT5000 红外循迹模块
  • 通信模块:HC-04 蓝牙模块
  • 车体框架:支持直流电机的通用底盘
  • 烧录器:ST-LINK V2
  • 其他:杜邦线、洞洞板或面包板

组装前务必测试所有元器件,特别是电机和驱动模块,避免焊接后因故障返工。

2. 电机驱动与 PWM 控制

2.1 TB6612 电机驱动详解

TB6612 采用双通道输出设计,相比传统 L298N 方案,其效率更高且发热更低。单通道支持 1A 连续电流,峰值可达 2A。

关键引脚说明:

  • VM:电机供电电压(3V-13.5V)
  • VCC:逻辑电平输入(2.7V-5.5V)
  • STBY:待机控制(高电平使能)
  • AO1/AO2、BO1/BO2:电机输出端
  • PWMA/PWMB、AIN1/AIN2、BIN1/BIN2:控制信号输入

注意:电机驱动电源建议独立供电,防止启动瞬间压降导致 MCU 复位。

2.2 PWM 驱动程序实现

使用 TIM2 的通道 1 和 2 生成 PWM 波控制电机转速。以下是初始化及设置函数:

#include "stm32f10x.h"

void PWM_Init(void)
{
    // 开启 GPIOA 和 TIM2 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    // 配置 GPIOA_Pin0 和 Pin1 为复用推挽输出
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置时基单元
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV2;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;      // ARR
    TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;    
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = ;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

    
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCStructInit(&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = ;                   
    TIM_OC1Init(TIM2, &TIM_OCInitStructure);
    TIM_OC2Init(TIM2, &TIM_OCInitStructure);

    TIM_Cmd(TIM2, ENABLE);
}


 
{
    TIM_SetCompare1(TIM2, Compare);
}


 
{
    TIM_SetCompare2(TIM2, Compare);
}
// PSC
0
// 配置输出比较通道
0
// 初始占空比 0
// 设置通道 1 比较值
void
PWM_SetCompare1
(uint16_t Compare)
// 设置通道 2 比较值
void
PWM_SetCompare2
(uint16_t Compare)

实际调试中,PWM 频率由 ARR 和 PSC 决定,调整 Compare 值即可改变占空比从而控制电机速度。

目录

  1. 1. 项目概述与硬件准备
  2. 2. 电机驱动与 PWM 控制
  3. 2.1 TB6612 电机驱动详解
  4. 2.2 PWM 驱动程序实现
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • LangChain 消息处理:缓存、过滤、合并与流式输出实战
  • Vue3 主流 AI 代码助手安装与配置指南
  • 基于SSM的教师业绩管理系统设计与实现
  • ANSYS Fluent 2026 R1 新功能:AI 如何重塑汽车风阻优化流程
  • Generative Agents:交互式人类行为模拟研究
  • Rust 异步代码的测试与调试实践
  • MCP Document Converter:让 AI 助手支持 25 种文档格式转换
  • Rust 桌面 GUI 框架 2025 年横评与选型指南
  • WebRTC 在 Android 中的应用实战指南
  • 基于 SpringBoot 的网页时装购物系统设计与实现
  • 使用本地大模型 Llama3 进行数据分类标记
  • Spring AI 调用大模型的几种方案实践
  • 基于 Python Django 与 Flask 的在线食品安全信息平台设计
  • C++ 特殊类设计:不可拷贝、堆栈限制与单例模式实现
  • 基于 Leaflet Trackplayer 的 WebGIS 高速轨迹可视化实战
  • lora-scripts 实现 Stable Diffusion 全流程自动化 LoRA 训练
  • 大模型入门教程(二):LLM 的未来演进与安全性
  • Stable Diffusion XL 1.0 实战:Streamlit 低显存部署指南
  • C++ 异常处理:理论、栈展开与最佳实践
  • Qwen3-Omni 架构详解:Thinker-Talker 与 MoE 设计

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online