基于stm32的智能小车设计
图2.29 施密特触发器特性图
当输入端的电压发生转化时,只要在比较电压值附近的干扰不超过du之值,输出的电压就不会改变。R4正反馈的引入,不仅提高了电路的处理速度,而且可以免除由于寄生电路耦合而产生的自己震荡。但是,在提升电路的处理速度的同时,带来的缺点就是分辨率降低,因为只要在du附近输出的电压值就不会改变。
2.4.2 循迹模块电路设计
IR5探测器的集成模块的电路原理图如图2.30所示:
图2.30 红外循迹模块电路图
2.4.3 红外循迹模块程序设计
根据电路原理图,我们对循迹子程序进行设计,循迹子程序流程图如图2.31所示:
- 30 -
基于stm32的智能小车设计
开始系统初始化前进否检测是否出界是是小车右转是否左侧出界否小车右转循迹子程序结束
图2.31 循迹子程序流程图
我们在循迹程序设计中,主要工作为: 1、配置管脚与红外探测器的对应关系
当红外探测器模块在黑带上方时,输出为0。当红外探测器模块在白色上方时,输出为1。因此我们采用中断的方式进行循迹,因为采用的是4路循迹,所以我们需要4个管脚与其一一对应,对应关系如下表:
表2-3管脚与红外探测器位置对应关系表 管脚名称 PE1 PE2 PE3 PE4
红外探测器位置
左 最左 右 最右
在配置好管脚与红外位置关系之后,我们就需要进行中断初始化,中断程序上文2.1.4节中已经讲过,我们在这里就不做介绍。 2、编写中断服务函数
我们在中断初始化之后,就需要写中断服务函数啦,我们就以PE1为例,当
- 31 -
基于stm32的智能小车设计
PE1的值发生变化时,我们就进入中断服务函数,在中断服务函数中判断红外探测器是否在黑带上方,如果在,此时我们需要使小车向左转,如果不在黑带上方,小车就继续前进。其中断服务函数代码如下:
#define KEY3 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1) void EXTI1_IRQHandler(void) { if(KEY3==0)
{Right_Low();}
EXTI_ClearITPendingBit(EXTI_Line1);} //清除LINE2上的中断标志位
- 32 -
基于stm32的智能小车设计
3.软件调试
上文提到了各个模块的电路设计及其程序设计,本章就根据各个模块的电路设计进行相应的编程。我们使用keil3软件进行程序仿真,然后使用mcuscip软件把我们得到的目标文件烧到处理器中,即程序下载。 3.1 程序仿真
RVMDK源自德国的KEIL公司,是RealView MDK的简称。支持ARM7,ARM9,和最新的Cortrx-M3核处理器,自动配置启动代码,具有强大的软件仿真功能,而且具有启动代码小,性能高的优点,软件keil3的操作主界面如图3.1所示:
图3.1 Keil主界面
在程序仿真中,我们只能观察PC7脚位的电平变化,来判断是否满足超声波的发射条件,而对于超声波发射到接受的高电平持续时间t,我们在程序仿真中是无法观测到的。因此我们只能通过对硬件进行测试,来完成对整个产品设计的考核。PC7的软件仿真结果如下图所示:
图3.2 PC7脚电平仿真图
- 33 -
基于stm32的智能小车设计
3.2 程序下载
串口下载软件使用mcuisp,该软件属于第三方软件,由单片机在线编程网提供,该软件启动界面如图3.2所示:
图3.2 mcuisp启动界面
我们使用mcuisp软件进行程序下载,程序下载图如下所示:
图3.3 mcuisp程序下载图
- 34 -