久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 32993|回復: 54
打印 上一主題 下一主題
收起左側

功率計量芯片HLW8012硬件PCB與單片機軟件源碼設計資料下載

  [復制鏈接]
跳轉到指定樓層
樓主
此芯片性能不出差


HLW8012產品應用文檔目錄
摘要
1  硬件設計  
11    參考設計圖  
111  非隔離采樣應用電路  
112  隔離采樣應用電路  
12    器件選型  
121  采樣電阻選型(非隔離方案)  
122  互感器選型(隔離方案)  
123  電源芯片選型  
13    Layout說明  
131  單路計量方案  
132  2 路或2 路以上計量方案  
2  軟件設計  
21  HLW8012 輸入與輸出的關系  
22  脈沖頻率(周期)的計算方法
23  軟件設計流程圖  
24  參考代碼文件  
25  校準  
3  HLW8012 性能數據  
4  FAQ附錄  
5  硬件自查  

1.2.1  采樣電阻選型(非隔離方案)
HLW8012 的最大采樣電流和采樣電阻的大小相關,HLW8012的最大電流采樣電壓(即PIN2和 PIN3 之間的電壓差)是30.9mV,
所以,最大采樣電流  = 30.9mV/采樣電阻阻值,以圖 1 為例,采樣電阻阻值為 1mR,則最大采樣電流  = 30.9mV/1mR = 30.9A。
采樣電阻分為錳銅電阻、鏮銅電阻、合金電阻和精密貼片電阻,一般設計 WIFI PLUG 產品以精密貼片電阻和鏮銅電阻比較多;

1.2.2  互感器選型(隔離方案)
電流互感器
以圖2 為例,電流采樣電阻R = 1Ω,假設電流互感器T1 的變比是1000:1,互感器的最大測量電流是50A,那么將此互感器接入采樣電路,最大的測量電流和電阻有以下關系:
I /1000= 30.9mV/R,
I = (30.9mV/1Ω)*1000 = 30.9A
如果需要測量更大量程的電流,則在選定互感器后,然后調整采樣電阻R,使得I*R<30.9mV 即可;
電壓互感器
以圖 2 為例,電壓互感器 T2 的變比是 1000:1000,初級通過 5 個 20K 的電阻串接,初級電流  = 220V/(5*20K) = 2.2mA;T2的次級關聯50R 的電阻,那么經過電壓互感器 T2 轉化成的電壓 = 2.2mA*50R = 110mV,芯片 V2P的輸入電壓信號是110mV;   一般建議V2P的輸入信號在100mV至 300mV之間,如果信號輸入接近滿幅值有效值時(490mV) ,噪聲會變大,精度會下降。

1.2.3  電源芯片選型
HLW8012 的供電電源是 5V,工作電流是 3mA,工作電流非常小,所以一般電源都可以滿足要求。設計圖紙都是以 MPS 的 MP150 為例,還有許多非隔離芯片同樣可以滿足要求,比如芯朋的 PN8015和 PN8016,夕力杰的SY50281和 SY50282,還有昂寶的OB2222等。 下面以使非隔離電源AP8015為例為例,列舉錯誤應用和正確應用。
錯誤的非隔離電源電路(GND和N 不是同一參考):

為什么需要GND和N選擇同一參考?
因為 HLW8012 的信號采樣采的是 L 和 N 的信號,信號線是以 N 為參考點,HLW8012 的內部采樣電路是以 N 為參考點;另外,HLW8012 的供電電源是 5V 和 GND,是以 GND 為參考點,
同一系統需要保證參考點一致,才能進行信號采樣,所以必須 GND和 N是同一參考點。 風險提示:如果不進行短接,那么信號端到 8012 的 PIN2 和 PIN 的電壓大小是浮壓,會有炸機的危險。

正確的非隔離電源電路(GND和N是同一參考) :

上圖是以 N為參考地,那么是否可以使用 L做為參考地?
可以的,如果以L為參考地,那么只需將 L和N對調,其它不變,下圖也是正確的。

1.3.1  單路計量方案
由于電流采樣端最大輸入信號是 30.9mV,以 測 量10A為例,如需分辯1mA,則相當于30.9mV需要等分 10000份,也就是芯片需要分辨3.09uV的信號,這個信號非常微弱,所以在設計PCB時,需對 GND需要小心處理,將GND噪聲干擾降至最低。  一般會對 GND 分兩路進行處理,使兩個回路不會重合,不會相互影響,當兩路回路不重合時,電源部分和數字部分的地噪聲就不會影響到計量信號,如下圖,電路回路1 和電路回路的走線相互不重合,只在入口處N 匯集于一點,這樣數字信號就不會干擾到計量部分。



計量芯片Layout設計規則:

此 layout 設計規則適合于深圳市合力為科技的所有型號計量芯片,如 HLW8012、HLW8032和 HLW8110/HLW8112 等。

  單路 PCB設計原則

電能計量芯片屬于模擬器件芯片,它不同于數字芯片,對模擬器件的 layout 需要遵 守一些設計原則,以使芯片發揮最大性能,以下共有 10 條設計原則,請盡量遵守,若 不能遵守,可能會引起一些如數值不穩定,小信號噪聲大等問題,實際情況以 PCB 樣 板實測結果為準。

1、 去藕電容放置規則 芯片電源引腳處的0.1uf的去耦電容盡量靠近芯片的引腳,這樣才能起到比較好的濾

波效果。

2、 電壓通道設計規則 電壓通道電阻分壓網絡,應呈階梯式分布,逐漸降壓(從輸入端降壓直至計

量芯片的取樣電壓),應注意電阻與電阻之間的爬電距離。



3、 電壓通道和電流通道應盡可能不進行交叉走線

交叉走線后會引起信號噪聲,對于小信號的測量結果不準確,對大信號的影響比較 小,如果必須交叉,也應該是電壓通道經過分壓(降低電壓值)之后的線與電流信號線交 叉,下圖是沒有交叉的走線。

4、 差分信號線布線規則

a)差分信號線應走平行線,且兩條平行走線應當盡量靠近,這樣可以減少外部 信號的干擾;

b)差分信號線應從采樣電阻兩端引線,且與采樣電阻的 PAD直接相連,差分信

號線路徑沒有電流回路流過。

正確的走線(從采樣電阻 Pad上引出差分信號線)

