自动往返电动小汽车基于stm32.docx

上传人:b****3 文档编号:11492272 上传时间:2023-06-01 格式:DOCX 页数:17 大小:275.58KB
下载 相关 举报
自动往返电动小汽车基于stm32.docx_第1页
第1页 / 共17页
自动往返电动小汽车基于stm32.docx_第2页
第2页 / 共17页
自动往返电动小汽车基于stm32.docx_第3页
第3页 / 共17页
自动往返电动小汽车基于stm32.docx_第4页
第4页 / 共17页
自动往返电动小汽车基于stm32.docx_第5页
第5页 / 共17页
自动往返电动小汽车基于stm32.docx_第6页
第6页 / 共17页
自动往返电动小汽车基于stm32.docx_第7页
第7页 / 共17页
自动往返电动小汽车基于stm32.docx_第8页
第8页 / 共17页
自动往返电动小汽车基于stm32.docx_第9页
第9页 / 共17页
自动往返电动小汽车基于stm32.docx_第10页
第10页 / 共17页
自动往返电动小汽车基于stm32.docx_第11页
第11页 / 共17页
自动往返电动小汽车基于stm32.docx_第12页
第12页 / 共17页
自动往返电动小汽车基于stm32.docx_第13页
第13页 / 共17页
自动往返电动小汽车基于stm32.docx_第14页
第14页 / 共17页
自动往返电动小汽车基于stm32.docx_第15页
第15页 / 共17页
自动往返电动小汽车基于stm32.docx_第16页
第16页 / 共17页
自动往返电动小汽车基于stm32.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

自动往返电动小汽车基于stm32.docx

《自动往返电动小汽车基于stm32.docx》由会员分享,可在线阅读,更多相关《自动往返电动小汽车基于stm32.docx(17页珍藏版)》请在冰点文库上搜索。

自动往返电动小汽车基于stm32.docx

自动往返电动小汽车基于stm32

自动往返电动小汽车

 本设计民用STM32作为自动往返小汽车的检测和控制核心,辅以传感器、控制电路、显示电路等外围器件,构成了一个车载控制系统。

路面黑线检测使用反射式红外传感器,利用PWM技术动态控制电动机的转速。

基于这些完备而可靠的硬件设计,使用了一套独特的软件算法,实现了小车在限速和压线过程中的精确控制。

电动小汽车能够根据题目要求在直线方向上完成调速、急刹车、停车、倒车返回等各种运动形式;这辆小车还可以自动记录、显示一次往返时间和行驶距离,并用蜂鸣器提示返回起点。

另外,我们经过MATLAB仿真后,成功地实现了从最高速降至低速的平稳调速.

本系统主要采用模糊控制算法进行速度调节。

通过模糊控制和PWM脉宽调制技术的结合,提高了对车位置控制精度,并且实现了恒速控制。

关键词:

PWM,STM32F103,电机,传感器

前言

嵌入式技术依靠其体积小、成本低、功能强等特点,适应了智能化发展的最新要求。

单片机作为控制系统的微处理器,在数据处理和代码存储等方面都已经无法满足系统的要求,ARM微处理器资源丰富,具有良好的通用性。

Cortex-M3是ARM公司最新推出的第一款基于ARMv7体系的处理器内核.它主要针对MCU领域,在存储系统、中断系统、调试接口等方面做了较大的改进,有别于过去的ARM7处理器;Cortex-M3具有高性能、低功耗、极低成本、稳定等诸多优点,非常适合汽车电子、工业控制系统、医疗器械、玩具等领域。

基于Cortex-M3内核的STM32系列处理器于2007年由ST公司率先推出,它集先进Cortex—M3内核结构、出众创新的外设、良好的功耗和低成本于一体,极大的满足自动控制系统设计要求。

作为先进的32位通用微控制器的领跑者,STM32以其出众的性能、丰富且灵活的外设、很高的性价比以及令人意外的功耗水准,使其自面世以来得到众多设计者的青睐,众多行业领导者纷纷选用STM32作为新一代产品的平台。

因此将STM32F103应用于智能小车的控制系统是一种较好的选择。

基于此,本文提出了一个比较合理的智能小车系统设计方案.整个小车系统以STM32F103芯片为控制核心,附以外围电路,利用红外探测器、触角传感器采集外界信息和检测障碍物;充分利用STM32F103的串口、并口资源和高速的运算、处理能力,来实现小车自动识别路线按迹行走、躲避障碍物,并且通过LCD显示器实时显示小车运动参数;配置STM32F103通用定时器为PWM输出模式产生PWM波,通过步进调节PWM波占空比参数控制电机的转速。

 

