STM32寻迹小车

第一次发博客,以及第一次坐智能小车,可能有很多瑕疵和不足。

一、项目时间:2022.11.19~11.22

二、实现效果:小车进行循迹行驶

三、使用模块:

  1. STM32F103RCT6核心板 * 1
  2. L298N电机驱动模块 * 2
  3. TCRT5000L五路红外循迹传感器模块 * 1
  4. DC3V-6V黄色直流减速电机-TT * 4
  5. 锂电池组电源 12V * 2
  6. OLED屏幕-四针 * 1
  7. LM2596降压模块(新款DC-DC可调稳压电源模块)*1
  8. DC - DC 12V装3.3v 5v 12v 电源模块

 四、基础使用方式:

  1. OLED显示循迹模块反馈状态【例如:10001】
  2. 电机驱动1【采用左右轮倒转实现拐弯】
  3. 电机驱动2【1块控制左轮,一块控制右轮】
  4. 循迹模式【转角力度不同】
  5. 降压模块【提供稳定3.3v供电】

五、代码: 

1、OLED屏(就写一些用的到的函数)

/**
  * @brief  OLED显示数字(十进制,正数)
  * @param  Line 起始行位置,范围:1~4
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~4294967295
  * @param  Length 要显示数字的长度,范围:1~10
  * @retval 无
  */
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{
	uint8_t i;
	for (i = 0; i < Length; i++)							
	{
		OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0');
	}
}

2、 电机控制

(1)PWM

#include "stm32f10x.h"                  // Device header

#include "PWM.h"

void PWM_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;			//GPIO配置结构体定义
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;	//TIM配置结构体定义
	TIM_OCInitTypeDef TIM_OCInitStructure;//

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE);							//使能定时器时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);	//使能GPIO外设和AFIO复用功能模块时钟
	
	//配置IO口模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;															  //复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7;//配置输出引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;														  //设定引脚速率
	GPIO_Init(GPIOA,&GPIO_InitStructure);																	  //根据结构体参数初始化GPIOA
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;			//复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;	//配置GPIO端口
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//设定引脚速率
	GPIO_Init(GPIOB,&GPIO_InitStructure);					//根据结构体参数初始化GPIOB
	
	TIM_DeInit(TIM3);	//初始化TIM3
	TIM_DeInit(TIM2);	//初始化TIM2
	
	//配置时基单元 ————
<think>好的,我现在需要帮助用户查找关于STM32控制的小车循迹项目的资料,包括教程、代码示例和硬件连接方法。首先,我应该回顾用户提供的站内引用,看看有没有相关的内容。 用户提到了三个引用:[^1]、[^2]、[^3]。引用[^1]是关于基于STM32的红外循迹小车设计与实现的,里面提到了硬件选择和软件设计,还有参考文献,比如STM32参考手册和红外传感器技术手册,这应该和用户的查询直接相关。引用涉及移动网络控制和语音识别,可能相关性不大,但用户可能需要扩展功能的话可以提到。引用提到了STM32引脚的重映射,可能和硬件连接中的引脚配置有关,特别是JTAG/SWD复用功能,这可能在调试或连接传感器时用得上。 接下来,我需要组织回答的结构。用户需要教程、代码示例、硬件连接方法,可能需要分点回答。首先,硬件连接部分,可能需要列出主要模块,比如STM32主控、红外传感器、电机驱动模块、电源模块等,并说明它们如何连接。例如,红外传感器通常使用GPIO或ADC引脚,电机驱动模块可能需要PWM引脚,这些都需要参考引用中的资料。 然后,软件设计部分,可能需要包括初始化配置、传感器数据读取、循迹算法(比如PID控制)、电机控制等。代码示例可能来自引用中的示例,比如引用提到的小车设计,可能涉及到如何读取红外传感器的数据,并根据数据调整电机速度。需要确保代码示例符合STM32的开发环境,比如使用HAL库或标准库。 另外,用户可能需要教程或项目示例,可以建议参考引用中的文献,比如STM32参考手册和红外传感器技术手册,或者推荐一些常见的资源平台,如GitHub、电子论坛等,但根据用户的要求,应该优先使用站内引用中的资料。 还需要注意用户提到的引脚重映射问题,引用中的内容,可能需要提醒用户在连接传感器或调试接口时,注意引脚复用的情况,避免冲突。 最后,生成相关问题,可能需要围绕STM32小车循迹的扩展功能、常见问题解决、算法优化等方面提问,确保问题与主题相关,并基于已有的引用内容。 现在需要检查是否有遗漏的部分,比如硬件连接的具体引脚配置,是否需要更详细的说明?例如,红外传感器一般接在哪些引脚,电机驱动模块如何连接。同时,代码部分是否需要更具体的示例,比如使用PWM控制电机速度,或者ADC读取传感器的模拟信号。 另外,用户可能需要知道如何调试或优化循迹小车,比如调整PID参数,或者如何处理传感器噪声,这些可以放在相关问题中。 确保回答符合系统级指令,比如行内数学公式使用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式。同时,使用中文,结构清晰,分步骤说明,引用正确标注。</think>关于STM32控制的小车循迹项目,以下是综合站内引用资料整理的实现要点: --- ### 一、硬件连接方法 1. **核心控制器**:STM32F103C8T6(最小系统板)作为主控,通过GPIO和PWM引脚连接外设[^1]。 2. **红外传感器模块**: - 使用5路红外传感器(如TCRT5000) - 传感器输出引脚连接至STM32的ADC或GPIO(如PA0-PA4) - 注意引脚复用问题,需参考手册配置JTAG/SWD复用功能重映射[^3] 3. **电机驱动模块**: - 采用L298N或TB6612驱动芯片 - 连接STM32的PWM引脚(如TIM3_CH1-CH4)到驱动模块输入 4. **电源系统**: - 独立供电电机驱动(7-12V电池) - 3.3V稳压模块为STM32供电 --- ### 二、软件设计示例 ```c // 红外传感器读取(示例) void Read_Sensors(void) { sensor1 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); sensor2 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // ...其他传感器 } // PID控制算法实现 void PID_Control(float Kp, float Ki, float Kd) { static float integral = 0, last_error = 0; float error = Calculate_Error(); // 根据传感器状态计算偏差 integral += error; float output = Kp*error + Ki*integral + Kd*(error - last_error); last_error = error; Set_Motor_Speed(output); // 设置电机差速 } // 电机控制函数 void Set_Motor_Speed(int speed) { __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, speed + OFFSET); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, speed - OFFSET); } ``` --- ### 三、关键实现步骤 1. **引脚配置**: - 通过STM32CubeMX配置: - ADC通道用于模拟量传感器 - PWM输出通道控制电机 - GPIO输入模式用于数字量传感器[^1] 2. **循迹算法**: - 基础方案:开关量判断轨道位置 - 进阶方案:PID控制实现平滑转向 - 可参考公式:$$u(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt}$$ 3. **调试技巧**: - 使用串口打印传感器数据(USART模块) - 通过示波器观察PWM波形 - 使用ST-Link进行在线调试[^3] ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值