[设计]2019年全国电子设计竞赛A题-电动小车动态无线充电系统

发布于:2023-01-28 ⋅ 阅读:(831) ⋅ 点赞:(0)

1. 实物图片

这个是设计最终的效果图:
在这里插入图片描述

2. 设计思路

本系统主要由无线充电装置、无线充电小车装置和超级电容组储能装置三个部分构成。以STM32为核心主控,以超级电容为储能器件,设计了一套无线充电小车动态系统。系统采用无线充电技术,通过接收线圈将电感线圈耦合的磁场能转化为电能储存超级电容里,再结合TPS63020电源管理模块为STM32提供稳定的电源电压,使得STM32最小系统可以稳定地控制寻迹模块和驱动模块,从而实现了无线动态充电、定时启动和沿轨道自动寻迹的功能。

3. 总体方案

在这里插入图片描述
本系统分为三个部分:无线充电部分、超级电容储能部分和驱动部分。如图1所示,无线充电部分由发射端、接收端和BUCK-BOOST自动升降压模块组成,直流稳压电源为主控芯片STM32供电,通过DC/AD转换电路,将交流电送至发射线圈,利用磁感应现象,完成无线电的传输[;驱动部分由STM32最小系统、TB6612电机驱动模块和TCRT5000红外寻迹模块组成。线圈发射端接通电源后,线圈接收端产生电流,一部分超级电容组充电,另一部分则是通过BUCK-BOOST自动升降压模块供给STM32最小系统、TB6612模块和红外寻迹模块。通过STM32的ADC采集,判断系统是否处于充电状态,结合STM32定时中断,实现定时自启动的功能;TCRT5000红外寻迹模块检测到黑线会返回低电平,检测白线会返回高电平,利用这个性质,通过STM32实时采集红外寻迹模块的电压就可以判断出小车的运动轨迹,再通过STM32引脚输出PWM脉冲到TB6612模块从而驱动电机,进而实现寻迹的功能。**

4. 系统分析

4.1 超级电容

系统输入端接入5V/1A的电源,而且需要持续供电60s,根据计算公式:
(1)W = UIT = 300J
计算出功W后,根据无线充电效率50%计算,接收端最高能接受150J的能量,BUCK-BOOST电路按80%效率计算,还有充电过程中STM32以及驱动电路的损耗按10%计算,则超级电容上可以收集到105J能量(这部分可能有点误差):
(2)电容器能量W = 0.5CU^2;
则电容为 C = 2
W/U^2 = 8.4F
通过实际测试和理论分析,这里选用5V 10F和5V 4F两个超级电容,并联两个超级电容作为系统的超级电容组。(具体的电容容量可以自己实际测试,也不一定要选用这个方案)

4.2 电机选取

【方案一】选用普通直流电机。因为该设计采用的输出调整电路为TPS63020 DC-DC变换在电感上流过约小于100mA时,会进入低功耗模式,可以使小车行驶距离更远,而且选用普通直流电机在3.3V下的电流约20~70mA,对电流的要求比较低,换而言之,电机驱动系统需要的功耗很低。
【方案二】选用直流无刷电机。无刷电机是指无电刷和换向器(或集电环)的电机,又称无换向器电机。直流无刷电机特点是:有传统直流电机的优点,同时又取消了碳刷和滑环结构、体积小、重量轻、出力大、效率高,电机本身没有励磁损耗和碳刷损耗,消除了多级减速耗,综合节电率可达到20%~60%,但是电路设计复杂,而且控制也相对复杂。
【方案三】选用交流电机。该设计在AC-AC变换时可以采用交流电机,交流电机与直流电机相比,由于没有换向器(和直流电机的换向类似),因此结构简单,制造方便,比较牢固,容易做成高转速、高电压、大电流的电机。但是由于充电小车系统靠超级电容储能,因此交流电机不能采用。
所以,为减少电路设计的复杂性,采用了方案一,而且通过测试和分析后,这里选用低功耗的N20直流小电机,驱动电流大约仅需20mA,功耗比较低,很适合这个设计的低功耗需求。

4.3 黑线检测方案选择

【方案一】选用CMOS摄像头,STM32单片机经过图像分析后,能准确地识别出黑点以及判断出小车行走的路径。虽然CMOS摄像头能让小车提前预判路径,达到较好的控制效果,但是对STM32单片机运算能力有很大要求,运算负担大,不利于降低功耗。
【方案二】选用红外检测模块。红外检测的方式虽然不能提前预判路线,但是能准确检测到路线轨迹,而且对单片机运算能力要求不高,功耗也较低。
考虑到系统的功耗,以优先降低功耗和减少设计的复杂性为主,折中考虑后,这里选用了方案二,用红外检测模块作为寻迹部分的主要模块。通过测试分析,采用2个红外发射接收管制成简单的两路识别电路。通过两路红外模块检测,实现黑线的检测。

4.4 自动升降压方案选择

【方案一】采用TPS63020构成高效率单电感降压 - 升压型电路,实现输入1.8V-5.5V,输出稳到3.3V-5V的BUCK-BOOST电源系统。在大功率下TPS63020通过脉宽调制(PWM)控制器使用同步整流获得最大值效率。在低负载电流下,当平均电感电流低于大约100mA时且芯片的PS/SYNC引脚逻辑低电平,转换器进入省电模式以保持高电平,并且提高宽负载电流范围内的效率。并且电路自适应输出模式。当负载增加到约100mA的最小强制电感电流以上时,器件将自动切换到脉宽调制(PWM)模式。
【方案二】采用TPS61220构成的0.7V-3.3V升压转换电路。这个电路可以将超级电容的能量完全地榨干耗尽,这是它的卓越之处。但是,该电路的输出能力有限,电路最大的电流不超过0.5A,这导致在静态启动电机时所需瞬时电流将不能稳定地启动;并且其输入电压不能超过3.3V,输出电压将不能调整,一旦超过额定电压值就会烧毁芯片;另外电压阈值对超级电容的配比也要求较大。
超级电容在放电过程中,电压是不断跌落的,而STM32最小系统需要稳定的5V电压,电机供电需要稳定的3.3V电压,对于电容储能电压,以及整个系统重量配比和系统稳定性进行折中设计,这里采用方案二,选用TPS63020构成高效率单电感降压-升压型电路,输出稳定为5V给单片机,单片机再通过稳压电路稳定输出3.3V供电给电机。

5. 原理图设计&分析

当前版本V1.0(最后有一个三极管驱动电机的版本 V2.0)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注:为了在简单化设计,STM32选用的是一个集成好的最小系统,不需要自己再焊接芯片,比较对新手不友好

5.1 STM32最小系统

选用STM32C8T6作为核心主控,STM3最小系统原理图如图所示,结合电动小车所需要的功能,最小系统设计包括有:晶振电路、稳压电路、滤波电路、程序下载电路、串口调试电路和按键模式选择电路。STM32有两个外部时钟输入接口,分别是外部高速时钟(HSE)和外部低速时钟(LSE),所以在设计时晶振电路需要两个晶振起振,HSE选用8MHZ晶振起振,LSE选用32.786MHZ晶振起振;STM32核心电压为3.3V,选用AMS1117三极管作为稳压管实现输入5V输出3.3V,从而为芯片提供稳定的核心电压,确保程序正常运行;选用0.1uF瓷片电容作为滤波电路,通过排除干扰的高频杂波,让电路运行更加稳定;另外引出程序下载接口和串口接口,主要是为了方便后期调试和下载程序;引出STM32的两个上拉引脚接入按键接口,用于切换系统的断电自启动和定时自动两种模式。
在这里插入图片描述

5.2 电机驱动

电机驱动电路选用TB6612FNG芯片以及0.1uF的瓷片电容,组成驱动电路。这里瓷片电容于过滤高频杂波,保证整体电路的稳定性。该驱动电路可以实现输入两路PWM波,驱动两路电机。而且可以通过控制芯片的引脚A端和引脚B端的输入实现正转和反转,相比于三极管驱动电机,选用TB6612FNG驱动可以实现正反方向的控制,而不是单一方向的驱动,使得电机控制更加迅速灵敏。电机驱动电路如图所示,设计时直接置高TB6612FNG的STBY引脚,使能芯片,让其可以正常工作。
在这里插入图片描述

5.3 红外循迹电路设计

黑线检测采用TCRT5000反射式光电开关传感器,TCRT5000是一种基于红外光学反射原理,集发射和接收为一体的传感器,它由一个红外发光二极管和一个NPN红外光电三极管组成。传感器在工作时,TCRT5000的红外发光二极管不断地发射红外线(不可见光)波长为950nm,当发射的红外线没有被障碍物反射回来或者反射强度不足时,NPN红外光电三极管不工作,引脚输出高电平;当红外线的反射强度足够且同时被光敏三极管接收到时,NPN红外光电三极管处于工作状态,并输出低电平,而且TCRT5000红外传感器的检测距离约为1mm~25mm。利用TCRT5000的工作性质,设计红外寻迹电路,红外寻迹设计电路如图4所示,结合运算放大器,比较运放输入引脚的电压,输出高低电平进而控制输出信号和指示灯。当TCRT5000的光电三极管导通时,即没有识别到黑线,运放输出低电平,指示灯常亮;同理,当TCRT5000的光电三极管截止时,即识别到黑线,运放输出高电平,指示灯灭。所以可以通过指示灯的亮灭判断小车是否压住黑线以及通过轮胎压线的角度判断车轨的偏移程度,进而利用STM32调整电机的转速,实现小车运动轨迹的纠正。
在这里插入图片描述

5.4 BUCK-BOOST自动升降压电路设计

法拉电容组放电工作时电压会不断下降,为保证其他元器件供电正常,并尽可能充分利用法拉电容组中的电能,需要能够自动升压降压的电路[[[] 李兴旭,魏磊,高琴.基于单片机的无线充电电磁循迹小车[J].物联网技术,2019,9(02):90-94.]]。选用TI电源管理芯片TPS63020,设计BUCK-BOOST电源高效率单电感自动降压-升压型电路,额定输入直流电压在1.8V-5.5V之间时,额定输出直流电压为Uo=5V,最大电流可以达到2A的DC-DC电源系统。该电源系统具有输出过流过压过温保护、欠压锁定等功能。通过在末级输出添加合适的电容滤波使纹波电压降低。如图5所示,选用合适的电阻电容结合TPS63020芯片可以实现输入直流电压在1.8V-5.5V时,输出电压稳定在5V。利用TPS63020模块稳压输出的特性作为无线充电小车的主要电源电路,使超级电容在放电过程中可以稳定输出5V,从而实现系统的稳定运行。
在这里插入图片描述

5.5 超级电容组储能电路设计

通过实际测试和理论分析,这里超级电容选用规格为5.5V 10F和5.5V 4F的法拉电容,并联这两个超级电容组成电压为5.5V、容量为14F的电容组。如图6所示,CD为接收线圈,在输入端接入二极管,利用二极管正向导通反向截止的性质,实现超级电容组在放电时将全部的电量输出到输出端口OUT,阻止反流到输入端VIN,可以最大化利用超级电容放电时候释放的电能,且二极管考虑选用肖特基二极管,肖特基二极管也称为金属-半导体型二极管,其特点是具有较低的导通电压,而且在电路结束供电时不存在电容效应,可以实现快速通断。接收线圈通过耦合发射线圈的磁场能,转化为电能,给超级电容充电的同时也通过TPS63020为STM32最小系统供电,实现了在充电过程中驱动电路能正常等待接收STM32控制指令的功能。
在这里插入图片描述

5.6 指示电路设计

指示电路原理图如图7所示,指示电路分为三部分:程序指示电路、充电指示电路和断电检测电路。程序指示电路主要是用于检测中断程序是否正常运行,结合程序和LED灯可以实现多种的指示方式,例如:每个5s闪烁一次、循环闪烁等,通过不同的闪烁方式可以检查程序运行情况;充电指示电路用于检测充电是否正常,正常充电则是常亮,没有充电则是不亮;断电检测电路是利用ADC采集电阻两端的模拟量判断是否断电,断电时模拟量和数字量都为0,反之则不为零。
在这里插入图片描述

6 程序设计

系统的程序设计以MDK5为开发平台,编程语言以C语言为主。系统程序设计图如图8所示,程序初始化后进入两个线程程序,第一个线程为主程序,主要负责驱动电机和检测黑线;第二个为定时中断程序,主要负责选择模式和定时。主程序中设置STM32的IO口的模式为输入捕获模式,通过捕获红外检测模块输出引脚的高低电平,实现判断出小车的运动轨迹;结合STM32输出PWM到TB6612FNG模块,驱动电机以及调节电机的转速,实现小车轨迹的调整;开启系统的定时中断程序,利用定时中断设置定时时间和系统的模式。系统模式有两个:定时60S自启动和断电自启动。定时60S自启动模式主要是利用中断的定时时间和标志位的计数实现的;断电自启动主要是利用ADC采样或者高低电平捕获实现。
在这里插入图片描述

6.1 ADC采样

ADC采样主要是采集检测电阻两端的模拟量或者数字量,通过采集模拟量或者数字量的数值判断系统是否断电。这里有两种检测方式:检测模拟量和数字量。在设计程序时,采用了第二种检测方式——检测数字量。通过简单的判断电阻一端的数字电压量,即数字1或者数字0,实现了检测系统是否断电的功能。

6.2 PWM输出

通过STM32的IO口输出PWM驱动TB6612FNG,调节占空比从而达到控制电机转速的效果。PWM输出的数值有正负极性,在这里PWM输出为正值时规定为电机正转,负值时则是规定为电机反转,而且控制电机的正反转需要通过TB6612FN模块的控制输入端AIN和BIN实现。所以,这里需要先初始化四个引脚作为控制AIN1、AIN2、BIN1和BIN2的信号变化,初始化程序片段如下,这里选用引脚PB12、PB13、PB14和PB15。
/初始化四个IO口,控制电机的转向/
GPIO_InitTypeDef_Little Little_GPIO_InitStructure;//这里是自定义结构体
My_RCC_APB2PeriphClockCmd( My_RCC_APB2Periph_GPIOB, 1);//使能PB时钟
My_GPIO_InitStructure.GPIO_Pin =MyGPIOPin12 |MyGPIOPin123| MyGPIOPin14| MyGPIOPin15;//使能相关的引脚,这里用自定义的引脚符号
GPIO_InitStructure_Little.GPIO_Mode = My_GPIO_Mode_Out_PP; //设置为推挽输出
GPIO_InitStructure_Little.GPIO_Speed = My_GPIO_Speed_50MHz;//设置引脚输出频率
My_GPIO_Init(My_GPIOB, &GPIO_InitStructure_Little);//引脚初始化
编写好控制电机正反转的程序后,把这些程序封装到一个自定义的函数,这里我把程序命名为MyMotor_Init(void),无入口参数。
设置STM32单片机的两路PWM输出,利用两路PWM数值差可以实现小车转向。其中一路PWM输出转向的程序片段如下:
if(MyMotor1>0) MyAIN1 = 1,MyAIN2 = 0,MyPWMA = +motor1;//电机正转
if(MyMotor1<0) MyAIN1 = 0,MyAIN12= 1,MyPWMA = - motor1;//电机反转
if(MyMotor1==0) MyAIN1 = 0,MyAIN12 = 0,MyPWMA = 0;//等于零,电机停止转动
这里我把转向控制的驱动程序封装到一个命名为MySet_Pwm(int M1,int M2)的函数,入口参数有两个,分别为第一个电机M1的PWM和第二个电机M2的PWM。

6.3 断电自启和定时自启

断电自启和定时自启程序设计流程图如下所示,通过按键扫描选择模式:断电自启模式和定时自启模式。断电自启模式是基于ADC采样程序,通过采集电阻一端的数字量来判断是否断电,断电时电阻数字量恒为数值0,充电时电阻数值不恒为数值0。所以,利用这个数字量是否恒为0判断小车是否处于充电状态,若小车处于断电状态就执行自动程序,反之则不执行启动程序;定时自启模式是利用定时中断程序进行计时,处于定时自启模式时,主程序运行死循环程序检测黑线,定时中断程序负责计时,每隔100ms进行计数累加,达到60s后执行自启程序。
在这里插入图片描述
通过板载的两个个按键选择模式,按键一控制标志位Flag1,按键二控制标志位Flag2,这段程序是在初始化中插入的,主要是结合定时器的定时计数实现60秒的计数,实现标志位的切换,主函数中的定时启动和断电自启的程序片段如下。
if(My_Key2 == 1) My_Flag2 = 1;//定时自启标志位
else My_Flag1 = 1;//断电自启标志位
while(My_Flag2||My_Flag1); //等待标志位在中断中置零
MyStart_Flag();//断电信号初始化函数
if(Auto_Start) {while(Start == 1);}//定时启动模式
定时器中断控制函数片段如下,可以通过定时器计数达到标志位清零的效果。
if(MyTIM1->SR&0X0001){ //定时中断函数,重新定义了定时器1的结构体。
MyLed_Flash(10);//LED指示灯闪烁函数,这里是自定义的闪烁函数。
if(My_Flag1)//进入断电自启动模式
{ My_Time1++;//累加计数,每0.01s累加一次
if(My_Time1%20 == 0) LED=~LED;//LED指示灯,协助观察累加情况
if(My_Time1>=3000) {LED=0;My_Flag1=0;Auto_Start=1;My_Time1=0;}}//30s后置零
if(My_Flag2)//进入定时启动模式
{ My_Time2++;//计数累加
if(My_Time2%30==0) LED=~LED;//指示灯提示,和断电模式的LED闪烁频率不同
if(My_Time2>=6000) {LED=0;My_Flag2=0;My_Time2=0;}}//定时60S
MyTIM1->SR&=~(1<<0);}//清除中断标志位
这里尝试重定义了变量和定时器的结构体,主要是为了方便个人的理解。
备注:具体的完整程序会放到后面,免费下载

7 小车模型设计

solidworks设计图如下
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述充电小车采用3D打印车身,选用树脂作为车身耗材,具有较好的柔韧性,装备过程中不会轻易被掰断。充电小车的设计模型是以Solidworks软件为开发平台设计的,装备图如图10所示,小车的底盘规格为90904mm,车轮为直径34mm的塑胶轮,驱动电机选用N20低功耗电机,底盘采用双层设计,保证足够的空间放置电路板和电源线等设备。而且考虑到小车运动的稳定性,采用两路PWM驱动四路电机的方式,相比双轮驱动,四轮驱动可以保证小车运动时有足够的抓地力,可以保证小车在调节运动速度的时候不会因为打滑而脱离运动轨道。

8. 测试

8.1 电路测试

确定好制作方案后,首先对小车的驱动电路进行测试。以Altium Designer 18软件为平台设计电路原理图和PCB图,电路板的3D视图如图11所示,通过PCB板的3D视图可以直观地了解到焊接板所需要的元器件,本设计需要的元器件有:蓝色4P接线端子、7*7平头自锁开关、贴片电阻电容若干以及相关的贴片芯片等。根据PCB布线图和电路原理图,先在洞洞板上焊接好相关的元器件,待测试成功后再进行工业打样制板,在洞洞板上通过万用电表的蜂鸣器档测试电路的每一个节点,利用蜂鸣器警报声观察电路是否存在短路或者断路的问题。在电路测试完毕后,确认电路正常就可以把编写好的程序烧录到板载的STM32最小系统上,利用引脚输出PWM观察电机是否能正常驱动,通过IIC通信驱动OLED显示屏,观察OLED显示屏是否能正常显示以及LED指示灯能否定时闪烁。若这些硬件驱动都没有问题则可以确定硬件电路正常,反之则硬件电路存在异常,需要通过程序驱动找出异常的驱动部分,再仔细检测存在异常的电路部分。
在这里插入图片描述

8.2 程序测试

在硬件电路测试成功后,而且在烧录程序未出现异常的情况下,将小车放置圆形的跑道上进行实际的测试,跑道图如图12所示。首先通过按键一选择模式一——“定时停止模式”,在通电情况下,小车会在60s后自动启动,从A点跑到B点后停止或者一直绕着圆圈跑道运动,直至电量耗尽;然后通过按键二选择模式二——“断电自启模式”,正常充电情况下,把发射线圈的电源断开,小车检测到发射线圈断电后,会自动启动小车,围着圆圈跑道行驶,直至小车超级电容的电量耗尽。测试成功后说明基本的控制程序可以实现实验所需的功能要求,最后再结合小车实际运动情况,调整电机转速参数和寻迹的延迟时间,以达到小车最优的运动状态。

9 清单

在这里插入图片描述
在这里插入图片描述

10. 三极管版本V2.0

在这里插入图片描述
备注:以下资源全部开源免费,分享给大家,支持二次开发
V1.0版本程序:无线充电小车完整程序V1.0
PCB::PCB三种版本

谢谢各位

下期预告,如何设计一个基于STM32的手势识别的音乐播放器??(开源)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到