找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10262|回复: 11
打印 上一主题 下一主题
收起左侧

简易QC2.0快充取电设计(可当可调电源用)附单片机程序与原理图PCB文件

  [复制链接]
跳转到指定楼层
楼主
这个是我自己制作的一个QC2.0快充取电器,主要功能是将支持QC快速充电头的电压取出来使用。功能:用一个按键循环切换输出电压5V--9V--12V....;用一颗LED不同闪烁频率指示不同对应电压。
原理:用单片机IO口控制输出电压达到效果

优点是:1.简单实用 2.成本低廉
缺点是:1.功能简单 2.无输出反馈
特别注意:1.无输出监测,且有EEPROM记忆,每次上电需确定输出电压,再连接用电电路。2. 即使无快充功能(或不支持的协议的)的充电头,指示灯依然指示设定的电压。

制作出来的实物图如下:


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:

  1. /*------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited -------------------------------*/

  3. /*------------------------------------------------------------------*/

  4. #include        "config.h"
  5. #include        "GPIO.h"
  6. #include        "delay.h"
  7. #include    "eeprom.h"

  8. /*************        功能说明        **************

  9. 本程序是快充 功能,MCU --> STC15W204S  @24MHz

  10. *******************************************/
  11. #define USBA_PD 0  //D+下拉电阻
  12. #define USBA_PU 1  //D+上拉电阻
  13. #define USBB_PD 2  //D-下拉电阻
  14. #define USBB_PU 3  //D-上拉电阻

  15. sbit LED = P5^5;
  16. sbit KEY = P5^4;
  17. /******************************************/

  18. //配置IO口为准双向
  19. #define IO_BZ_CONF(IO,PIN) do{\
  20.     IO##M0&=~(1<<PIN);\
  21.     IO##M1&=~(1<<PIN);\
  22.     }while(0)\

  23. /******************************************/

  24. //配置IO口为推挽
  25. #define IO_PP_CONF(IO,PIN) do{\
  26.     IO##M0|=(1<<PIN);\
  27.     IO##M1&=~(1<<PIN);\
  28.     }while(0)\

  29. /******************************************/

  30. //配置IO口为高阻
  31. #define IO_HR_CONF(IO,PIN) do{\
  32.     IO##M0&=~(1<<PIN);\
  33.     IO##M1|=(1<<PIN);\
  34.     }while(0)\

  35. /******************************************/

  36. //配置IO口为开漏
  37. #define IO_OD_CONF(IO,PIN) do{\
  38.     IO##M0|=(1<<PIN);\
  39.     IO##M1|=(1<<PIN);\
  40.     }while(0)\

  41. /******************************************/
  42. #define IO_OUT_HIGH(IO,PIN) IO|=(1<<PIN)
  43. #define IO_OUT_LOW(IO,PIN) IO&=~(1<<PIN)

  44. /*************        本地常量声明        **************/
  45. #define Modmax 3

  46. /*************        本地变量声明        **************/
  47. u16 del;
  48. u8 tmp[2];
  49. /*************        本地函数声明        **************/


  50. /*************  外部函数和变量声明 *****************/

  51. /*************        本地函数 **************************/
  52. void step1(void)
  53. {
  54.     IO_PP_CONF(P3,USBA_PU);
  55.     IO_PP_CONF(P3,USBA_PD);
  56.     IO_OUT_HIGH(P3,USBA_PU);
  57.     IO_OUT_LOW(P3,USBA_PD);//P30、P31强推挽 D+为0.6V
  58.    
  59.     IO_HR_CONF(P3,USBB_PU);
  60.     IO_HR_CONF(P3,USBB_PD);//P32、P33高阻态 D-为断开
  61. }
  62. /*************        本地函数 ******************/
  63. u8 KEY_Scan(u8 mode)
  64. {
  65.            static u8 key_up=1;//按键按松开标志
  66.         if(mode)key_up=1;  //支持连按                  
  67.         if(key_up&&(KEY==0))//||KEY2==0))
  68.         {
  69.                 Delay_nms(10);//去抖动
  70.                 key_up=0;
  71.                 if(KEY==0)
  72.         
  73.             
  74.             return 1;
  75.         
  76.                 //else if(KEY1==0)return KEY1_PRES;
  77.        // else if(KEY2==0)return KEY2_PRES;
  78.         }else if(KEY==1)key_up=1;            
  79.          return 0;// 无按键按下
  80. }
  81. /*************        本地函数 ******************/
  82. void OUT5V(void)
  83. {
  84.     Delay_nms(500);
  85.     step1();
  86.     Delay_nms(3000);

  87.    
  88.     IO_PP_CONF(P3,USBA_PU);
  89.     IO_PP_CONF(P3,USBA_PD);
  90.     IO_OUT_HIGH(P3,USBA_PU);
  91.     IO_OUT_LOW(P3,USBA_PD);//P30、P31强推挽 D+为0.6V
  92.    
  93.     IO_HR_CONF(P3,USBB_PU);
  94.     IO_PP_CONF(P3,USBB_PD);//P32、P33高阻态 D-为0V
  95.     IO_OUT_LOW(P3,USBB_PD);
  96.    
  97.     del = 1;
  98. }
  99. /*************        本地函数 ******************/
  100. void OUT9V(void)
  101. {
  102.     Delay_nms(500);
  103.     step1();
  104.     Delay_nms(3000);
  105.    
  106.     IO_PP_CONF(P3,USBA_PU);
  107.     IO_HR_CONF(P3,USBA_PD);
  108.     IO_OUT_HIGH(P3,USBA_PU);//P30、P31强推挽 D+为3.3V
  109.    
  110.     IO_PP_CONF(P3,USBB_PU);
  111.     IO_PP_CONF(P3,USBB_PD);
  112.     IO_OUT_HIGH(P3,USBB_PU);
  113.     IO_OUT_LOW(P3,USBB_PD);//P32、P33强推挽 D-为0.6V
  114.    
  115.     del = 500;
  116. }
  117. /*************        本地函数 ******************/
  118. void OUT12V(void)
  119. {
  120.     Delay_nms(500);
  121.     step1();
  122.     Delay_nms(3000);
  123.    
  124.     IO_PP_CONF(P3,USBA_PU);
  125.     IO_PP_CONF(P3,USBA_PD);
  126.     IO_OUT_HIGH(P3,USBA_PU);
  127.     IO_OUT_LOW(P3,USBA_PD);//P30、P31强推挽 D+为0.6V
  128.    
  129.     IO_PP_CONF(P3,USBB_PU);
  130.     IO_PP_CONF(P3,USBB_PD);
  131.     IO_OUT_HIGH(P3,USBB_PU);
  132.     IO_OUT_LOW(P3,USBB_PD);//P32、P33强推挽 D-为0.6V
  133.    
  134.     del = 150;
  135. }
  136. /*************        本地函数 ******************
  137. void OUT20V(void)
  138. {
  139.     Delay_nms(500);
  140.     step1();
  141.     Delay_nms(3000);

  142.     IO_PP_CONF(P3,USBA_PU);
  143.     IO_HR_CONF(P3,USBA_PD);
  144.     IO_OUT_HIGH(P3,USBA_PU);//P30、P31强推挽 D+为3.3V
  145.    
  146.     IO_PP_CONF(P3,USBB_PU);
  147.     IO_HR_CONF(P3,USBB_PD);
  148.     IO_OUT_HIGH(P3,USBB_PU);//P32、P33强推挽 D-为3.3V
  149.    
  150.     del = 10;
  151. }
  152. /******************** IO配置函数 **************************/
  153. void        GPIO_config(void)
  154. {
  155.         GPIO_InitTypeDef        GPIO_InitStructure;                //结构定义
  156.     //P3全部高阻态
  157.         GPIO_InitStructure.Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;                //指定要初始化的IO, 或操作
  158.         GPIO_InitStructure.Mode = GPIO_HighZ;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  159.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
  160.     //P5.4是按键
  161.         GPIO_InitStructure.Pin  = GPIO_Pin_4;                //指定要初始化的IO, GPIO_Pin_4
  162.         GPIO_InitStructure.Mode = GPIO_PullUp;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  163.         GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);        //初始化
  164.     //P5.5是LED指示灯
  165.         GPIO_InitStructure.Pin  = GPIO_Pin_5;                //指定要初始化的IO, GPIO_Pin_4
  166.     GPIO_InitStructure.Mode = GPIO_PullUp;
  167.         //GPIO_InitStructure.Mode = GPIO_OUT_PP;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  168.         GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);        //初始化
  169. }



  170. /******************** 主函数 **************************/
  171. void main(void)
  172. {
  173.         u8 i=0;

  174.         GPIO_config();
  175.         EEPROM_read_n(0x0000,tmp,2);
  176. //    Delay_nms(500);
  177. //    step1();
  178. //    Delay_nms(3000);
  179. //    LED = 1;
  180.     if(tmp[0]==0)
  181.     {
  182.             OUT5V();
  183.     }else if(tmp[0]==1)
  184.     {
  185.             OUT9V();
  186.     }else if(tmp[0]==2)
  187.     {
  188.             OUT12V();
  189.     }
  190. //        else if(tmp[0]==3)
  191. //    {
  192. //            OUT20V();
  193. //    }
  194.     else
  195.     {
  196.         tmp[0]=0;
  197.         tmp[1]=0xff;
  198.         EEPROM_SectorErase(0x0000);
  199.         EEPROM_write_n(0x0000,tmp,2);
  200.         OUT5V();
  201.     }

  202.         while(1)
  203.         {  
  204.         i = KEY_Scan(0);
  205.         if(i)
  206. ……………………

  207. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
程序与PCB原理图.7z (1.09 MB, 下载次数: 154)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏19 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:756506 发表于 2021-3-4 09:29 | 只看该作者
非常不错,下来研究下
回复

使用道具 举报

板凳
ID:224104 发表于 2021-3-9 06:39 | 只看该作者
用的stc15官方库?
回复

使用道具 举报

地板
ID:878061 发表于 2021-3-11 08:25 | 只看该作者
guysxpf 发表于 2021-3-9 06:39
用的stc15官方库?

是的,官网下载的
回复

使用道具 举报

5#
ID:754694 发表于 2021-3-21 00:18 来自手机 | 只看该作者
不错的学习资料,谢谢
回复

使用道具 举报

6#
ID:91165 发表于 2021-3-21 10:22 | 只看该作者
谢谢分享,楼主辛苦了
回复

使用道具 举报

7#
ID:38187 发表于 2021-8-17 16:56 | 只看该作者
感谢楼主分享, 正好需要这个.
回复

使用道具 举报

8#
ID:337139 发表于 2022-8-10 11:39 | 只看该作者
感谢楼主的分享!
回复

使用道具 举报

9#
ID:970121 发表于 2022-8-11 13:53 | 只看该作者
很实用的东西,学习了!
回复

使用道具 举报

10#
ID:1070358 发表于 2023-4-7 15:51 | 只看该作者
感谢楼主的分享,不错的学习资料
回复

使用道具 举报

11#
ID:712097 发表于 2023-6-30 14:50 | 只看该作者
感谢分享,51HEI有你更精彩!有没有朋友做过PD快充电路,如下图,TYPE-C接口取电给苹果手机充电。专用IC要3块大洋,小贵,有没有更便宜的方案?

51HEI.png (47.98 KB, 下载次数: 42)

51HEI.png
回复

使用道具 举报

12#
ID:180919 发表于 2023-7-12 09:24 | 只看该作者

非常不错,正想研究
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表