基于STM32的汽车外后视镜控制模块设计

2021-08-04 11:08令狐昌伟
汽车电器 2021年7期
关键词:摇杆后视镜端口

令狐昌伟

(湖南汽车工程职业学院,湖南 株洲 412000)

1 引言

近年来,随着汽车保有量的提高,汽车行驶安全越来越受大家的关注,车外后视镜所反馈的信息对驾驶员驾驶汽车的安全性也越来越重要。据统计,中国因汽车后视镜反馈信息不准确而造成的交通事故占交通事故总数的30%,因此,车外后视镜角度调节成为了汽车必不可少的装置之一,随着汽车行业的不断发展,后视镜角度调节从最初的手动到现在的电动控制,给驾驶员对车外信息的捕捉带来了很大的便利。

2 系统方案设计

本设计主要由信号输入装置、控制装置、执行装置三大部分组成。信号输入装置主要是通过摇杆电位器、LM393组成的信号检测装置组成,控制装置是采用了STM32F103做为主控芯片,主要是将输入信号进行数据处理,从而控制执行装置中的两个电机实现正转与反转功能。系统结构框图如图1所示。

图1 设计框图

3 硬件设计

3.1 单片机最小系统设计

STM32F103C8T6单片机最小系统电路包括系统供电电路、系统复位电路、时钟电路等,它是保证单片机能够正常工作的基本电路,电路如图2所示,时钟电路由晶振Y1和起振电容C1、C2组成的系统待机低功耗时钟,另外由Y2、C3、C4和R2晶振电阻组成,该时钟主要用于外部高频,PLL倍频等。复位电路由电阻R3、电容C5和按键S1组成,按下S1键时可以实现手动复位。

图2 最小系统图

3.2 摇杆电位器信号检测电路设计

摇杆是作为用户输入操作的元器件,但其本身只是个电位器,所以需要配合外部电路组合成一个比较电路,从而获得用户输入的行为值。在本设计的摇杆输入模块里,采用的是LM393和可调电位器组成的比较输出电路,具有灵敏度可调性和输出准确性。摇杆电位器的电压值与调整好的比较电压值进行比较,检测出目前摇杆所处的具体位置,根据OUT1和OUT2来决定步进电机1的动作,OUT3和OUT4来决定步进电机2动作,如此即可根据两个步进电机的正反转来控制汽车外后视镜的旋转角度。信号比较检测电路如图3所示。

图3 信号比较检测电路

3.3 步进电机驱动电动设计

ULN2003是集成达林顿管IC,内部还集成了消线圈反电动势的二极管,是一个双列直插式16脚封装IC,最大驱动电压可达50V,电流可达500mA,输入电压为5V,适用于TTL、COMS电路,它具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高束大功率驱动的系统。

步进电机,我采用了四相小步进电机来带动后视镜。主要是因为采用频进电机的最大的好处是路程长度可以精确控制,而具不易出现打滑的现象。我们为电机提供了单极性直流电源,在控制时,只需对各相绕组按合适的时序通电,即可使步进电机按我们的需要转动。步进电机驱动电路如图4所示。

图4 步进电机驱动电路

4 程序设计

本设计主要包括了主程序、输入检测、输出检测和步进电机控制程序组成。通过控制步进电机1和步进电机2来完成对后视镜的角度调节。步进电机1正转时后视镜向北偏转,反转时向南偏转,步进电机2正转时后视镜向东偏转,反转时向西偏转,当步进电机1和2同时正转时,后视镜可向东北方向偏转,步进电机1正转,2反转时,即可向西北方向偏转,以此类推,可以控制东南和西南方向的偏转控制。要实现上述控制功能,需要进行如下程序设计,详见图5。

图5 程序设计

4.1 主程序设计

主程序的基本设计思路是将摇杆电位器所传来的电压信号通过输入信号检测电路进行比较输出,如果电位器处于中心位置时,摇杆电位器中心输出电压为2.35V,单片机将依据电压信号对摇杆电位器置0信号进行检测,判断是否需要控制电机运转,如得到摇杆电位器处在非0位置,则会将此时比较器输出的电压信号作为步进电机的驱动指令信号,该信号送入STM32单片机中进行处理,通过数据处理后将该指令经单片机输出送给步进电机驱动电路,从而控制步进两个步进电机实现正反转,最终使得后视镜的角度发生变化。如图5所示。

通过不断的对摇杆位置判断直至检测置0,步进电机停止。

4.2 输入检测

