实操之STM32 F103C8T6 控制红外循迹避障模块(TCRT5000)

实操之STM32 F103C8T6 控制红外循迹避障模块(TCRT5000)


一、TCRT5000工作原理

在这里插入图片描述

TCRT500主要涉及红外线的发射和接收,‌并根据接收到的反射信号强度来判断地面的颜色。红外循迹传感器模块通常由发射模块和接收模块组成。‌发射模块负责发射红外线,‌而接收模块则用于接收这些红外线的反射信号。‌当红外线照射到地面上时,‌地面会对红外线进行反射。‌不同颜色和物质的地面会对红外线的反射能力产生差异,‌这种差异为循迹车辆提供了判断行进方向的依据。‌

模块上有一个输出指示灯和电源指示灯,主要关注输出指示灯(开关提示)。

红外发射器一直发射红外线,红外线经发射后被接收,此时输出低电平D0=0,输出指示灯点亮LED=0。
黑色是不反射红外线,当循迹模块遇到黑线,模块输出高电平D0=1,输出指示灯熄灭LED=1。

除了遇到黑线熄灭,当距离太远红外线反射后检测不到,此时指示灯也会熄灭。

循迹时,模块离地面要近,在没有遇到黑线时确保指示灯长亮,一旦指示灯熄灭就说明遇到黑线了。

该传感器的探测距离可以通过电位器调节

调节电位器旋钮,从而控制检测距离,有效距离范围2~30cm,工作电压为3.3V-5V。


二、电路图

在这里插入图片描述

三、引脚接线

c8t6TCR5000
PA5D0
3.3V/5.5VVCC
GNDGND

四、代码

1.main.c

#include "stm32f10x_gpio.h" 
#include "led.h" 
#include "track.h"


int main(void)
{
  LED_Init(); //调用初始化LED函数,引用"led.h"后可使用
  track_GPIO_Config();
  while(1)
	{
		LED=1;//灭
		if(track_Scan(track_GPIO_PORT,track_GPIO_PIN) == track_Low)LED=0;//亮
	}
}

2.track.h

代码如下(示例):

#ifndef __TRAK_H
#define __TRAK_H

#include "stm32f10x.h"

#define track_GPIO_CLK	   		RCC_APB2Periph_GPIOA
#define track_GPIO_PIN			GPIO_Pin_5
#define track_GPIO_PORT			GPIOA               //PA5

#define track_High			1
#define track_Low			0

void track_GPIO_Config(void);
uint8_t track_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

#endif /* __TRAK_H */

3.track.c

#include "track.h"

void track_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(track_GPIO_CLK,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=track_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; 	
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(track_GPIO_PORT, &GPIO_InitStructure);
}

uint8_t track_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
	if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==track_Low)
		return track_Low;
	else
		return track_High;
}

<think>好的,我现在需要帮助用户现基于STM32循迹小车,使用TB6612驱动器通过PWM控制电机,并集成红外循迹避障模块。首先,我得理清整个系统的组成部分以及各部分之间的连接和工作原理。 首先,用户提到的硬件包括STM32单片机、TB6612电机驱动模块红外循迹模块红外避障传感器。我需要确认这些模块的连接方式和控制方法。TB6612相比L298N效率更高,应该更合适,但需要了解其接口和PWM控制逻辑。红外模块通常使用TCRT5000之类的传感器,输出数字或模拟信号,用于检测黑线或障碍物。 接下来是系统框架。主控STM32需要生成PWM信号控制TB6612,进而驱动电机。同时,需要读取红外循迹模块的信号来调整小车方向,避障传感器则用于检测前方障碍物并做出反应。这需要STM32的GPIO、定时器(用于PWM)、可能的中断处理以及ADC(如果红外模块输出模拟信号)。 然后是硬件连接部分。TB6612的输入包括PWMA、AIN1、AIN2控制电机A,同理电机B。STM32的定时器通道需要连接到PWMA和PWMB,同时GPIO控制方向引脚。红外循迹模块的输出可能需要连接到GPIO输入,避障传感器类似,可能需要配置为上拉或下拉输入。 软件部分需要初始化PWM,配置定时器的频率和占空比,设置GPIO为输入以读取传感器数据。主循环中需要不断读取循迹模块的状态,根据左右传感器的信号调整电机转速,现转向。避障传感器触发时,可能需要停止电机或改变方向。 可能的问题包括PWM频率的选择,TB6612的控制逻辑是否正确,红外传感器的灵敏度和阈值设置,以及电机响应时间。此外,电源管理也很重要,确保电机驱动和单片机供电稳定。 用户可能需要示例代码,所以需要提供PWM初始化的部分,以及如何读取传感器和调整电机方向的逻辑。同时,要提醒他们注意传感器安装位置和调试方法,比如通过串口输出传感器值来调整阈值。 最后,根据用户提供的参考引用,虽然他们之前可能使用过L298N,但TB6612的接线和控制略有不同,需要特别指出差异,比如更少的发热和更高的效率,但控制逻辑类似,方向引脚和PWM配合使用。 总结步骤:硬件连接→PWM配置→传感器读取→逻辑控制→调试优化。确保每个部分都详细说明,特别是TB6612与STM32的接口,以及如何处理多传感器输入来控制电机。</think>### 基于STM32循迹避障小车现方案 #### 一、系统框架设计 本方案包含STM32F103C8T6主控、TB6612电机驱动模块、2路红外循迹模块和2路红外避障传感器,系统架构如下: $$系统架构图$$ STM32通过PWM控制电机转速[^1],红外传感器组时采集环境信息,形成闭环控制系统。 #### 二、硬件连接 1. **TB6612电机驱动** - PWMA→TIM2_CH1 (PA0) - AIN1→PC0 - AIN2→PC1 - STBY→3.3V - 电机接口接直流电机 2. **红外传感器** - 循迹模块L→PA4 - 循迹模块R→PA5 - 避障传感器L→PA6 - 避障传感器R→PA7 #### 三、PWM控制现 使用TIM3产生20kHz PWM信号: ```c // PWM初始化代码 void PWM_Init(uint16_t arr, uint16_t psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler = psc; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); } ``` #### 四、核心控制逻辑 1. **循迹算法** - 双路红外检测黑线时: $$V_{left} = V_{base} + K_p \cdot \Delta, V_{right} = V_{base} - K_p \cdot \Delta$$ 其中$\Delta$为偏差量,$K_p$为比例系数 2. **避障策略** | 传感器状态 | 执行动作 | |------------|----------------| | 左障右无障碍 | 右转脉冲 | | 右障左无障碍 | 左转脉冲 | | 双障 | 后退+转向 | #### 五、系统调试要点 1. 使用逻辑分析仪验证PWM波形 2. 通过串口打印传感器状态: ```c printf("TrackL:%d TrackR:%d ObstacleL:%d ObstacleR:%d\n", GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4), GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5), GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6), GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)); ``` 3. 调整电机死区电压:通过验确定最小有效PWM占空比
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值