第一章系统方案论证与分析

根据题目中的设计要求,本系统主要由主控单片机模块、电源模块、电机驱动模块、黑线检测模块、测速模块以及液晶显示模块构成。

本系统的方框图如下图所示:

STM32

L298电机驱动芯片

黑线检测模块

测速模块

电源模块

TFT显示

1、主控单片机

根据题目要求,控制器主要用于控制电机的运动,黑线的检测以及相关信息的显示。

对于控制器的选择主要有以下两种方案:

方案一:

采用51系列单片机作为控制器。

51系列单片机应用广泛,技术成熟,但是运行速度慢,内部资源较少,且只有2个定时计数器,不满足题目要求。

方案二:

采用STM32作为控制器。

基于Cortex-M3内核的STM32F10x系列芯片是新型的32位嵌入式微处理器,其性能优良,移植性好,提高了对直流电机的控制效率,并对控制系统进行模块化设计,有利于智能小车的功能扩展和升级.

综上,我们选用了方案一,采用了STM32,该单片机价格便宜,资源足够。

2、电动机驱动模块

方案一:

采用达林顿管阵列ULN2003驱动芯片。

ULN2003是7通道高电压、大电流驱动器,并联端口可以加大输出电流,对直流电机具有良好驱动能力。

但其结构决定驱动直流电机只能是单方向的,不能驱动直流电机反转,这与题目要求不符。

方案二:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。

方案三:

采用双H桥驱动芯片L298。

其内部包含4通道逻辑驱动电路,可以方便的驱动两个直流电机,或一个两相步进电机.L298的逻辑电平与51单片机匹配,可以与其直接相连.控制芯片的驱动使能端就可以控制驱动电机的速度。

L298对直流电机具有良好的驱动控制能力,故这里选择方案三。

3、路面黑线检测模块选择

方案一:

采用发光二极管与光敏电阻,利用光敏电阻的阻值变化来控制信号.由于外界光亮条件不定,一旦光线条件改变很可能造成误判和漏判;虽然采取超高亮发光管可以降低一定的干扰,但这用将增加额外的功率损耗。

方案二:

采用红外线控制的反射式红外对管。

红外对管只对红外线具有较高灵敏度,从而避免了外界光线的干扰;跑道黑带能够吸收红外线,而白色跑道能够反射红外线,从而检测到跑道黑带。

方案选择:

光敏电阻的易干扰性和红外对管的单一灵敏行决定方案二具有较好控制作用。

4、里程计算与计时模块选择

方案一:

采用霍尔传感器。

该器件内部由三篇霍尔金属板组成,当磁铁正对金属板时,由于霍尔效应,金属板发生横向导通,发出低电平信号.因此可以在车轮上安装微型磁铁,而将霍尔传感器安装在固定轴上,通过对脉冲的计数进行车速测量.

方案二:

采用检测黑线的方法,每经过一条黑线就增加相应的里程数,并通过定时器计时。

方案选择:

相比而言,方案二不需要另外的传感器,计算方便,定时器也很精确,故选择方案二。

图2。

1电机控制系统框图

由系统框图可看出,小车整个控制系统设计主要包括电机驱动、液晶显示、键盘扩展电路、触角传感电路、红外收发检测电路等模块。

整个系统的硬件电路设计原理图见附录,下面分别介绍各部分模块的设计.

一、主要电路设计

1、STM32F103及外围电路设计

本设计采用STM32F103为主控芯片,则STM32F103芯片的最小系统设计如图1.2、1。

3所示.

图1.2STM32F103芯片最小系统图

图1.3STM32F103芯片最小系统图续

如图1.2、1.3,此部分电路包括系统时钟电路、实时时钟电路、JTAG调试接口电路,复位电路和启动模式选择电路。

下面对部分电路设计做简要说明.

1.时钟电路

系统时钟电路选用8MHZ的HSE晶体作为振荡器晶振。

如图2。

2所示,由R113、Y100(HSE晶振)、C108及C109构成系统时钟电路.HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

实时时钟电路选择LSE时钟模式,如图2。

2所示,由Y101(LSE晶振)、C112及C113构成LSE旁路,提供一个32。

768kHz频率的外部时钟源.LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。

它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源.

2.启动模式选择电路

如图2.3所示,通过BOOT[1:

0]引脚可以选择三种不同启动模式.如下表2—1所示。

表2-1启动模式

启动模式选择引脚

启动模式

说明

BOOT1

BOOT0

X

0

主闪存存储器

