基于STM32的智能循迹小车设计(基础版)

基于STM32的智能循迹小车设计(基础版)

硬件准备

1、小车底盘+四直流电机(带轮)

在这里插入图片描述

2、STM32F103C8T6核心板

在这里插入图片描述

3、12V 8700mAh锂电池(可以用几节18650锂电池)

在这里插入图片描述

4、循迹模块

选择的是TCRT500L,五路集成在一起,集成度比较高,但是可能不如五个单独的循迹模块好用
在这里插入图片描述
5、L298N电机驱动模块
四驱车为啥用L298N电机驱动模块?
可以把左边的两个电机并联,用输出A控制。把右边的两个电机并联,用输出B控制。
在这里插入图片描述
12V供电接电源正极,供电GND接电源负极和核心板GND,5V供电接核心板5V和循迹模块5V,然后循迹模块GND接核心板GND,所有设备就都可以上电了。(最好设置几个开关,安全且方便调试)
另外,接线最好先试触,避免短路。

6、杜邦线、开关若干

软件设计

1、电机调速

通过输出PWM控制电机转速

PWM初始化(以A1为例)

void TIM2_CH2_PWM_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
	TIM_OCInitTypeDef  TIM_OCInitStructure;//定义三个结构体
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);  
//开启相关时钟

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
 //A1 GPIO初始化
	TIM_TimeBaseStructure.TIM_Period = 199; 
	TIM_TimeBaseStructure.TIM_Prescaler =7199; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
	// 定时器初始化
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);  
	//定时器通道初始化
	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 
 	//预装值初始化
	TIM_Cmd(TIM2, ENABLE);  	
	//打开定时器
}

初始化完后,输出PWM控制电机转速,注意,TIM_SetCompare2(TIM2,n);n越小占空比越大,点假转速越快,一下代码就是A1输出PWM占空比更大,它所对应的电机转速就越快。 具体的数据是多少,需要自己根据不同的场地去摸索,不停地调试。

void left()
{
		TIM_SetCompare2(TIM2,20); 
		TIM_SetCompare3(TIM2,120);
}

2、循迹模块检测

GPIOB初始化,同时将B4 B5 B6 B7 B8设置为上拉输入

void GPIOB_Init()	
{
  GPIO_InitTypeDef GPIO_InitStructure;	
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); 
	
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5  | GPIO_Pin_6 | GPIO_Pin_7| GPIO_Pin_8;	
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure); 
}

宏定义,少打字,B4 B5 B6 B7 B8 分别对应L1 L2 M R2 R1

#define L1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)
#define L2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
#define M GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)
#define R2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
#define R1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) // L1 L2 M R2 R1 

读取函数

void Read_Date(void)
{
 	L1;
	L2;
	M;
	R2;
	R1;
}

3、主函数(用读取的循迹数据控制电机)

用了一个比较笨的但是很直接的方法,将所有的情况都罗列出来。
思路:如果L1检测到,那必须bigright;如果R1检测到,那必须bigleft;
那中间的那三位,还有8种,将这8种枚举就可。

int main()
{
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	USART1_Init(9600);
	GPIOB_Init();
	TIM2_CH2_PWM_Init();
	TIM2_CH3_PWM_Init();
	while(1)
	{	
		Read_Date();
	 if(L1==0&&L2==0&&M==0&&R2==0&&R1==0)
	  {
	  go();		
	  delay_ms(10);
	  }
		
	 if(L1==0&&L2==1&&M==1&&R2==1&&R1==0)
	  {
	 go();      
	  delay_ms(10);
	  }	  
		if(L1==0&&L2==0&&M==1&&R2==0&&R1==0)
	  {
	 go();      
	  delay_ms(10);
	  }	  
	 if(L1==0&&L2==1&&M==0&&R2==0&&R1==0)
	  {
	 right();   
	  delay_ms(10);
	  }
 	 if(L1==0&&L2==0&&M==0&&R2==1&&R1==0)
	  {
	 left();   
	  delay_ms(10); 
	  }
		if(L1==0&&L2==1&&M==1&&R2==0&&R1==0)
	  {
	  right();   
	  delay_ms(10); 
	  }
		if(L1==0&&L2==1&&M==0&&R2==1&&R1==0)
	  {
	  go();   
	  delay_ms(10); 
	  }
		if(L1==0&&L2==0&&M==1&&R2==1&&R1==0)
	  {
	  left();   
	  delay_ms(10); 
	  }
	  if(R1==1)
	  {
	  bigleft();   
	  delay_ms(10);
	  }
	  if(L1==1)
	  {
	  bigright();
	  delay_ms(10); 
	  }
  }	
}


工程文件现已上传到资源,2积分即可下载。

随着科技的不断进步和应用场景的不断扩大,基于STM32循迹小车成为了近年来备受关注的智能机器人之一。将STM32单片机作为控制核心,实现对小车的各项功能控制,对于提高小车的稳定性、可靠性和安全性,具有重要的意义。 基于STM32循迹小车的可行性主要体现在以下几个方面: 首先,STM32单片机具备高性能和高可靠性,能够实现对小车的精确控制。STM32单片机采用ARM架构,具有高速运算、低功耗等优点,能够满足循迹小车对高速运算和低功耗的需求。同时,STM32单片机具有强大的抗干扰能力和稳定性,能够保证小车的控制系统的可靠性和稳定性。 其次,基于STM32循迹小车设计和实现相对简单,适合初学者学习和开发。STM32单片机具备完善的开发环境和丰富的应用资源,可以轻松实现嵌入式开发,对于初学者来说非常友好。此外,基于STM32循迹小车设计和实现可以采用模块化的方式,便于调试和维护。 最后,基于STM32循迹小车的性价比较高,适合商业应用。STM32单片机具有较低的成本和广泛的应用领域,可与其他模块组合使用,具有较好的灵活性和可扩展性。基于STM32循迹小车可以通过集成传感器、图像识别等硬件模块,实现智能化的控制。 综上所述,基于STM32循迹小车具有较高的可行性和应用前景,可以满足不同领域的需求。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值