標(biāo)題: 簡(jiǎn)易QC2.0快充取電設(shè)計(jì)(可當(dāng)可調(diào)電源用)附單片機(jī)程序與原理圖PCB文件 [打印本頁(yè)]

作者: huashanhui20    時(shí)間: 2021-3-3 10:09
標(biāo)題: 簡(jiǎn)易QC2.0快充取電設(shè)計(jì)(可當(dāng)可調(diào)電源用)附單片機(jī)程序與原理圖PCB文件
這個(gè)是我自己制作的一個(gè)QC2.0快充取電器,主要功能是將支持QC快速充電頭的電壓取出來(lái)使用。功能:用一個(gè)按鍵循環(huán)切換輸出電壓5V--9V--12V....;用一顆LED不同閃爍頻率指示不同對(duì)應(yīng)電壓。
原理:用單片機(jī)IO口控制輸出電壓達(dá)到效果

優(yōu)點(diǎn)是:1.簡(jiǎn)單實(shí)用 2.成本低廉
缺點(diǎn)是:1.功能簡(jiǎn)單 2.無(wú)輸出反饋
特別注意:1.無(wú)輸出監(jiān)測(cè),且有EEPROM記憶,每次上電需確定輸出電壓,再連接用電電路。2. 即使無(wú)快充功能(或不支持的協(xié)議的)的充電頭,指示燈依然指示設(shè)定的電壓。

制作出來(lái)的實(shí)物圖如下:


Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:

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

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

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

  8. /*************        功能說(shuō)明        **************

  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口為準(zhǔn)雙向
  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口為開(kāi)漏
  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. /*************        本地函數(shù)聲明        **************/


  50. /*************  外部函數(shù)和變量聲明 *****************/

  51. /*************        本地函數(shù) **************************/
  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強(qiáng)推挽 D+為0.6V
  58.    
  59.     IO_HR_CONF(P3,USBB_PU);
  60.     IO_HR_CONF(P3,USBB_PD);//P32、P33高阻態(tài) D-為斷開(kāi)
  61. }
  62. /*************        本地函數(shù) ******************/
  63. u8 KEY_Scan(u8 mode)
  64. {
  65.            static u8 key_up=1;//按鍵按松開(kāi)標(biāo)志
  66.         if(mode)key_up=1;  //支持連按                  
  67.         if(key_up&&(KEY==0))//||KEY2==0))
  68.         {
  69.                 Delay_nms(10);//去抖動(dòng)
  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;// 無(wú)按鍵按下
  80. }
  81. /*************        本地函數(shù) ******************/
  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強(qiáng)推挽 D+為0.6V
  92.    
  93.     IO_HR_CONF(P3,USBB_PU);
  94.     IO_PP_CONF(P3,USBB_PD);//P32、P33高阻態(tài) D-為0V
  95.     IO_OUT_LOW(P3,USBB_PD);
  96.    
  97.     del = 1;
  98. }
  99. /*************        本地函數(shù) ******************/
  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強(qiáng)推挽 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強(qiáng)推挽 D-為0.6V
  114.    
  115.     del = 500;
  116. }
  117. /*************        本地函數(shù) ******************/
  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強(qiáng)推挽 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強(qiáng)推挽 D-為0.6V
  133.    
  134.     del = 150;
  135. }
  136. /*************        本地函數(shù) ******************
  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強(qiáng)推挽 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強(qiáng)推挽 D-為3.3V
  149.    
  150.     del = 10;
  151. }
  152. /******************** IO配置函數(shù) **************************/
  153. void        GPIO_config(void)
  154. {
  155.         GPIO_InitTypeDef        GPIO_InitStructure;                //結(jié)構(gòu)定義
  156.     //P3全部高阻態(tài)
  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. /******************** 主函數(shù) **************************/
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
程序與PCB原理圖.7z (1.09 MB, 下載次數(shù): 164)
[attach]264335[/attach]




作者: yaoziqiang    時(shí)間: 2021-3-4 09:29
非常不錯(cuò),下來(lái)研究下
作者: guysxpf    時(shí)間: 2021-3-9 06:39
用的stc15官方庫(kù)?
作者: huashanhui20    時(shí)間: 2021-3-11 08:25
guysxpf 發(fā)表于 2021-3-9 06:39
用的stc15官方庫(kù)?

是的,官網(wǎng)下載的
作者: xyllovezuu    時(shí)間: 2021-3-21 00:18
不錯(cuò)的學(xué)習(xí)資料,謝謝
作者: HWL0541    時(shí)間: 2021-3-21 10:22
謝謝分享,樓主辛苦了
作者: shh200438    時(shí)間: 2021-8-17 16:56
感謝樓主分享, 正好需要這個(gè).
作者: 長(zhǎng)風(fēng)007    時(shí)間: 2022-8-10 11:39
感謝樓主的分享!
作者: 絲瓜偵探    時(shí)間: 2022-8-11 13:53
很實(shí)用的東西,學(xué)習(xí)了!
作者: 風(fēng)的旋律    時(shí)間: 2023-4-7 15:51
感謝樓主的分享,不錯(cuò)的學(xué)習(xí)資料
作者: chxelc    時(shí)間: 2023-6-30 14:50
感謝分享,51HEI有你更精彩!有沒(méi)有朋友做過(guò)PD快充電路,如下圖,TYPE-C接口取電給蘋(píng)果手機(jī)充電。專(zhuān)用IC要3塊大洋,小貴,有沒(méi)有更便宜的方案?

51HEI.png (47.98 KB, 下載次數(shù): 106)

51HEI.png

作者: changhz    時(shí)間: 2023-7-12 09:24

非常不錯(cuò),正想研究




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1