主闪存存储器被选为启动区域

0

1

系统存储器

系统存储器被选为启动区域

1

1

内置SRAM

内置SRAM被选为启动区域

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。

此时可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

2、电源电路设计

由于各电路模块所需电压不同,本设计需多种电源供电。

STM32F103主控芯片采用3。

3V供电,电机驱动采用5V与12V,红外收发检测电路采用5V与3.3V,液晶显示与触角传感电路均采用3。

3V供电。

外部电源采用12V的直流电压,因此根据设计要求,本设计进行了电源转换设计.

1。

采用KA7805芯片实现12V到5V的转换.KA7805的作用是输入大于5V的直流电压,输出5V的直流电压,且管脚较少,易于连接和实现,稳定性高。

图2。

4为KA7805芯片引脚接线图。

图2.4KA7805引脚接线图

2。

本设计采用LM1117—3.3芯片将5V转换为3.3V,具体电路设计如图2。

5所示.

图2.5LM1117—3。

3引脚接线图

 

3、电机驱动电路设计

STM32F103芯片外部扩展的电机驱动电路采用L298芯片控制,其基本电路图如图2。

6。

图3。

6电机驱动电路基本电路原理图

如图2。

6所示,小车运动状态通过电机A和B的不同方向转动来实现,电机有正转、反转和停止三种状态,每个电机由一对I/O口进行控制。

表2—2是I/O端口状态与电机制动对照表。

表2—2I/O端口状态与电机制动对照表

电机A

IN1

IN2

电机B

IN3

IN4

停止

0

0

停止

0

0

正转

1

0

正转

1

0

反转

0

1

反转

0

1

1

1

1

1

L298芯片采用5V(VSS)与12V(VS)直压供电,ENA和ENB分别用STM32F103主控芯片的TIM3_CH3和PB1/ADC_IN9/TIM3_CH4控制,产生PWM1和PWM2两路PWM波输出,IN1—IN4分别用PE3-PE6实现I/O输出控制电机转动方向。

在L298与电机之间加入二极管,以保护电路。

4、液晶显示电路设计

液晶显示电路采用2。

4寸TFT显示

 

5、红外探测电路设计

采用反射式光电开关来识别轨迹上的黑线标记信号,如图3所示.这种光电开关的红外发射管和接收管位于同一侧,光敏三极管只能接收反射回的红外光。

当车身下面是黑线时,由于黑线吸收部分光,光敏三极管接收到的红外光不能使光敏三极管导通,光电开关输出高电平,经非门输出低电平。

反之,当车身下面是白色的地面时,红外发射管发射的光经其反射后,被接收管接受,光电开关输出低电平,经非门整形后输出高电平。

将非门的输出接至CPU的INT1输入端.车在前进和后退过程中,小车每过一道黑线,便产生一次中断申请,从而调用相应的子程序,随着小车的不断行驶,相应的程序依次被调用执行,使小车在跑道上按设计要求时快、时慢、时前进、时后退。

 

第三章小车控制系统软件设计

采用单片机STM32为主控制器。

采用C语言进行软件编程实现各种算法和逻辑控制1红外光电检测到的开关信号作为中断源,送入STM32中断源EXTI_Line0;STM32再对中断请求做出响应,并在GPIOB0和GPIOB1口输出控制驱动电路的脉冲和转速;通过GPIOC0、GPIOC1、GPIOC4、GPIOC5驱动电路控制直流电机的转向;显示模块以2。

4寸tft为核心,对记录的结果进行显示.

 

1、前进(带矫正)子程序

voidqianjin()

{

while

(1){//检测到黑,发光12外13内

if(!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))//12亮(高电平)13不亮(低电平)

{

GPIO_SetBits(GPIOC,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_1);

GPIO_SetBits(GPIOC,GPIO_Pin_4);

GPIO_ResetBits(GPIOC,GPIO_Pin_5);

}

elseif(!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)&&!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))//都亮

GPIO_SetBits(GPIOC,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_1);

GPIO_ResetBits(GPIOC,GPIO_Pin_4);

GPIO_ResetBits(GPIOC,GPIO_Pin_5);

}

elseif(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)&&!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))//12亮(低电平)13不亮(高电平)

GPIO_ResetBits(GPIOC,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_1);

GPIO_SetBits(GPIOC,GPIO_Pin_4);

GPIO_ResetBits(GPIOC,GPIO_Pin_5);

}

if(flag==6)

//GPIO_SetBits(GPIOA,GPIO_Pin_4);

break;

}

 

2、后退(带矫正)子程序

voidhoutui()

