预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于STM32智能循迹避障小车(设计报告) 具有丰富的外设和存储器资源,能够满足本设计的需求。 在硬件方面,采用了红外对管和超声波传感器来检测道路上的 轨迹和障碍物,并通过PWM调速来控制电动小车的速度。在 软件方面,采用MDK(keil)软件进行编程,实现对小车的自动 循迹和避障,快慢速行驶,以及自动停车等功能。 设计方案 本设计方案主要分为硬件设计和软件设计两个部分。 硬件设计部分主要包括电路原理图的设计和PCB的制作。 在电路原理图的设计中,需要将stm32芯片、红外对管、超声 波传感器、电机驱动模块等元器件进行连接。在PCB的制作 中,需要将电路原理图转化为PCB布局图,并进行钻孔、贴 片等工艺流程,最终得到完整的电路板。 软件设计部分主要包括程序的编写和调试。在程序的编写 中,需要先进行芯片的初始化设置,然后分别编写循迹、避障、 速度控制等功能的代码,并将其整合到主函数中。在调试过程 中,需要通过串口调试工具来进行数据的监测和分析,以确保 程序的正确性和稳定性。 实验结果 经过多次实验测试,本设计方案实现了对电动小车的自动 循迹和避障,快慢速行驶,以及自动停车等功能。在循迹和避 障方面,红外对管和超声波传感器的检测精度较高,能够准确 地控制小车的运动方向和速度;在速度控制方面,PWM调速 的方式能够实现小车的快慢速行驶,且速度控制精度较高;在 自动停车方面,通过超声波传感器检测到障碍物后,能够自动 停车,确保了小车的安全性。 结论 本设计方案采用stm32为控制核心,利用红外对管和超声 波传感器实现对电动小车的自动循迹和避障,快慢速行驶,以 及自动停车等功能。在硬件方面,电路结构简单,可靠性能高; 在软件方面,采用MDK(keil)软件进行编程,实现了程序的稳 定性和正确性。实验测试结果表明,本设计方案能够满足题目 的要求,具有一定的实用性和推广价值。 内核采用ARM32位Cortex-M3CPU,最高工作频率为 72MHz,1.25DMIPS/MHz,具有单周期乘法和硬件除法功能。 存储器方面,片上集成32-512KB的Flash存储器和6-64KB的 SRAM存储器。时钟、复位和电源管理方面,支持2.0-3.6V 的电源供电和I/O接口的驱动电压。具有上电复位(POR)、 掉电复位(PDR)和可编程的电压探测器(PVD)功能。支持 4-16MHz的晶振和内嵌出厂前调校的8MHzRC振荡电路,以 及内部40kHz的RC振荡电路。此外,还具有用于CPU时钟 的PLL和带校准用于RTC的32kHz的晶振。低功耗方面,支 持三种低功耗模式:休眠、停止和待机模式,并为RTC和备 份寄存器供电的VBAT。调试模式方面,支持串行调试 (SWD)和JTAG接口。DMA方面,具有12通道DMA控制 器。支持的外设包括定时器、ADC、DAC、SPI、IIC和 UART。 一调速系统方案采用脉宽调速系统。PWM调速系统具有 开关频率高、电流波形好、装置效率高等优点,因此本设计采 用了H型单极型可逆PWM变换器进行调速。脉宽调制式变 换器是脉宽调速系统的主电路。可逆PWM变换器采用双极式 H型变换器,由4个三极电力晶体管和4个续流二极管组成的 桥式电路。 二检测系统主要实现光电检测,即利用各种传感器对电动 车的避障、位置、行车状态进行测量。本系统采用反射式红外 线光电传感器进行检测,用于检测路面的起始、终点(黑线)。 玩具车底盘上沿黑线放置,以适应起始的记数开始和终点的停 车的需要。 下面是经过修改后的文章: 有光敏特征的PN结属于光敏二极管,具有单向导电性, 因此工作时需加上反向电压。在无光照时,有很小的饱和反向 漏电流(暗电流)。此时光敏管不导通。当光照时,饱和反向 漏电流马上增加,形成光电流。在一定范围内,它随入射光强 度的变化而增大。因此,当红外发射出的信号被接收管接收到 时,就会返回电平信号。通过芯片对信号进行处理,就能通过 红外来控制小车的运动。以下是主程序代码: voidHongWai_Init(void) TIM_OCInitTypeDefTIM_OCInitstrut; TIM_OCInitstrut.TIM_____OCIdleState_Set; TIM_OCInitstrut.TIM_____OCNIdleState_Reset; TIM_OC3Init(TIM3.&TIM_OCInitstrut); TIM_OC3PreloadConfig(TIM3.TIM_OCPreload_Enable); TIM_OC4Init(TIM3.&TIM_OCInitstrut); TIM_OC4Prel