基于STM32的智能小车避障与循迹实战(江科大标准库开发)

1. 项目概述与硬件准备

如果你已经学完了江科大的STM32入门教程,却不知道下一步该做什么,那么这个智能小车项目绝对是你的不二之选!我自己在做完这个项目后,对STM32的各种外设和编程逻辑有了更深刻的理解。今天我就把自己在实现过程中的经验分享给大家,包括避障、循迹等核心功能的实现方法。

智能小车项目需要的硬件其实并不复杂,下面是必备清单:

  • 主控芯片:STM32F103C8T6最小系统板(核心板)
  • 电机驱动:TB6612模块(1-2个,根据电机数量决定)
  • 舵机:SG90(用于超声波模块的旋转扫描)
  • 传感器:HC-SR04超声波模块(避障)、TCRT5000红外模块(循迹)
  • 通信模块:HC-04蓝牙模块(手机控制)
  • 车体框架:某多多上搜索"STM32智能小车框架"(自带四个直流电机)
  • 烧录器: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:控制信号输入

接线时要注意,电机驱动电压最好单独供电,不要和STM32共用电源,否则电机启动时可能会造成电压波动导致单片机复位。

2.2 PWM驱动程序实现

PWM控制是让电机转起来的关键,我使用的是TIM2的通道1和通道2:

#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); // 通道1 TIM_OC2Init(TIM2, &TIM_OCInitStructure); // 通道2 TIM_Cmd(TIM2, ENABLE); } // 设置比较值函数 void PWM_SetCompare1(uint16_t Compare) { TIM_SetCompare1(TIM2, Compare); } void PWM_SetCompare2(uint16_t Compare) { TIM_Se

Read more

33岁失业女前端程序员,可以转行干什么啊?

33岁失业女前端程序员,可以转行干什么啊?

33岁失业,既没有20+的精力无限,也还没到40+的稳定沉淀,加上前端行业技术迭代快、年轻化竞争激烈的现状,焦虑感扑面而来太正常了。 但作为一名深耕行业多年的观察者,我想先给各位姐妹吃颗定心丸:33岁的前端经验不是“包袱”,而是“宝藏”。咱们多年积累的逻辑思维、用户感知、跨团队沟通能力,以及对技术实现边界的把控,都是转行的核心优势。与其纠结“年龄大了怎么办”,不如聚焦“我的优势能迁移到哪里”。结合行业趋势和女性从业者的特质,整理了6个高适配、易落地的转行方向,供大家参考。 一、技术相关赛道:发挥积累,平稳过渡 如果对技术还有热情,不想彻底脱离IT圈,这类方向能最大化利用前端基础,转型成本最低,也是最容易快速上手的选择。 1. 测试开发工程师:细节控的“降维打击” 前端开发天天和界面打交道,最清楚用户会怎么操作、哪里容易出bug,这种对用户行为的敏感度,是测试开发的核心竞争力。而且咱们懂代码、懂开发流程,从“找bug”升级为“

【前端小站】HTML 标签:网页骨架,从空白到惊艳,全靠这些 HTML 标签搞事情

【前端小站】HTML 标签:网页骨架,从空白到惊艳,全靠这些 HTML 标签搞事情

半桔:个人主页  🔥 个人专栏: 《前端扫盲》《手撕面试算法》《C++从入门到入土》 🔖为什么有人总是赞美生活的丰富多彩?我想这是因为他们善于品尝生活中随时出现的意外。 -余华- 文章目录 * 前言 * 一. HTML结构 * 1.1 初始HTML标签 * 1.2 标签的层次 * 二. HTML文本标签 * 2.1 标题标签 * 2.2 段落标签 * 2.3 强调标签 * 2.3.1 加粗 * 2.3.2 倾斜 * 2.3.3 删除线 * 2.3.4 下划线 * 三. 媒体与交互标签 * 3.

【GitHub项目推荐--Webnovel Writer:基于Claude Code的长篇网文AI创作系统】⭐

简介 Webnovel Writer 是由开发者lingfengQAQ创建并维护的开源项目,其核心使命是为网文作者提供一个基于Claude Code的智能创作系统,专门解决AI写作中的“遗忘”和“幻觉”问题,支持长周期、多章节的连载创作。在AI辅助写作日益普及的今天,创作者们面临着一个普遍挑战:大型语言模型在处理长篇连续内容时容易遗忘前文细节,产生前后矛盾,或者生成与设定不符的“幻觉”内容。Webnovel Writer通过创新的RAG(检索增强生成)架构和系统化的创作工作流,为网文作者提供了稳定、可靠的AI协作伙伴。 核心定位:Webnovel Writer的核心价值在于将AI写作从零散的提示词对话升级为结构化的长篇创作系统。项目不是简单的文本生成工具,而是完整的创作管理平台,包含项目规划、章节写作、内容审查、实体关系维护等全流程功能。通过深度集成Claude Code的插件生态,它让作者能够在熟悉的开发环境中进行文学创作,将软件工程的最佳实践应用于写作过程。 技术背景:项目基于现代Python技术栈构建,采用模块化的Agent架构,每个创作环节由专门的AI智能体负责。系统集成