while

(1){//检测到黑,发光12外13内

if(!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9))//12亮(高电平)13不亮(低电平)

GPIO_ResetBits(GPIOC,GPIO_Pin_1);

GPIO_ResetBits(GPIOC,GPIO_Pin_0);

GPIO_SetBits(GPIOC,GPIO_Pin_5);

GPIO_ResetBits(GPIOC,GPIO_Pin_4);

elseif(!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)&&!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9))//都亮

GPIO_SetBits(GPIOC,GPIO_Pin_1);

GPIO_ResetBits(GPIOC,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_5);

GPIO_ResetBits(GPIOC,GPIO_Pin_4);

}

elseif(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)&&!

GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))//12亮(低电平)13不亮(高电平)

GPIO_SetBits(GPIOC,GPIO_Pin_1);

GPIO_ResetBits(GPIOC,GPIO_Pin_0);

GPIO_SetBits(GPIOC,GPIO_Pin_5);

GPIO_ResetBits(GPIOC,GPIO_Pin_4);

if(flag==12)

{

GPIO_SetBits(GPIOA,GPIO_Pin_4);

break;

}

 

3、横线检测并调速程序

voidEXTI0_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line0)!

=RESET){

EXTI_ClearITPendingBit(EXTI_Line0);

flag++;

if(flag==2||flag==4)//||flag==3||flag==4

pulse=3000;

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

if(flag==3)//||flag==3

{

pulse=2850;

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

if(flag==5)

pulse=2650;

TIM_SetCompare3(TIM3,pulse);

}

if(flag==9)

{

pulse=2900;//2350

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

if(flag==8||flag==10)//flag==7||

{

pulse=3000;//2600

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

if(flag==11||flag==7)

{

pulse=2850;//2600

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

if(flag==12)

{

pulse=0;//2600

TIM_SetCompare3(TIM3,pulse);

TIM_SetCompare4(TIM3,pulse);

}

 

4、显示子程序

voidILI9325_PutString(u16x,u16y,u8*s,u16fColor,u16bColor)

u8row=0;

while(*s)

{

if(*s〈0x80)

ILI9325_PutChar(x+(row〈<3),y,*s,fColor,bColor);

s++;row++;

}

else

ILI9325_PutGB16x16(x+(row<〈3),y,(u8*)s,fColor,bColor);

s+=2;row+=2;

}

 

第四章结论

本文根据设计内容和要求,制定了设计方案,并逐步完成了硬件和软件部分的设计。

整个系统以STM32为主控芯片,实现对小车简单运动的控制,其中硬件部分包括STM32F103及外围电路、电平转换电路、电机驱动电路、液晶显示电路、红外循迹检测电路、触角传感避障电路、键盘扩展电路,完成各部分电路设计并使用PROTEL画出电路设计原理图;软件部分在STM32集成开发环境IAREWARM5。

3下编写各模块程序,包括PWM波输出模块、液晶显示模块、键盘扫描模块、自由行走避障模块和红外循迹模块,并通过主控制程序将各模块融合一起。

整个设计将硬件与软件相结合,实现对小车的控制,使小车能够做出前进、后退、左转、右转等动作,并通过液晶显示器实时显示小车的运动参数,同时可通过键盘输入对小车行走模式进行切换及对小车速度进行调节,并且能够在不同模式下通过传感检测电路实现简单的避障和循迹功能.论文基本完成了硬件和软件的设计,并使之符合设计要求。

本设计与实际应用相结合,利用高性能的STM32F103芯片,辅以各种传感器来检测路面、障碍物等周围环境,通过高可靠性的软件设计,来实现小型电动车的智能控制,具有很强的现实意义。

随着智能控制技术与传感检测技术的飞速发展,作为智能机器人雏形的智能小车在探测、考古、娱乐各领域得到广泛应用,尤其在足球机器人研究方面有很好的发展前景。

在智能机器人发展如火如荼之期,智能小车控制系统的研制为其提供了更有利的研制手段和方法,将有助于推动智能机器人的发展.由于初次接触STM32F10x系列芯片,对其先进的中断响应系统未能很好掌握,传感信号的接收选择了一般I/O口,不过基于STM32F103的高性能,其反应速度还是可以满足设计要求,但要充分利用芯片资源及更好的实时控制在这部分还有待改进;另外,对于小车转弯过程的车速未做区别对待,在本次设计中将PWM波占空比控制在1/2以下,使小车不会因速度过高而导致转弯过程中其方向不易控制。

总的来说,设计方案是比较完善的,基本上达到了设计要求。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2