/*************笔记****************
1、本QC方案采用PWM调节电压。
2、
3、
4、
5、
***********************************/
/* -----------------------------------------宏定义-----------------------------------------*/
#define Voltage_06_PWM 18 //0.6V的占空比
/* -----------------------------------------头文件-----------------------------------------*/
#include "main.h"
/* -----------------------------------------结构体定义-------------------------------------*/
/* -----------------------------------------全局变量定义-----------------------------------*/
xdata uint8_t QC_Mode_Choice = 0; //0--不使用QC协议 1--QC2.0 2--QC3.0
xdata uint8_t QC20_Voltage_Choice = 0; //0--默认5V 1--9V 2--12V 3--20V
/* -----------------------------------------应用程序---------------------------------------*/
void QC_Voltage_Switch(void)
{
if (QC_Mode_Choice == 1) //QC2.0
{
switch (QC20_Voltage_Choice)
{
case 0: //D+ -->0 D- -->0 ==>5V 或者 握手重置
USBDP_PWM(0);
USBDM_PWM(0);
break;
case 1://D+ -->3.3 D- -->0.6 ==>9V
USBDP_PWM(100);
USBDM_PWM(Voltage_06_PWM);
break;
case 2://D+ -->0.6 D- -->0.6 ==>12V
USBDP_PWM(Voltage_06_PWM);
USBDM_PWM(Voltage_06_PWM);
break;
case 3://D+ -->3.3 D- -->3.3 ==>20V 如果不支持则无变化
USBDP_PWM(100);
USBDM_PWM(100);
break;
default:
break;
}
}
else if (QC_Mode_Choice == 2)//QC3.0
{
//D+ -->0.6 D- -->3.3 ==>进入QC3.0模式或者连续模式 (充电头如果不支持那么)
USBDP_PWM(Voltage_06_PWM);
USBDM_PWM(100);
}
}
void QC30_Add_Voltage(void)
{
if (QC_Mode_Choice == 2)
{
//D+ -->3.3 -->100ms -->D+ -->0.6 ==>QC3.0模式 增加电压
USBDP_PWM(100);
os_wait(K_IVL, 100, 0);//500ms
USBDP_PWM(Voltage_06_PWM);
}
}
void QC30_Reduce_Voltage(void)
{
if (QC_Mode_Choice == 2)
{
//D- -->0.6 -->100ms -->D- -->3.3 ==>QC3.0模式 减少电压
USBDM_PWM(100);
os_wait(K_IVL, 100, 0);//500ms
USBDM_PWM(Voltage_06_PWM);
}
}
#ifndef _QC3_0_H
#define _QC3_0_H
/* -----------------------------------------宏定义-----------------------------------------*/
#define Config_USBDP_CH 4
// <0=> PWM0 <1=> PWM1 <2=> PWM2 <3=> PWM3 <4=> PWM4 <5=> PWM5
#define Config_USBDM_CH 4
// <0=> PWM0 <1=> PWM1 <2=> PWM2 <3=> PWM3 <4=> PWM4 <5=> PWM5
#define USBDP_PWM(Num) PWM_InputData(Config_USBDP_CH, (((Config_PWM_Cycle+1)/100)*Num)); //Num代表百分比
#define USBDM_PWM(Num) PWM_InputData(Config_USBDM_CH, (((Config_PWM_Cycle+1)/100)*Num)); //Num代表百分比
/* -----------------------------------------头文件-----------------------------------------*/
#include "main.h"
/* -----------------------------------------结构体定义-------------------------------------*/
/* -----------------------------------------全局变量定义-----------------------------------*/
extern xdata uint8_t QC_Mode_Choice; //0--不使用QC协议 1--QC2.0 2--QC3.0
extern xdata uint8_t QC20_Voltage_Choice; //0--默认5V 1--9V 2--12V 3--20V
/* -----------------------------------------应用程序---------------------------------------*/
void QC_Voltage_Switch(void);
void QC30_Add_Voltage(void);
void QC30_Reduce_Voltage(void);
#endif
/*********************************************
函数名:System_Configuration
功 能:内外设初始化
形 参:
返回值:
备 注:
作 者:薛建强
时 间:2019/06/06
**********************************************/
void System_Configuration(void)
{
uint8_t temp = 0;
SystemReg.RunningState = 1;
SystemReg.RunningState_Flag = 0;
Pwm_Configuration(); // PWM初始化
Exit_Configuration(); // 端口中断使能
Adc_Configuration(); // ADC初始化
SystemInit.ADC = 1;
Key_Configuration(); // 按键初始化
SystemReg.First_Start = 0;
LowPower_Tmr = 10;
SystemReg.RunningState = 1;//关机
}
/*********************************************
函数名:StartRunTask
功 能:OS运行起始任务
形 参:
返回值:
备 注:
作 者:薛建强
时 间:2019/06/06
**********************************************/
void StartRunTask() _task_ 0
{
System_Configuration(); // 初始化系统
os_create_task(1); //创建任务1
os_create_task(2); //创建任务2
QC_Voltage_Switch();//选择充电协议
for (;;)
{
if (SystemInit.PWM == 0)
{
PWM_INIT();//初始化灯光
SystemInit.PWM = 1;
}
if (SystemInit.QC_Handshake == 0)//QC协议握手
{
USBDP_PWM(Voltage_06_PWM);//D+ 0.6V
USBDM_PWM(0);//D- 0V
if (time < 250 && ++time > 7)
{
time = 0;
QC_Voltage_Switch();//选择充电协议
SystemInit.QC_Handshake = 1;
}
}
os_wait(K_IVL, 200, 0);//500ms
}
}
/*********************************************
函数名:StartKeyTask
功 能:按键扫描
形 参:
返回值:
备 注:
作 者:薛建强
时 间:2019/06/06
**********************************************/
void StartKeyTask(void) _task_ 1
{
uint8_t KEY_state = 0;
uint16_t time = 0;
uint8_t i = 0;
os_wait(K_IVL, 30, 0);//0.01s==100ms
for (;;)
{
KEY_state = Key_Scan(&Key1_Type, 1);
switch (KEY_state)
{
case 1://短按
if (SystemInit.QC_Handshake == 1)
{
if (QC_Mode_Choice == 1)
{
if (QC20_Voltage_Choice < 3 && ++QC20_Voltage_Choice > 2) QC20_Voltage_Choice = 0;
if (QC20_Voltage_Choice >= 3)
{
QC20_Voltage_Choice = 0;
}
QC_Voltage_Switch();//选择充电电压
}
else if (QC_Mode_Choice == 2)
{
QC30_Add_Voltage();
}
}
break;
case 2://长按
break;
case 3://双击
if (SystemInit.QC_Handshake == 1)
{
if (QC_Mode_Choice < 3 && ++QC_Mode_Choice > 2) QC_Mode_Choice = 0;
if (QC_Mode_Choice >= 3)
上一篇:N76E003][MCP4017][MCP4018][MCP4019] 数字电位器 使用方法
下一篇:[N76E003][PCA9540BD][IIC扩展器] 一组IIC变两组IIC 使用方法
推荐阅读最新更新时间:2024-11-10 11:42
设计资源 培训 开发板 精华推荐
- 基于PD85025-E的10 W,340-520 MHz 评估板
- STEVAL-IME003V1,STHV748 超声脉冲器 IC 评估板
- 基于CW32的多模式电机驱动模块——以洗衣机应用为例
- LT8390EUFD 125W (25V/5A) 太阳能电池板至 12V 电池充电器的典型应用电路
- ADM00310,用于 16 位 MCU 系统的 ADC 评估板提供评估 MCP3903 六通道 Sigma-Delta ADC 性能的能力
- Tmp116_High_Accuracy_Temp_Sensor
- AZ7023RTR低压指示检测器典型应用电路
- LT6657BHMS8-3 1.5V 最小电源电压的典型应用电路
- 热释电模块(芯片资料+模块原理图)
- NCV4274AST33 400 mA 2% 和 4% 稳压器系列的典型应用电路