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

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

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

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

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;    // PSC
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    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 = 0;                   // 初始占空比 0
    TIM_OC1Init(TIM2, &TIM_OCInitStructure);
    TIM_OC2Init(TIM2, &TIM_OCInitStructure);

    TIM_Cmd(TIM2, ENABLE);
}

// 设置通道 1 比较值
void PWM_SetCompare1(uint16_t Compare)
{
    TIM_SetCompare1(TIM2, Compare);
}

// 设置通道 2 比较值
void PWM_SetCompare2(uint16_t Compare)
{
    TIM_SetCompare2(TIM2, Compare);
}

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

目录

  1. 1. 项目概述与硬件准备
  2. 2. 电机驱动与 PWM 控制
  3. 2.1 TB6612 电机驱动详解
  4. 2.2 PWM 驱动程序实现

更多推荐文章

查看全部
  • 算法实战:归并排序与数组逆序对详解
  • 前端开发必读:HTML5 Doctype 与浏览器渲染模式详解
  • C++ 模板进阶:非类型参数、特化与分离编译
  • OAuthSwift:Swift OAuth 库的 8 大核心优势解析
  • Linux 前台与后台进程管理及守护进程创建
  • Python 实现活性污泥模型 ASM2d 参数校准与优化
  • Python 实现现代游戏窗口无闪烁高性能 DX11/DX12 截图方案
  • SpringBoot + PostGIS 城市道路里程计算与缓存优化实战
  • 数据结构:二叉树基础与 C 语言实现详解
  • 前端 Vue 对接 UNet 后端:跨域 CORS 配置方案
  • WorkBuddy 接入 QQ 机器人配置指南
  • 2025年12月GESP C++五级真题:相等序列
  • Android 程序员发展前景与 Framework 底层技术解析
  • 数据结构:顺序表与链表经典算法实战
  • Stable Diffusion 3.5 FP8 文生图技术解析与应用
  • C++ 入门:命名空间(namespace)详解
  • MiniMax 海螺 AI 视频:图片与文本生成高质量视频
  • 统一 OpenAI API 格式调用 20+ 主流大模型方案
  • Java 对象赋值与 clone 方法:浅拷贝与深拷贝解析
  • C++ 转 C#:核心思维转变与实战要点

相关免费在线工具

  • 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