找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3862|回复: 1
收起左侧

基于stm32的智能插座程序设计,hlw8012和DHT11和iaq等传感器设计代码

[复制链接]
ID:486397 发表于 2019-3-7 17:18 | 显示全部楼层 |阅读模式
基于stm32的智能插座设计,其中包含hlw8012和DHT11和iaq等传感器设计代码,用于测量电流电压功率和温度湿度和空气中的TVOC值。同时也用到了i2c。

单片机源程序如下:
  1. #include "pbdata.h"


  2. extern u8 P_mode_flag;
  3. extern u8 I_mode_flag;
  4. extern u8 V_mode_flag;
  5. extern u8 close_IT_flag;

  6. u8 select_mode(u8 Mode)//默认为电流模式,返回值为当前的模式
  7. {

  8.    if(Mode ==1)
  9.          {
  10.             HLW8012_SEL_L;
  11.          }
  12.          else
  13.    {
  14.             HLW8012_SEL_H;
  15.          }
  16.          return Mode ;
  17.                  
  18. }
  19. float HLW_avg(float *PULSE_T)
  20. {
  21.           u16 k;
  22.           float  avg_8012=0;
  23.     for(k=0;k<10;k++)
  24.         {
  25.                  avg_8012= avg_8012+*(PULSE_T+k);
  26.            
  27.         }
  28.         avg_8012=avg_8012/10;
  29.         return avg_8012 ;
  30. }

  31. float HLW_V_DATA_CAL(float mea_V,float avg_8012)
  32. {
  33.   mea_V=(cal_V*cal_V_T)/avg_8012;
  34.         return mea_V;
  35. }
  36. float HLW_I_DATA_CAL(float mea_I,float avg_8012)
  37. {
  38.   mea_I=(cal_I*cal_I_T)/avg_8012;
  39.         return mea_I;
  40. }

  41. float HLW_P_DATA_CAL(float mea_P,float avg_8012)
  42. {
  43.   mea_P=(cal_P*cal_P_T)/avg_8012;
  44.         return mea_P;
  45. }

  46. void HLW_close_IT(void)
  47. {
  48.                                  TIM3->CR1 &= ~(0x01);
  49.                EXTI->IMR&=~(1<<1);//屏蔽line11上的中断
  50.                      EXTI->IMR&=~(1<<2);//屏蔽line11上的中断
  51.                                         P_mode_flag=0;
  52.                                         I_mode_flag=0;
  53.                                         V_mode_flag=0;
  54. }
  55. float HLW_P_factor(float mea_P,float mea_V,float mea_I)
  56. {
  57.     float P_factor;
  58.           P_factor=mea_P/(mea_V *mea_I );
  59.           return P_factor;
  60. }
  61. void HLW_8012_data(float mea_P,float mea_V,float mea_I,float P_factor)
  62. {
  63.                                                     printf("有效电压为: %.3f  V\r\n",mea_V);        
  64.                                                                 printf("有效电流为: %.3f  A\r\n",mea_I);
  65.                                                                 printf("有功功率为: %.3f  W\r\n",mea_P);
  66.                                                                 P_factor =HLW_P_factor(mea_P,mea_V,mea_I);
  67.                                                                 printf("功率因数为: %3f  \r\n",        P_factor);
  68. }
复制代码
  1. #include "pbdata.h"




  2. float mea_P;              //测量的有效功率
  3. float mea_apparent_P_;    //测量的视在功率
  4. float P_factor ;          //测量的功率因数
  5. float mea_V;              //测量的电压
  6. float mea_I;              //测量的电流


  7. u8 shift_Mode=0;

  8. u8 P_mode_flag=0;
  9. u8 I_mode_flag=0;
  10. u8 V_mode_flag=0;
  11. u8 close_IT_flag=0;


  12. u8 DHT11_sd;       
  13. u8 DHT11_wd;       




  14. u8 iaq_Read_buf[9];       //读取的数据存放的数组
  15. u16 iaq_pred;
  16. u8 iaq_status;
  17. s32 iaq_res;
  18. u16 iaq_tvoc;

  19. u32 ad=0; //存放ADC1读取的数值
  20. u32 ad1=0;//存放ADC2读取的数值
  21. u8 i=0;
  22. u8 j=0;

  23. double gl=0.5;
  24. double dy=1,dl=0.3;       




  25. int main(void)
  26. {

  27.    RCC_Configuration();        //系统时钟初始化
  28.    GPIO_Configuration();//端口初始化
  29.    USART_Configuration();//串口配置
  30.    NVIC_Configuration(); //中断优先级配置
  31.    ADC_Configuration();        //ADC
  32.          ADC2_Configuration();
  33.          I2C_Self_Init();//软件模拟I2C
  34.    EXTI_Configuration();
  35.         // TIM3_Configuration();//定时中断配置
  36.          LCD_Init();           //液晶屏初始化
  37.          LCD_Show();
  38.        
  39.   while(1)
  40.    {

  41.    }
  42. }
复制代码


所有资料51hei提供下载:
程序.zip (3.26 KB, 下载次数: 78)


评分

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

查看全部评分

回复

使用道具 举报

ID:202803 发表于 2020-4-1 10:18 | 显示全部楼层
您好,,请教一下,hlw8012这个芯片怎么通过频率算出功率和电流啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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