錯誤的走線(沒有從采樣電阻 Pad上引出差分信號線)




上述接法會帶來誤差,采樣電阻 r的阻值實際上己經不是 r了,而是

r+R1+R2,如下圖,因為銅皮也是有阻抗的,且銅皮的溫度特性非常差,這種接 法帶來的結果是在小電流時,信號輸出是線性關系,當電流過大時,隨著 PCB溫度的上升,整個輸入量程程的輸出信號會成不線性關系。



c)差分信號線有一根線是 GND,應把他當作信號線來看待,不能當做 GND來處 理,更不能同其它 GND線相連(只能在 GND地入口處相連),如下圖: 正確的接法:





上述在入口焊盤處相連,實際相當于是 GND入口分出兩條線,走星形線,

這樣處理實際是避免將 GND的噪聲(比如電源的噪聲)引入到差分信號端。

錯誤的接法:

上圖是錯誤的接法,因為電路回路的 GND經過采樣電阻再回到入口焊盤 N,這樣 會板子上的電源地噪聲引入到采樣電阻的差分信號上。


多路 PCB 設計原則
在使用多路計量電路的設計中,同樣需要注意 GND 的處理,如果布局不合理,每一路計 量電路就會相互產生干擾。為避免每一路計量電路之間的相互干擾,地線需要采用星形 地線的布局方式,參考布局方法如下:
正確的連接方式:



