基于R7F0C809的QC2.0测试工具设计
1 背景介绍QC2.0全称Quick Charge 2.0,是高通制定快充标准,支持该标准的充电器将输出电压由5V输出扩展大到了9V、12V等多种电压规格,通过该方法使充电器的输出功率从原来的最大10W提升到了最大18W,因此解决了实际中大容量电池手机充电慢的难题。本设计的目的在于充电器厂家在测试、老化充电器的时候可以不连接手机的情况下对充电器的电压进行设置,也可以用于对充电过程中充电器运行状态的监控,比如输出电压、电流的信息。
2 基于R7F0C809的QC2.0测试工具实现QC2.0快充协议的实现,实际是手机和充电器通过USB数据线的D+、D-进行通信的过程。根据QC2.0标准的要求,要对充电器进行输出电压的设置就需要改变USB数据线中D+和D-的电压,QC2.0对D+、D-电压的要求如下表所示:
系统设计的总体框图如下图所示:
通过上图的可以看出,此次设计使用到的MCU的外设主要有:ADC、PWM、UART、IO等。ADC用于将USB的输出电压、电流的模拟信号转换成数字信号;PWM用于输出模拟信号,这个功能的实现还需要依靠外部低通滤波电路的配合才能实现;UART用于将检测到的电压、电流的数字信号传送到PC中;LCD用于电压电流的实时显示;按键用于充电器输出电压的切换。此次设计中还使用到了定时器TAU03,定时器采用1ms定时中断,中断中对各任务的任务定时器计数。
3 软件设计此次DIY设计中,R7F0C809运行主频20MHz,软件采用了状态机和任务定时器分时运行的方法来进行任务间的轮询运行。状态机的作用主要是软件根据按键的状态变化对R7F0C809输出PWM占空比进行设置的过程,通过该方法可以实现用户对充电器输出电压的设置。任务定时器分时运行的作用是将while循环中的不同任务的软件定时器采用不同的计数初始值和计数最大值,从而最大程度的减少了任务间的运行干扰问题,可以使系统更加可靠的运行。
3.1 主程序流程
3.1.1 QC2.0通信建立QC2.0充电器上电默认D+,D-短接,当D+上检测到小于2V的电压超过1.25秒时,断开D+和D-。MCU上电后的TO01输出12%占空比的PWM,此时MCU的TO02为ADC输入端口,当检测到的电压0.6V超过1S认为充电器插入,然皇后当检测到的电压低于0.2V(D+和D-断开后D-上电电压)持续1S,认为充电器的D+和D-已断开,通信建立。
3.1.2 输出电压状态机在通信建立之后,软件中根据状态机所处的状态来设置对应的PWM占空比输出,状态机每间隔20ms进行一次状态判断,判断结束后启动新的ADC转换。
3.1.3 按键检测按键检测采用的是每间隔1ms对按键端口的电平做一次判断,如果连续20次都为按下时的电平,就认为按键被按下,标志位置位,状态机状态改变一次。在标志位置位的情况下如果连续侦测到5次按键松开的电平,则认为按键松开,标志位清零,状态机状态保持不变。
3.1.4 LCD显示LCD显示任务每间隔1S刷新一次显示数据,显示数据来源于ADC对电压、电流信号采样的平均值。流程图如下图所示:
3.1.5 UART通信UART通信用于MCU和电之间的通信,波特率9600,任务每间隔5ms运行一次,进入任务后首先查询是否收到上位机发送过来的字符“Q”,如果收到则返回电压、电流的转换结果,否则退出任务。传送的数据采用ASCII格式,这样可以在串口助手中直接看到相应的转换结果,流程图如下图所示:
3.2 TAU03中断TAU03中断时这次DIY设计中任务计时的频率,每间隔1ms进一次中断,进入中断后分别对各任务中的软件计数器进行计数,计数完成后即刻退出中断,避免对其他任务的运行产生影响。
3.3 UART中断UART中断分别为UART接收中断和发送中断。
接收中断,当系统运行过程中串口接收到数据时会自动进入该中断,将数据保存到接收缓存数组中,然后退出该中断,数据处理在5ms通信任务中进行,不占用中断时间。
发送中断,当接收到指令“Q”之后,5ms任务中会将要发送到数据保存到发送缓存数组中,并发送第一个数据,接着当发送完这个数据之后发送中断会自动进入并继续发送其他的数据。
4 硬件设计4.1 PWMDAC电路PWMDAC电路是将高频输出的PWM通过低通滤波的方式转换为模拟电压的过程,系统中PWM频率为20KHz,滤波器的截止频率只要设置到低于PWM频率的0.1倍(2KHz)一下就可以很好的滤除高频成分。电阻电容滤波器的截止频率计算公式为:RC = 1/(2×PI×Fc),式中Fc为系统的截止频率,R为滤波器中的电阻阻值,C为滤波器中的电容的容值。电路如下图所示:
需要注意到地方是,MCU的输出电流一般都比较小,应此希望R值越大越好,但R值增大以后滤波后的电压的带载能力变弱,应此需要更具实际情况进行权衡。这里选择3K的电阻,则IO口的最大输出电流为5V / 3k = 1.6ma,该阻值可以保证MCU正常运行。电容选择了常用的1uf无极性电容。由此推算出来的截止频率为:Fc = 1/(2×3.14×3000×10E-6) = 53 Hz。能够满足系统截止频率低于2K的要求。
图中20K的电阻用于对电容的电压放电,避免PWM占空比输出为0时,D+或者D-端口的电压不为0的情况。
4.2 LCD接口电路LCD采用的12232的字符型显示器,该显示器的内部驱动IC型号为ST7920。与MCU之间的通信方式可以选择8线数据模式、4线数据模式或者SPI控制。这里选用了4线数据模式,总共用到的IO有6根。硬件电路如下图所示:
4.3 按键电路按键由于只有一个,因此占用一个输入端口,当按键按下时输入端口为低电平。按键没有按下或者按键松开时端口为高电平。电路图如下图所示:
4.4 电压采样电路电压采样采用常见的电阻分压的方式进行检测,ADC最大输入电压Vin为5V,由此可以推算出电阻R7通过的最大电流为:I =5/10K = 0.5ma,那么电阻R5上面的电压为:Vr5 = I×R = 0.5ma×30K = 15V。所以此处VCC的最大检测电压为20V。电路图如下图所示:
4.5 电流采样电路电流计测采用了ACS712ELCTR-05B这个专用IC,最大检测电压5A,充电器最大输出2A可以满足要求。其优点是电路简单,测量元件的阻值很小可以忽略不计。该IC直接为电压输出,185mv/A,这个检测到电压通过MCU的ADC端口直接进行检测。电路如下图:
5 实验测试6 总结通过这次DIY使我对瑞萨R7F0C809这颗MCU有了深入的了解,实验数据达到了预期的设计目标。感谢电子工程世界和瑞萨(中国)电子有限公司对这次活动的大力支持。