输入检测所采用的是位带操作,直接读取寄存器状态,代码如下。

#define GPIOA_OOR_Addr (GPIOA_BASE+12)

#define GPIOB_OOR_Addr (GPIOB_BASE+12)

#define GPIOC_OOR_Addr (GPIOC_BASE+12)

#define GPIOD_OOR_Addr (GPIOD_BASE+12)

#define GPIOE_OOR_Addr (GPIOE_BASE+12)

#define GPIOF_OOR_Addr (GPIOF_BASE+12)

#define GPIOG_OOR_Addr (GPIOG_BASE+12)

#define GPIOA_OOR_Addr (GPIOA_BASE+8)

#define GPIOB_OOR_Addr (GPIOB_BASE+8)

#define GPIOC_OOR_Addr (GPIOC_BASE+8)

#define GPIOD_OOR_Addr (GPIOD_BASE+8)

#define GPIOE_OOR_Addr (GPIOE_BASE+8)

#define GPIOF_OOR_Addr (GPIOF_BASE+8)

#define GPIOG_OOR_Addr (GPIOG_BASE+8)

#define PAout(n)BIT_ADDR(GPIOA_OOR_Addr,n)

#define PAin(n) BIT_ADDR(GPIOA_IOR_Addr,n)

#define PBout(n)BIT_ADDR(GPIOB_OOR_Addr,n)

#define PBin(n) BIT_ADDR(GPIOB_IOR_Addr,n)

#define PCout(n)BIT_ADDR(GPIOC_OOR_Addr,n)

#define PCin(n) BIT_ADDR(GPIOC_IOR_Addr,n)

#define PDout(n)BIT_ADDR(GPIOD_OOR_Addr,n)

#define PDin(n) BIT_ADDR(GPIOD_IOR_Addr,n)

#define PEout(n)BIT_ADDR(GPIOE_OOR_Addr,n)

#define PEin(n) BIT_ADDR(GPIOE_IOR_Addr,n)

#define PFout(n)BIT_ADDR(GPIOF_OOR_Addr,n)

#define PFin(n) BIT_ADDR(GPIOF_IOR_Addr,n)

#define PGout(n)BIT_ADDR(GPIOG_OOR_Addr,n)

#define PGin(n) BIT_ADDR(GPIOG_IOR_Addr,n)

通过上述代码对位带操作读取端口进行定义,需要调用时直接读取类似“xflag”类似的宠定义即可检测出当前端口状态。代码如下。

#include”H.h”

Int main()

{

SystemInit();

STEP_MOTOR_Init();

YG_GPIO_Config();

TIM2_Configuration();

While(1)

{

Auto_Kong(_xflag,_Yflag,Xflag,Yflag);

}}

4.3 输出控制端口初始化

输出控制,我们采用的是ULN2003芯片,该芯片只是接收高电平或者低电平就会在相应的驱动输出端给输对应的驱动电压信号,而在本产品中输出控制我们只采用了GPIOB组的端口,因此,输出端口的配置我们只需要进行普通配置即可。在配置端口的时候我们需要注意的是PB3和PB4两个端口需要有JTAG和SW功能,需要将其重新映射才能作为普通GPIO功能使用。端口配置完成后,首先应该给端口赋值,使电机的状态为停止运行状态。争对ULN2003芯片而言,我们只需将端口初始值赋予低电平即可。

4.4 步进电机控制程序设计

设计时采用的是两个四相八拍步进电机,在进行程序设计时将其封装一个函数,然后进行电机控制程序设计,设计思路如下。

1)判断X轴或Y轴电机的选取状态。

2)判断步进电机的旋转状态是正转或反转。

3)有效电机的状态位增/减。

4)判断状态位是否高于7或者低于0,高于7则置0,低于0则置7。

5)输入到电机控制函数。

5 结论

本设计是基于STM32控制车外后视镜调节模块,由于设计中采用高精度、超强抗干扰的内部自带AD转换模块的单片机作为主控制器,同时采用了摇杆控制,能够更快更准地调节后视镜的角度,使驾驶员的行车更安全可靠。

猜你喜欢
摇杆后视镜端口
温度对圆柱壳结构应力及端口变形影响研究
华为交换机端口Hybrid 模式的应用
一种端口故障的解决方案
下雨天,车窗和后视镜起雾怎么办
基于3D打印的曲柄摇杆机构实验设计
车辆防雾后视镜
臂戴后视镜
VR飞行模拟的伴侣
曲柄摇杆式硬币分离机设计
为程序或设备在路由器上打开端口