單片機源程序如下:


  1. /*=============================================================================
  2.   * File Name             : HLW8012參考例程
  3.   * Describe              : 測量功率、電壓、電流及電量參數
  4.   * Author             : 深圳合力為
  5.   * Version             : V1.0
  6. =============================================================================*/
  7. /* Includes -----------------------------------------------------------------*/

  8. //--------------------------------------------------------------------------------------------
  9. //--------------------------------------------------------------------------------------------
  10. //Time1定時器定時,時間基數 = 1ms
  11. #define D_TIME1_20MS                                20               
  12. #define D_TIME1_100MS                                100        
  13. #define D_TIME1_150MS                                150        
  14. #define D_TIME1_200MS                                200        
  15. #define D_TIME1_400MS                                400        
  16. #define D_TIME1_500MS                                500        
  17. #define D_TIME1_1S                                1000                //Time1定時器定時1S時間常數
  18. #define D_TIME1_2S                                2000        
  19. #define D_TIME1_3S                                2000        
  20. #define D_TIME1_4S                                4000        
  21. #define D_TIME1_6S                                6000
  22. #define D_TIME1_8S                                8000
  23. #define D_TIME1_9S                                9000
  24. #define D_TIME1_10S                                10000
  25. #define D_TIME1_20S                                20000


  26. #define D_TIME1_V_OVERFLOW                      500        //Time1定時器,電壓溢出常數設定為500mS,溢出說明脈寬周期大于500mS
  27. #define D_TIME1_I_OVERFLOW                        8000           //Time1定時器,電流溢出常數設定為10S,溢出說明脈寬周期大于10S
  28. #define D_TIME1_P_OVERFLOW                        12000           //Time1定時器,功率溢出常數設定為10S(約0.5W最小值),溢出說明脈寬周期大于10S
  29. //#define D_TIME1_P_OVERFLOW                        40000           //Time1定時器,功率溢出常數設定為40S(約0.2W最小值)
  30. #define D_TIME1_CAL_TIME                        36000           //校正時間,記錄在此時間內的脈沖數,1000W負載在用電36S時間內耗費0.01度電
  31. //--------------------------------------------------------------------------------------------
  32. //--------------------------------------------------------------------------------------------


  33. //HLW 8012 IO設置
  34. //--------------------------------------------------------------------------------------------
  35. //--------------------------------------------------------------------------------------------
  36. #define IO_HLW8012_CF1_S      PD_ODR_ODR3                //HLW8012 PIN8               
  37. #define IO_HLW8012_CF1        PA_IDR_IDR2                //HLW8012 PIN7        
  38. #define IO_HLW8012_CF         PC_IDR_IDR5                //HLW8012 PIN6
  39. //--------------------------------------------------------------------------------------------
  40. //--------------------------------------------------------------------------------------------        


  41. //工作模式
  42. //--------------------------------------------------------------------------------------------
  43. //--------------------------------------------------------------------------------------------
  44. #define D_ERR_MODE                        0x00        //錯誤提示模式
  45. #define D_NORMAL_MODE                              0x10            //正常工作模式
  46. #define D_CAL_START_MODE                0x21            //校正模式,啟動
  47. #define D_CAL_END_MODE                        0x23            //校正模式,完成
  48. //--------------------------------------------------------------------------------------------
  49. //--------------------------------------------------------------------------------------------


  50. //ROM定義
  51. //--------------------------------------------------------------------------------------------
  52. #define u1      _Bool
  53. #define u8        unsigned char
  54. #define u16        unsigned int
  55. #define u32        unsigned long
  56. //--------------------------------------------------------------------------------------------
  57. //--------------------------------------------------------------------------------------------
  58. union IntData
  59. {
  60.         u16  inte;                        
  61.         u8 byte[2];               
  62. };
  63. union LongData
  64. {
  65.     u32  word;               
  66.     u16  inte[2];               
  67.     u8   byte[4];               
  68. };
  69. //--------------------------------------------------------------------------------------------
  70. //--------------------------------------------------------------------------------------------
  71. u16        U16_P_TotalTimes;                        //當前脈沖 功率測量總時間
  72. u16        U16_V_TotalTimes;                        //當前脈沖 電壓測量總時間
  73. u16        U16_I_TotalTimes;                        //當前脈沖 電流測量總時間

  74. u16        U16_P_OneCycleTime;                        //功率測量時間參數
  75. u16        U16_V_OneCycleTime;                        //電壓測量時間參數
  76. u16        U16_I_OneCycleTime;                        //電流測量時間參數

  77. u16        U16_P_Last_OneCycleTime;                //功率測量時間參數,上一次數量值
  78. u16        U16_V_Last_OneCycleTime;                //電壓測量時間參數,上一次數量值
  79. u16        U16_I_Last_OneCycleTime;                //電流測量時間參數,上一次數量值

  80. u16        U16_P_CNT;                                //功率測量脈沖數量
  81. u16        U16_V_CNT;                                //電壓測量脈沖數量
  82. u16        U16_I_CNT;                                //電流測量脈沖數量

  83. u16        U16_P_Last_CNT;                                //功率測量脈沖數量,上一次數量值
  84. u16        U16_V_Last_CNT;                                //電壓測量脈沖數量,上一次數量值
  85. u16        U16_I_Last_CNT;                                //電流測量脈沖數量,上一次數量值

  86. u1        B_P_TestOneCycle_Mode;                        //功率測量模式 1:單周期測量,0:1S定時測量
  87. u1        B_V_TestOneCycle_Mode;
  88. u1        B_I_TestOneCycle_Mode;

  89. u1        B_P_Last_TestOneCycle_Mode;
  90. u1        B_V_Last_TestOneCycle_Mode;
  91. u1        B_I_Last_TestOneCycle_Mode;
  92.                     
  93. u1          B_P_OVERFLOW;                               // 功率脈沖周期 溢出標志位
  94. u1          B_V_OVERFLOW;                               // 電壓脈沖周期 溢出標志位
  95. u1          B_I_OVERFLOW;                               // 電流脈沖周期 溢出標志位

  96. u1        B_P_Last_OVERFLOW;                       // 功率脈沖周期 溢出標志位
  97. u1          B_V_Last_OVERFLOW;                       // 電壓脈沖周期 溢出標志位
  98. u1          B_I_Last_OVERFLOW;                       // 電流脈沖周期 溢出標志位

  99. u1            B_VI_Test_Mode;                                //1:電壓測量模式;0:電流測量模式
  100. u16           U16_VI_Test_Times;                                
  101. u16           U16_Cal_Times;        

  102. u16           U16_AC_P;                                //功率值 1000.0W
  103. u16           U16_AC_V;                                //電壓值 220.0V
  104. u16           U16_AC_I;                                //電流值 4.545A
  105. u32           U32_AC_E;                                //用電量   0.01度
  106. u32           U32_AC_BACKUP_E;                        //用電量備份        
  107. u8            U8_AC_COS;                                //功率因素 0.00

  108. u16           U16_REF_001_E_Pluse_CNT;                //0.01度電脈沖總數參考值
  109. u16           U16_E_Pluse_CNT;                           //脈沖個數寄存器

  110. u32           U32_Cal_Times;                                 //校正時間

  111. u32           U32_P_REF_PLUSEWIDTH_TIME;              //參考功率 脈沖周期
  112. u32           U32_V_REF_PLUSEWIDTH_TIME;              //參考電壓 脈沖周期
  113. u32           U32_I_REF_PLUSEWIDTH_TIME;              //參考電流 脈沖周期

  114. u32           U32_P_CURRENT_PLUSEWIDTH_TIME;              //當前功率 脈沖周期
  115. u32           U32_V_CURRENT_PLUSEWIDTH_TIME;              //當前電壓 脈沖周期
  116. u32           U32_I_CURRENT_PLUSEWIDTH_TIME;              //當前電流 脈沖周期

  117. u16           U16_P_REF_Data;                                //參考功率值,如以1000W校正。1000.0W
  118. u16           U16_V_REF_Data;                                //參考電壓  220.0V
  119. u16           U16_I_REF_Data;                                //參考電流  1000W,220V條件下是4.545A

  120. u8            U8_CURR_WorkMode;
  121. //--------------------------------------------------------------------------------------------



  122. //--------------------------------------------------------------------------------------------
  123. //--------------------------------------------------------------------------------------------
  124. void main(void)
  125. {
  126.    //初始化MCU
  127.    //初始化ROM
  128.    Init_Rom();
  129.    //讀取存放于EEPROM的校正數據
  130.    Read_CalData_EEPROM(); //讀取參考功率、參考電壓、參考電流的脈沖周期

  131.    while(1)
  132.   {
  133.      if (B_KeyScanEn == TRUE)
  134.      {
  135.         ScaningKey();                        //按鍵
  136.         KeyFun_NormalMode();
  137.      }
  138.      
  139.      if (U8_CURR_WorkMode == D_NORMAL_MODE)
  140.      {        
  141.         HLW8012_Measure();                //計算功率、電壓、電流
  142.      }
  143.      else if (U8_CURR_WorkMode == D_CAL_END_MODE)   //校正模式
  144.      {
  145.             //記錄校正值,將當前功率、電壓、電流值存入EEPROM;將0.01度電的脈沖數參值也存入EEPROM
  146.             Write_CalData_EEPROM();
  147.             //讀取校正值,將用電量清零
  148.             Read_CalData_EEPROM();
  149.             //返回測量模式
  150.             U8_CURR_WorkMode = D_NORMAL_MODE;
  151.      }
  152.         
  153.   }
  154. }


  155. //--------------------------------------------------------------------------------------------
  156. //--------------------------------------------------------------------------------------------
  157. /*=====================================================
  158. * Function : void Init_Rom(void)
  159. * Describe : rom空間初始化
  160. * Input    : none
  161. * Output   : none
  162. * Return   : none
  163. * Record   : 2014/04/14
  164. =====================================================*/
  165. void Init_Rom(void)
  166. {
  167.     U8_CURR_WorkMode = D_NORMAL_MODE;
  168.     U8_DspMode = 0;
  169.    
  170.     U16_AC_P = 0;
  171.     U16_AC_V = 0;
  172.     U16_AC_I = 0;
  173.     U8_AC_COS = 0;


  174.   U16_P_TotalTimes = 0;
  175.   U16_V_TotalTimes = 0;
  176.   U16_I_TotalTimes = 0;

  177.   
  178.   U16_P_OneCycleTime = 0;
  179.   U16_V_OneCycleTime = 0;
  180.   U16_I_OneCycleTime = 0;
  181.   U16_P_Last_OneCycleTime = 0;
  182.   U16_V_Last_OneCycleTime = 0;
  183.   U16_I_Last_OneCycleTime = 0;
  184.   
  185.   U16_P_CNT = 0;
  186.   U16_V_CNT = 0;
  187.   U16_I_CNT = 0;
  188.   U16_P_Last_CNT = 0;
  189.   U16_V_Last_CNT = 0;
  190.   U16_I_Last_CNT = 0;
  191.   
  192. //初始化單周期測量模式
  193.   B_P_TestOneCycle_Mode = 1;
  194.   B_V_TestOneCycle_Mode = 1;
  195.   B_I_TestOneCycle_Mode = 1;
  196.   B_P_Last_TestOneCycle_Mode = 1;
  197.   B_V_Last_TestOneCycle_Mode = 1;
  198.   B_I_Last_TestOneCycle_Mode = 1;

  199. //開始測量,置溢出標志位為1  
  200.   B_P_OVERFLOW = 1;
  201.   B_V_OVERFLOW = 1;
  202.   B_I_OVERFLOW = 1;
  203.   
  204.   B_P_Last_OVERFLOW = 1;
  205.   B_V_Last_OVERFLOW = 1;
  206.   B_I_Last_OVERFLOW = 1;
  207.   
  208. //上電初始化為電壓測試模式
  209.   B_VI_Test_Mode = 1;
  210.   IO_HLW8012_CF1_S = 1;
  211.   U16_VI_Test_Times = D_TIME1_2S;
  212.   
  213. //顯示初始化
  214.   U8_DspMode = 0;
  215.   B_DIS_EN = FALSE;
  216.   U16_SendUart_Time = 0;
  217.   
  218. }
  219. /*=====================================================
  220. * 函數名稱: PC中斷,IO---PC5
  221. * 函數功能: CF中斷 功率測量
  222. * 輸入參數: 無
  223. * 輸出參數:
  224. * 返    回:
  225. =====================================================*/
  226.   #pragma vector = 7
  227. __interrupt void PC5_EXTI_Interrupt(void)
  228. {
  229. //功率測量
  230.     U16_P_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零   
  231.     U16_P_CNT++;
  232.     if (B_P_OVERFLOW == TRUE)
  233.     {  
  234.         //從溢出模式轉入,開始測量     
  235.         B_P_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  236.         U16_P_TotalTimes = 0;       //清溢出寄存器清零
  237.         U16_P_OneCycleTime = 0;     //清測量寄存器
  238.         U16_P_CNT = 1;              
  239.         B_P_OVERFLOW = FALSE;       //清溢出標志位
  240.     }
  241.     else
  242.     {
  243.         if (B_P_TestOneCycle_Mode == 1)
  244.         {
  245.             if (U16_P_OneCycleTime >= D_TIME1_100MS)
  246.             {
  247.                 //單周期測量模式
  248.                 U16_P_Last_OneCycleTime = U16_P_OneCycleTime;
  249.                 B_P_Last_TestOneCycle_Mode = B_P_TestOneCycle_Mode;
  250.                 B_P_OVERFLOW = FALSE;       //溢出標志位清零
  251.                 B_P_Last_OVERFLOW = B_P_OVERFLOW;
  252.                  //清狀態參數,重新開始測試
  253.                 B_P_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  254.                 U16_P_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  255.                 U16_P_OneCycleTime = 0;     //清測量寄存器
  256.                 U16_P_CNT = 1;

  257.             }
  258.         }
  259.         else
  260.         {
  261.             if (U16_P_OneCycleTime >= D_TIME1_1S)
  262.             {   
  263.                 U16_P_Last_OneCycleTime = U16_P_OneCycleTime;
  264.                 U16_P_Last_CNT = U16_P_CNT;
  265.                 B_P_Last_TestOneCycle_Mode = B_P_TestOneCycle_Mode;
  266.                 B_P_OVERFLOW = FALSE;       //溢出標志位清零
  267.                 B_P_Last_OVERFLOW = B_P_OVERFLOW;
  268.                 //清狀態參數,重新開始測試
  269.                 B_P_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  270.                 U16_P_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  271.                 U16_P_OneCycleTime = 0;     //清測量寄存器
  272.                 U16_P_CNT = 1;
  273.             }
  274.         }
  275.     }
  276.    
  277.    
  278. //校正模式
  279.     if (U8_CURR_WorkMode == D_CAL_START_MODE)
  280.     {
  281.         //記錄單位時間內的用電量
  282.         U16_E_Pluse_CNT++;
  283.     }
  284.    
  285. //用電量計量,每0.01度電,用電量寄存器增加0.01度
  286.     if (U8_CURR_WorkMode == D_NORMAL_MODE)
  287.     {
  288.         U16_E_Pluse_CNT++;
  289.         if (U16_E_Pluse_CNT == U16_REF_001_E_Pluse_CNT )
  290.         {
  291.             U16_E_Pluse_CNT = 0;
  292.             U32_AC_E++;
  293.         }
  294.     }
  295. }
  296. /*=====================================================
  297. * 函數名稱: PD中斷,IO---PD2
  298. * 函數功能: CF1中斷 電壓、電流測量
  299. * 輸入參數:
  300. * 輸出參數:
  301. * 返    回:
  302. =====================================================*/
  303.   #pragma vector = 8
  304. __interrupt void PD2_EXTI_Interrupt(void)
  305. {
  306.   
  307. //電壓測試模式
  308.     if (B_VI_Test_Mode == 1)
  309.     {
  310.         U16_V_TotalTimes = 0;
  311.         U16_V_CNT++;
  312.         if (B_V_OVERFLOW == TRUE)
  313.         {                  
  314.             //從溢出模式轉入,開始測量     
  315.             B_V_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  316.             U16_V_TotalTimes = 0;       //清溢出寄存器清零
  317.             U16_V_OneCycleTime = 0;     //清測量寄存器
  318.             U16_V_CNT = 1;              
  319.             B_V_OVERFLOW = FALSE;       //清溢出標志位
  320.         }
  321.         else
  322.         {
  323.             if (B_V_TestOneCycle_Mode == 1)
  324.             {
  325.                 if (U16_V_OneCycleTime >= D_TIME1_100MS)
  326.                 {
  327.                     //單周期測量模式
  328.                     U16_V_Last_OneCycleTime = U16_V_OneCycleTime;
  329.                     B_V_Last_TestOneCycle_Mode = B_V_TestOneCycle_Mode;
  330.                     B_V_OVERFLOW = FALSE;       //溢出標志位清零
  331.                     B_V_Last_OVERFLOW = B_V_OVERFLOW;
  332.                      //清狀態參數,重新開始測試
  333.                     B_V_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  334.                     U16_V_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  335.                     U16_V_OneCycleTime = 0;     //清測量寄存器
  336.                     U16_V_CNT = 1;
  337.                 }
  338.             }
  339.             else
  340.             {
  341.                 if (U16_V_OneCycleTime >= D_TIME1_200MS)
  342.                 {   
  343.                     U16_V_Last_OneCycleTime = U16_V_OneCycleTime;
  344.                     U16_V_Last_CNT = U16_V_CNT;
  345.                     B_V_Last_TestOneCycle_Mode = B_V_TestOneCycle_Mode;
  346.                     B_V_OVERFLOW = FALSE;       //溢出標志位清零
  347.                     B_V_Last_OVERFLOW = B_V_OVERFLOW;
  348.                     //清狀態參數,重新開始測試
  349.                     B_V_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  350.                     U16_V_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  351.                     U16_V_OneCycleTime = 0;     //清測量寄存器
  352.                     U16_V_CNT = 1;
  353.                     B_V_OVERFLOW = FALSE;       //溢出標志位清零
  354.                 }
  355.             }
  356.         }
  357.      }

  358. //電流測試模式
  359.     if (B_VI_Test_Mode == 0)
  360.     {
  361.         U16_I_TotalTimes = 0;
  362.         U16_I_CNT++;
  363.         if (B_I_OVERFLOW == TRUE)
  364.         {
  365.             //從溢出模式轉入,開始測量     
  366.             B_I_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  367.             U16_I_TotalTimes = 0;       //清溢出寄存器清零
  368.             U16_I_OneCycleTime = 0;     //清測量寄存器
  369.             U16_I_CNT = 1;              
  370.             B_I_OVERFLOW = FALSE;       //清溢出標志位
  371.         }
  372.         else
  373.         {
  374.             if (B_I_TestOneCycle_Mode == 1)
  375.             {
  376.                 if (U16_I_OneCycleTime >= D_TIME1_100MS)
  377.                 {
  378.                     //單周期測量模式
  379.                     U16_I_Last_OneCycleTime = U16_I_OneCycleTime;
  380.                     B_I_Last_TestOneCycle_Mode = B_I_TestOneCycle_Mode;
  381.                     B_I_OVERFLOW = FALSE;       //溢出標志位清零
  382.                     B_I_Last_OVERFLOW = B_I_OVERFLOW;
  383.                      //清狀態參數,重新開始測試
  384.                     B_I_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  385.                     U16_I_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  386.                     U16_I_OneCycleTime = 0;     //清測量寄存器
  387.                     U16_I_CNT = 1;
  388.                 }
  389.             }
  390.             else
  391.             {
  392.                 if (U16_I_OneCycleTime >= D_TIME1_1S)
  393.                 {   
  394.                     U16_I_Last_OneCycleTime = U16_I_OneCycleTime;
  395.                     U16_I_Last_CNT = U16_I_CNT;
  396.                     B_I_Last_TestOneCycle_Mode = B_I_TestOneCycle_Mode;  
  397.                     B_I_OVERFLOW = FALSE;       //溢出標志位清零
  398.                     B_I_Last_OVERFLOW = B_I_OVERFLOW;
  399.                     //清狀態參數,重新開始測試
  400.                     B_I_TestOneCycle_Mode = 0;  //初始化為計數脈沖測量模式
  401.                     U16_I_TotalTimes = 0;       //完成一次有效的測量,溢出寄存器清零
  402.                     U16_I_OneCycleTime = 0;     //清測量寄存器
  403.                     U16_I_CNT = 1;
  404.                 }
  405.             }
  406.         }
  407.     }
  408. }
  409. /*=====================================================
  410. * 函數名稱: TIM1
  411. * 函數功能: 測量功率、電壓、電流
  412. * 輸入參數:
  413. * 輸出參數:
  414. * 返    回:
  415. =====================================================*/
  416.   #pragma vector = 13
  417. __interrupt void TIM1_UPD_Interrupt(void)
  418. {
  419. //校正模式
  420.     if (U8_CURR_WorkMode == D_CAL_START_MODE)
  421.     {
  422.         U32_Cal_Times++;//校正時間36S,1000W負載36S時間消耗0.01度電
  423.         if (U32_Cal_Times == D_TIME1_CAL_TIME)
  424.         {
  425.             U8_CURR_WorkMode = D_CAL_END_MODE;                        
  426.             U16_REF_001_E_Pluse_CNT = U16_E_Pluse_CNT;                //記錄36S時間內的脈沖數,此脈沖數表示0.01度用電量
  427.         }
  428.     }
  429.    
  430. //功率測量
  431.     if (U16_P_CNT != 0)
  432.     {
  433.         U16_P_OneCycleTime++;
  434.         U16_P_TotalTimes++;
  435.     }  
  436.     if (U16_P_TotalTimes >= D_TIME1_P_OVERFLOW)
  437.     {
  438.         B_P_OVERFLOW = TRUE;                 //溢出,
  439.         B_P_Last_OVERFLOW = B_P_OVERFLOW;
  440.         //清狀態參數,重新開始測試
  441.         U16_P_TotalTimes = 0;       //清溢出寄存器
  442.         U16_P_OneCycleTime = 0;
  443.         U16_P_CNT = 0;              //等待下一次中斷開始計數
  444.         B_P_TestOneCycle_Mode = 0;   //初始化為計數脈沖測量模式      
  445.     }
  446.     else if (U16_P_OneCycleTime == D_TIME1_100MS)
  447.     {
  448.       if (U16_P_CNT < 2)
  449.       {
  450.         // 100ms內只有一次中斷,說明周期>100ms,采用單周期測量模式
  451.         B_P_TestOneCycle_Mode = 1;
  452.       }
  453.       else
  454.       {
  455.          // 100ms內有2次或以上數量脈沖,說明周期<100ms,采用計數脈沖測量模式
  456.          B_P_TestOneCycle_Mode = 0;   
  457.       }
  458.     }
  459.    
  460. //電壓、電流測量
  461.     if (B_VI_Test_Mode == 1)
  462.     {
  463.         //電壓測量      
  464.         if (U16_V_CNT != 0)
  465.         {
  466.             U16_V_OneCycleTime++;
  467.             U16_V_TotalTimes++;
  468.         }  
  469.         if (U16_V_TotalTimes >= D_TIME1_V_OVERFLOW)
  470.         {
  471.             B_V_OVERFLOW = TRUE;
  472.             B_V_Last_OVERFLOW = B_V_OVERFLOW;
  473.             //清狀態參數,重新開始測試
  474.             U16_V_TotalTimes = 0;       //清溢出寄存器
  475.             U16_V_OneCycleTime = 0;
  476.             U16_V_CNT = 0;              
  477.             B_V_TestOneCycle_Mode = 0;   //初始化為計數脈沖測量模式      
  478.         }
  479.         else if (U16_V_OneCycleTime == D_TIME1_100MS)
  480.         {
  481.           if (U16_V_CNT < 2)
  482.           {
  483.             // 100ms內只有一次中斷,說明周期>100ms,采用單周期測量模式
  484.             B_V_TestOneCycle_Mode = 1;
  485.           }
  486.           else
  487.           {
  488.              // 100ms內有2次或以上數量脈沖,說明周期<100ms,采用計數脈沖測量模式
  489.              B_V_TestOneCycle_Mode = 0;   
  490.           }
  491.         }
  492.     }
  493.     else
  494.     {
  495.         //電流測量   
  496.         if (U16_I_CNT != 0)
  497.         {
  498.             U16_I_OneCycleTime++;
  499.             U16_I_TotalTimes++;
  500.         }  
  501.         if (U16_I_TotalTimes >= D_TIME1_I_OVERFLOW)
  502.         {
  503.             B_I_OVERFLOW = TRUE;
  504.             B_I_Last_OVERFLOW = B_I_OVERFLOW;
  505.             //清狀態參數,重新開始測試
  506.             U16_I_TotalTimes = 0;       //清溢出寄存器
  507.             U16_I_OneCycleTime = 0;
  508.             U16_I_CNT = 0;
  509.             B_I_TestOneCycle_Mode = 0;   //初始化為計數脈沖測量模式      
  510.         }
  511.         else if (U16_I_OneCycleTime == D_TIME1_100MS)
  512.         {
  513.           if (U16_I_CNT < 2)
  514.           {
  515.             // 100ms內只有一次中斷,說明周期>100ms,采用單周期測量模式
  516.             B_I_TestOneCycle_Mode = 1;
  517.           }
  518.           else
  519.           {
  520.              // 100ms內有2次或以上數量脈沖,說明周期<100ms,采用計數脈沖測量模式
  521.              B_I_TestOneCycle_Mode = 0;   
  522.           }
  523.         }
  524.     }
  525.       

  526. //電壓、電流測量模式切換  B_VI_Test_Mode:(1:電壓測量模式) (0:電流測試模式)
  527.     U16_VI_Test_Times--;
  528.     if (U16_VI_Test_Times == 0)
  529.     {
  530.         if (B_VI_Test_Mode == 1)
  531.         {
  532.             //轉為電流測量模式
  533.             B_VI_Test_Mode = 0;
  534.             IO_HLW8012_CF1_S = 0;
  535.             U16_VI_Test_Times = D_TIME1_10S;
  536.             
  537.             //清狀態參數
  538.             U16_I_TotalTimes = 0;
  539.             U16_I_OneCycleTime = 0;
  540.             U16_I_CNT = 0;
  541.             B_I_OVERFLOW = FALSE;
  542.         }
  543.         else
  544.         {
  545.             //轉為電壓測量模式
  546.             B_VI_Test_Mode = 1;
  547.             IO_HLW8012_CF1_S = 1;
  548.             U16_VI_Test_Times = D_TIME1_1S;
  549.             
  550.             //清狀態參數
  551.             U16_V_TotalTimes = 0;
  552.             U16_V_OneCycleTime = 0;
  553.             U16_V_CNT = 0;
  554.             B_V_OVERFLOW = FALSE;
  555.         }
  556.     }
  557.   
  558. //按鍵掃描,20mS一次
  559.         U8_KeyScanTimes++;
  560.           if (U8_KeyScanTimes > D_TIME1_20MS)
  561.           {
  562.                       B_KeyScanEn = TRUE;
  563.                   U8_KeyScanTimes = 0;
  564.           }
  565.    
  566. // 每0.5S串口發送一次數據
  567.     U16_SendUart_Time++;
  568.     if (U16_SendUart_Time == D_TIME1_500MS)
  569.     {
  570.         B_DIS_EN = TRUE;
  571.         U16_SendUart_Time = 0;
  572.     }

  573. // Clear TIM1 INT FLAG   
  574.    TIM1_SR1 = 0x00;      
  575. }



  576. /*-------------------------------------------- 功率、電壓、電流計算 -------------------------------------------*/


  577. *=====================================================
  578. * Function : void HLW8012_Measure_P(void)
  579. * Describe :
  580. * Input    : none
  581. * Output   : none
  582. * Return   : none
  583. * Record   : 2014/04/14
  584. =====================================================*/
  585. void HLW8012_Measure_P(void)
  586. {
  587.     u32 a;
  588.     u32 b;
  589.     u32 u32_P_Period;
  590.    
  591.     if (B_P_Last_TestOneCycle_Mode == 1)
  592.     {
  593.        //單周期測量模式
  594.        b = U16_P_Last_OneCycleTime;
  595.        b = b*1000;  //ms轉換成us
  596.        u32_P_Period = b;   
  597.     }
  598.     else
  599.     {
  600.       //計數脈沖測量模式
  601.       b = U16_P_Last_OneCycleTime;
  602.       b = b*1000;
  603.       u32_P_Period = b/(U16_P_Last_CNT-1);  
  604.     }
  605.    
  606.     U32_P_CURRENT_PLUSEWIDTH_TIME = u32_P_Period;      // 校正時取U32_P_CURRENT_PLUSEWIDTH_TIME參數作為參考值     
  607.     a = U16_P_REF_Data * U32_P_REF_PLUSEWIDTH_TIME;        
  608.     U16_AC_P = a/U32_P_CURRENT_PLUSEWIDTH_TIME;
  609.    
  610.     if (U16_AC_P == 0xffff)     //開機時U32_P_CURRENT_PLUSEWIDTH_TIME = 0,計算溢出
  611.     {
  612.         U16_AC_P = 0;
  613.     }
  614.    
  615.     if (B_P_Last_OVERFLOW == TRUE)
  616.     {
  617.         U16_AC_P = 0;
  618.     }
  619. }
  620. /*=====================================================
  621. * Function : void HLW8012_Measure_V(void)
  622. * Describe :
  623. * Input    : none
  624. * Output   : none
  625. * Return   : none
  626. * Record   : 2014/04/14
  627. =====================================================*/
  628. void HLW8012_Measure_V(void)
  629. {
  630.     u32 a;
  631.     u32 b;
  632.     u32 u32_V_Period;
  633.    
  634.     if (U16_VI_Test_Times < D_TIME1_100MS)
  635.     {
  636.         if (B_V_Last_TestOneCycle_Mode == 1)
  637.         {
  638.             b = U16_V_Last_OneCycleTime;
  639.             u32_V_Period = b * 1000;   //ms轉換成us
  640.             U32_V_CURRENT_PLUSEWIDTH_TIME = u32_V_Period;  
  641.         }
  642.         else
  643.         {
  644.              b = U16_V_Last_OneCycleTime;
  645.              b = b*1000;
  646.              u32_V_Period = b/(U16_V_Last_CNT-1);
  647.              //u32_V_Period = b/U16_V_Last_CNT;
  648.              U32_V_CURRENT_PLUSEWIDTH_TIME = u32_V_Period;  
  649.         }
  650.     }
  651.          
  652.     a = U16_V_REF_Data * U32_V_REF_PLUSEWIDTH_TIME;
  653.     U16_AC_V = a/U32_V_CURRENT_PLUSEWIDTH_TIME;
  654.    
  655.     if (U16_AC_V == 0xffff)     //開機時U32_V_CURRENT_PLUSEWIDTH_TIME = 0,計算溢出
  656.     {
  657.         U16_AC_V = 0;
  658.     }
  659.    
  660.     if (B_V_Last_OVERFLOW == TRUE)
  661.     {
  662.         U16_AC_V = 0;
  663.     }
  664.    
  665.     if (U16_AC_P == 0)
  666.     {
  667.         U16_AC_V = 0;
  668.       
  669.     }
  670. }
  671. /*=====================================================
  672. * Function : void HLW8012_Measure_I(void)
  673. * Describe :
  674. * Input    : none
  675. * Output   : none
  676. * Return   : none
  677. * Record   : 2014/04/14
  678. =====================================================*/
  679. void HLW8012_Measure_I(void)
  680. {
  681.     u32 a;
  682.     u32 b;
  683.     u32 u32_I_Period;  
  684.    
  685.     if (U16_VI_Test_Times < D_TIME1_6S)
  686.     {
  687.         if (B_I_Last_TestOneCycle_Mode == 1)
  688.         {

  689.             b = U16_I_Last_OneCycleTime;
  690.             u32_I_Period = b * 1000;   //ms轉換成us
  691.             U32_I_CURRENT_PLUSEWIDTH_TIME = u32_I_Period;
  692.         }
  693.         else
  694.         {
  695.              b = U16_I_Last_OneCycleTime;
  696.              b = b*1000;
  697.              u32_I_Period = b/(U16_I_Last_CNT-1);
  698.              //u32_I_Period = b/U16_I_Last_CNT;
  699.              U32_I_CURRENT_PLUSEWIDTH_TIME = u32_I_Period;
  700.         }
  701.     }
  702.    
  703.          
  704.     a = U16_I_REF_Data * U32_I_REF_PLUSEWIDTH_TIME;
  705.     U16_AC_I = a/U32_I_CURRENT_PLUSEWIDTH_TIME;
  706.    
  707.    
  708.     if (U16_AC_I > 180)
  709.     {   
  710.        if (U16_AC_I != 0xffff)
  711.        {
  712.             NOP();
  713.             NOP();
  714.        }
  715.     }
  716.       
  717.     if (U16_AC_P == 0)
  718.     {
  719.         U16_AC_I = 0;
  720.       
  721.     }
  722.    
  723.     if (U16_AC_I == 0xffff)     //開機時U32_I_CURRENT_PLUSEWIDTH_TIME = 0,計算溢出
  724.     {
  725.         U16_AC_I = 0;
  726.     }
  727.    
  728.     if (B_I_OVERFLOW == TRUE)
  729.     {
  730.         U16_AC_I = 0;  
  731.     }
  732. }
  733. /*=====================================================
  734. * Function : void HLW8012_Measure_COS(void)
  735. * Describe :
  736. * Input    : none
  737. * Output   : none
  738. * Return   : none
  739. * Record   : 2014/04/14
  740. =====================================================*/
  741. void HLW8012_Measure_COS(void)
  742. {
  743.   u32 u32_P_Apparent;
  744.   u32 a;
  745.   u8 b;
  746.   u32_P_Apparent = (u32)U16_AC_I*(u32)U16_AC_V;
  747.   u32_P_Apparent = u32_P_Apparent/1000;
  748.   a = U16_AC_P;
  749.   a = a*100;
  750.   
  751.   b = (u8)(a/u32_P_Apparent);
  752.   if (b > 100 )
  753.     U8_AC_COS = 100;                 //由于相位延時造成的功率因素>1的情況,功率因素取值1
  754.   else
  755.     U8_AC_COS = b;
  756. }
  757. /*=====================================================
  758. * Function : void HLW8012_Measure_E(void)
  759. * Describe : 每1度電存儲一次
  760. ……………………

  761. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料51hei下載地址:
HLW8012設計資料REV30.7z (11.34 MB, 下載次數: 689)


評分

參與人數 2黑幣 +55 收起 理由
hanm + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏20 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-7-24 02:39 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:389627 發表于 2018-8-24 14:02 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

地板
ID:65956 發表于 2018-9-20 15:42 | 只看該作者
有沒有8032的程序
回復

使用道具 舉報

5#
ID:140186 發表于 2018-9-20 16:21 | 只看該作者
厲害,對于信號走線這塊真的很難搞啊!
回復

使用道具 舉報

6#
ID:100247 發表于 2018-9-21 16:54 | 只看該作者
謝謝共享!資料很有學習價值!
回復

使用道具 舉報

7#
ID:295805 發表于 2018-11-9 12:01 | 只看該作者
為貼吧有你這樣的人才而驕傲
回復

使用道具 舉報

8#
ID:433318 發表于 2018-11-26 11:46 | 只看該作者
謝謝分享
回復

使用道具 舉報

9#
ID:439802 發表于 2018-12-5 10:18 | 只看該作者
好資料,謝謝
回復

使用道具 舉報

10#
ID:58730 發表于 2019-1-19 17:09 | 只看該作者
謝謝分享
回復

使用道具 舉報

11#
ID:76408 發表于 2019-2-20 13:20 | 只看該作者
謝謝樓主,我正需要這樣的資料,辛苦你了!
回復

使用道具 舉報

12#
ID:478526 發表于 2019-2-20 15:58 | 只看該作者
謝謝樓主,辛苦了。
回復

使用道具 舉報

13#
ID:461544 發表于 2019-4-26 22:50 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

14#
ID:461544 發表于 2019-4-26 22:55 | 只看該作者
超級崇拜的說
回復

使用道具 舉報

15#
ID:384489 發表于 2019-5-14 15:06 | 只看該作者
很有參考意義,謝謝分享~
回復

使用道具 舉報

16#
ID:463412 發表于 2019-5-15 11:18 | 只看該作者
感謝分享 這個資料很珍貴
回復

使用道具 舉報

17#
ID:515763 發表于 2019-5-20 17:56 | 只看該作者
HLW8012與HLW8032有什么區別么
回復

使用道具 舉報

18#
ID:554047 發表于 2019-6-3 19:34 | 只看該作者
感謝分享
回復

使用道具 舉報

19#
ID:563165 發表于 2019-6-15 18:16 | 只看該作者
不錯 不錯 很有幫助。謝謝分享
回復

使用道具 舉報

20#
ID:79836 發表于 2019-6-20 09:32 | 只看該作者
不錯不錯 很好 很好
回復

使用道具 舉報

21#
ID:79836 發表于 2019-6-20 09:50 | 只看該作者
非常棒  學習下  很不錯的帖子
回復

使用道具 舉報

22#
ID:88154 發表于 2019-7-18 17:46 | 只看該作者

非常棒  學習下  很不錯的帖子
回復

使用道具 舉報

23#
ID:593299 發表于 2019-7-31 20:35 | 只看該作者
好多的資料啊。樓主多謝多謝。
回復

使用道具 舉報

24#
ID:596829 發表于 2019-8-7 13:52 | 只看該作者

厲害,對于信號走線這塊真的很難搞啊!
回復

使用道具 舉報

25#
ID:600983 發表于 2019-8-17 09:02 | 只看該作者
非常棒的資料,謝謝樓主分享
回復

使用道具 舉報

26#
ID:567636 發表于 2019-8-17 23:06 | 只看該作者
這個資料很好,多謝分享!
回復

使用道具 舉報

27#
ID:166646 發表于 2019-8-19 10:24 | 只看該作者
謝謝資料讓人學習了
回復

使用道具 舉報

28#
ID:606369 發表于 2019-9-2 15:37 | 只看該作者
樓主有一個問題,就是電路中繼電器出來可以直接將火線接入采樣電路中嗎
回復

使用道具 舉報

29#
ID:589517 發表于 2019-9-9 16:37 | 只看該作者
太棒了
回復

使用道具 舉報

30#
ID:15104 發表于 2019-9-19 19:36 | 只看該作者
感謝分享!!!
回復

使用道具 舉報

31#
ID:614352 發表于 2019-9-23 09:43 | 只看該作者
感謝分享。。。。。。。。
回復

使用道具 舉報

32#
ID:620246 發表于 2019-10-7 21:54 | 只看該作者

感謝分享。。。。。。。。
回復

使用道具 舉報

33#
ID:628639 發表于 2019-10-23 09:04 | 只看該作者
不錯,先謝樓主!
回復

使用道具 舉報

34#
ID:646428 發表于 2019-11-22 09:10 | 只看該作者
這個確實給力
回復

使用道具 舉報

35#
ID:292097 發表于 2019-12-17 18:28 | 只看該作者
非常值得我們參考學習,感謝樓主的無私奉獻
回復

使用道具 舉報

36#
ID:71421 發表于 2019-12-19 10:34 | 只看該作者
厲害!!!連布線的細節都介紹得清清楚楚。
回復

使用道具 舉報

37#
ID:71535 發表于 2019-12-22 18:14 | 只看該作者

謝謝分享!資料很有學習價值!
回復

使用道具 舉報

38#
ID:292097 發表于 2020-1-1 17:10 | 只看該作者
不錯非常好的作品,值得參考
回復

使用道具 舉報

39#
ID:682092 發表于 2020-1-6 14:12 | 只看該作者
dw772 發表于 2019-11-4 15:05
版主您好,你提供的文件是不是損壞了,下載下來解壓出來是空文件

我也是,下載了之后提示損壞了,解決問題了么?
回復

使用道具 舉報

40#
ID:196774 發表于 2020-2-9 21:00 來自手機 | 只看該作者
正是需要學習的資料,謝謝整理分享。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线观看视频一区 | 国外成人在线视频 | 中文成人在线 | 精品久久久久久亚洲综合网 | 国产精品久久久久久亚洲调教 | 国产精品免费一区二区 | 91精品国产乱码久久久久久 | 日韩视频免费看 | 日日日日日日bbbbb视频 | 中文字幕一区二区在线观看 | 国产成人综合网 | 精品国产一区探花在线观看 | 亚洲高清视频一区 | 亚洲日本一区二区 | www.四虎.com| 日韩精品在线免费观看 | 国产91色在线 | 亚洲 | 99久久免费精品 | 亚洲欧美成人影院 | 欧美精品一区在线 | 国产精品久久久久久久午夜片 | 成人福利网站 | 亚洲精品久久久久久久久久久久久 | 日韩欧美综合在线视频 | 亚洲精品v日韩精品 | 久久精品视频一区二区三区 | 精品国产色 | 亚洲精品中文字幕在线观看 | 亚洲精品免费在线观看 | 在线免费观看日本视频 | 男女羞羞视频在线观看 | 欧美一区二区在线观看 | av毛片 | 欧美精品在欧美一区二区少妇 | 久久精品99国产精品日本 | 天天躁日日躁aaaa视频 | 国产精品1区2区 | 国产亚洲精品久久久久动 | 最新日韩在线 | 免费黄色片视频 | 一级a爱片性色毛片免费 |