基于STC32的自动光靶小车系统项目总结

        自动光靶小车系统是2023年广西大学生电子设计竞赛第一阶段题目D题,选择这个题目主要是为了23年全国大学生电子设计竞赛积累经验,本项目综合度较高,涉及经典PID控制算法、多种传感器的使用、常用的无线通信、常用的电机驱动模块等,能有效锻炼自己的能力

        先上实物图:

         这是早期的照片,后来更新了小车主板,减少杜邦线,新的小车如下图:

 

        赛题题目如下:(仅发挥部分)

        

         考虑以现有的有效资源为基础;

        小车系统以3D打印倒三轮智能小车为平台,采用STC公司开发的STC32G单片机做主控,直流电机采用TB6612模块驱动,电源采用 11.1V 充电锂电池和DC-DC大电流直流降压电源模块,传感器使用两路红外模拟量循迹模块,电机采用MG310直流电机

        中心激光控制系统安装有openMV摄像头模块,通过对openMV的编程,使其检测光靶坐标并通过串口发送给主控单片机(STC32)。主控单片机接收坐标信息,通过对坐标的比较,进行PID运算后使用A4988驱动模块驱动42步进电机使整个系统旋转,保证光靶一直处于摄像头中心位置,达到追踪光靶要求。

        TB6612 相比于L298N,TB6612有很多改进的优点:发热小,无需散热片,支持高达100KHz的PWM输入(L298N是0-20KHz),体积小,外围电路简单,只需要外接电源滤波电容就可以直接驱动电机因此选择TB6612作为小车电机驱动。

        通信方面用的模块是蓝牙模块。蓝牙模块拥有低价格,轻量化等特点为小车减轻负担更。此外,我之前对蓝牙模块有丰富的使用经验,其有着更多的理解,因此选择蓝牙模块,中心激光控制系统作为主设备发送信号,小车系统作为从设备接收信号,通过无线电波连接,主、从设备均可收发信号。

        光靶跟踪我使用的是摄像头方案,我用openMV来对光靶坐标识别,很多人对openMV的评价就是“电赛神器”。它是一个国外的开源项目,有颜色识别、形状识别、数字识别、人脸识别等众多功能,结合官方IDE开发工具,可以快速对其进行开发,使用python语言开发,上手门槛低,经过一段时间的学习便可做出相当不错的效果。

        关于小车的循迹方案,我使用两路模拟量红外模块进行循迹,该模块可将光强信号转换为电压信号,红外传感模块将检测到的信号发送给STC32G,由STC32G计算两路AD的差值,判断小车与引导线的相对位置。若差值为负数则引导线在小车左侧,小车应该向左转向。若差值为正数则引导线在小车右侧,小车应该向右转向。若差值为等于0则引导线在小车正中间,小车应该向前走。小车左右转向的量由PID进行计算以保证循迹的流畅性。PID我是通过https://blog.csdn.net/skythinker616/article/details/123019829?spm=1001.2014.3001.5506 这篇博客学习的,我认为这篇博文写得通俗易懂,并且配有线上模拟仿真平台能更直接的理解PID。最终小车的循迹效果也确实很丝滑,以下是循迹部分的代码:

//========================================================================
// 描述: 两路模拟量循迹
// 参数: None.
// 返回: None.
//========================================================================
void XUNJI()
{
	float r,l;
	float feedbackValue;		//这里获取到被控对象的反馈值
    float targetValue = 0;		//这里获取到目标值
	
	r = Get_ADCResult(6);		//获取adc
	l = Get_ADCResult(7);
	
	feedbackValue = r - l;						//这里获取到被控对象的反馈值
    PID_Calc(&mypid,targetValue,feedbackValue);	//进行PID计算,结果在output成员变量中
	
	motor_L(1,speed - mypid.output);
	motor_R(1,speed + mypid.output);
}

其余代码暂不做展示

        关于ABCD标志点的识别,小车系统在车头与车右侧安装了三路红外数字量传感器。车头两路红外数字量传感器用于识别ABCD四个标志点,当小车行驶到标志点处时,两路红外传感器同时为高电平。车右侧一路红外数字量传感器用于在内圈识别A点位置,由于车宽,小车在内圈行驶时右侧传感器可检测到位于外圈的标志点,当小车在内圈行驶时对右侧传感器进行高电平计数,计一次数等于经过一个标志点。通过以上方式可控制小车在每个标志点的动作。

        采用自制的STC32G功能拓展板,内含电机、电机驱动、循迹等模块的接口,减少单片机外接引线。PCB图如图:

 

本项目在两项课程评比以及校赛评比中,均获得高分成绩。

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
基于STM32F103R6的小车系统开发,是一项将STM32F103R6单片机和相关硬件组件结合起来,实现一个功能完善的小车系统的过程。 首先,我们需要准备STM32F103R6单片机开发板,该开发板具有丰富的外设接口和强大的计算能力,非常适合用于小车系统开发。然后,我们需要根据需求选择合适的电机驱动模块、传感器模块等硬件组件,以实现小车的基本功能,如运动控制、距离检测等。 在软件方面,我们可以使用Keil MDK开发环境来进行程序开发。首先,我们需要编写适配STM32F103R6的驱动程序,以实现对各个硬件模块的控制。例如,编写电机驱动程序,可以通过PWM信号控制电机的转速和方向;编写传感器驱动程序,可以读取传感器的数据。然后,我们可以编写控制算法,用于实现小车的自主导航、避障等功能。最后,我们可以编写上位机程序,通过串口或无线通信,与小车进行通信,监控和控制其运行。 在开发过程中,我们需要充分发挥STM32F103R6单片机的性能,合理利用中断、定时器等高级特性,提高系统的实时性和稳定性。同时,我们需要对电源管理进行合理设计,以确保系统的稳定供电和节能。 综上所述,基于STM32F103R6的小车系统开发需要综合考虑硬件和软件方面的因素,合理设计系统架构和程序流程,最终实现一个功能完善的小车系统
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值