目录

  • 概述
  • 主要特点
  • 系统框图
  • 封装与管脚描述
  • 大致寄存器说明
  • 硬件实现和计量数据转换公式
  • 通讯接口-SPI
  • 代码实现

概述

BL0942 是一颗内置时钟免校准电能计量芯片。
BL0942 能够测量电流、电压有效值、有功功率、有功电能量等参数。

主要特点

  1. 两路独立的 Sigma-Delta ADC,一路电流和一路电压
  2. 电流有效值范围(10mA~30A)@1mohm
  3. 有功电能(1w~6600w)@1mohm@220V
  4. 可输出电流、电压有效值,快速电流有效值,有功功率
  5. 批次出厂增益误差小于 1%,外围元件满足一定条件下可以免校准
  6. SPI(最快速率支持 900KHz)/UART(4800-38400bps)通信方式(TSSOP14L 封装支持最多 4 片级联
    Uart 通信)
  7. 电源掉电监测,低于 2.7V 时,芯片进入复位状态
  8. 内置 1.218V 参考电压源
  9. 芯片单工作电源 3.3V,低功耗 10mW(典型值)

系统框图

封装与管脚描述


大致寄存器说明


硬件实现和计量数据转换公式

通讯接口-SPI

  1. 工作在从模式
  2. 半双工通讯,通讯率可配,最大通讯速率 900Khz
  3. 固定一种时钟极性/相位(CPOL=0,CPHA=1)
  4. 帧结构:
    在通信模式下,先发送 8bit 识别字节(0x58) 或(0xA8),(0x58)是读操作识别字节,(0xA8)是写操作
    识别字节,然后再发送寄存器地址字节,决定访问寄存器的地址(请参见 BL0942 寄存器列表)。
    下图分别示出读出和写入操作的数据传送顺序。一帧数据传送完成,BL0942 重新进入通信模式。每次读/写操作所需的 SCLK 的脉冲个数均为 48 位。

代码实现

1.SPI通信–HAL库发送接收接口
SPI 使用硬件SPI软控制CS

//延时函数,一个计数1US
void Bl09_Delay(u8 count);
//发送:
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//接收:
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);

2.

#define R_I_RMS          0x03        //电流有效值寄存器,无符号
#define R_V_RMS         0x04        //电压有效值寄存器,无符号
#define R_WATT          0x06        //有功功率寄存器,有符号
#define R_CF_CNT        0x07        //有功电能脉冲计数寄存器,无符号
#define R_MODE          0x19        //用户模式选择寄存器
#define R_SOFT_RESET    0x1c        //写入 0x5A5A5A 时,用户区寄存器复位
#define R_USR_WRPROT    0x1D        //用户写保护设置寄存器volatile float Meter_Rece_Voltage = 0;
volatile float Meter_Rece_Current = 0;
volatile float Meter_Rece_Elec = 0;/*******************************************************************************
功能描述:对BL0942的寄存器写
输入参数:    addr:寄存器地址temp:寄存器值
*******************************************************************************/
void BL09_Write_Reg(uint8 addr, uint32 temp)
{u8 sendData[6] = {0};sendData[0] = 0XA8;         //写操作识别字节sendData[1] = addr;           //地址sendData[2] = (u8)((temp&0x00ff0000)>>16);sendData[3] = (u8)((temp&0x0000ff00)>>8);sendData[4] = (u8)((temp&0x000000ff));//检验和数据sendData[5] = ((sendData[0]+sendData[1]+sendData[2]+sendData[3]+sendData[4]) & 0xff);sendData[5] = ~sendData[5];//拉高CSHAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);Bl09_Delay(10);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);Bl09_Delay(5);HAL_SPI_Transmit(&hspi2, sendData, 6 ,1000);Bl09_Delay(5);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
}/*******************************************************************************
功能描述:对BL0942的寄存器读
输入参数:    addr:寄存器地址data:
返回值:     0:读取失败1:读取成功
*******************************************************************************/
uint8 BL09_Read_Reg(uint8 addr, uint32 *data)
{u8 sendData[6] = {0};u8 recvData[6] = {0};u8 checkSum;sendData[0] = 0x58;           //读操作识别字节sendData[1] = addr;           //寄存器地址//拉高CSHAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);Bl09_Delay(10);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);Bl09_Delay(5);HAL_SPI_TransmitReceive(&hspi2,  sendData, recvData, 6, 1000);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//校验和计算checkSum = (sendData[0]+sendData[1]+recvData[2]+recvData[3]+recvData[4]) & 0xff;checkSum = ~checkSum;if(checkSum != recvData[5])return 0;*data = (recvData[2]<<16) + (recvData[3]<<8) + recvData[4];return 1;
}
//BL0942初始化
void BL09_Init(void)
{u32 writeData = 0;u32 readData = 0;OS_ERR err;writeData = 0x5a5a5a;     //用户去寄存器复位,使用BL09_Write_Reg(R_SOFT_RESET, writeData);        Bl09_Delay(250);Bl09_Delay(250);while(1){writeData = 0x55;         //关闭写保护BL09_Write_Reg(R_USR_WRPROT, writeData);writeData = 0;if(BL09_Read_Reg(R_MODE, &readData)){writeData = (readData|(0x01<<6));BL09_Write_Reg(R_MODE, writeData);}if(BL09_Read_Reg(R_MODE, &readData)){if(readData == writeData)break;}OSTimeDly  ((OS_TICK        )100,(OS_OPT        )OS_OPT_TIME_DLY,(OS_ERR       *)&err);        }   writeData = 0xaa;          //开启写保护BL09_Write_Reg(R_USR_WRPROT, writeData);
}//BLO942电表数据采集
//这里用的是CT1=1000的电流互感器
void BL09_Meter_Scan(void)
{float tampElec = 0;   if(BL09_Read_Reg(R_V_RMS, &regData))Meter_Rece_Voltage = regData*6.612/100000;if(BL09_Read_Reg(R_I_RMS, &regData))Meter_Rece_Current = regData*1.206/1000000;         if(BL09_Read_Reg(R_CF_CNT, &regData)){tampElec = regData*5.947/100000;                 Meter_Rece_Elec += tampElec;}
}

使用BL0942 计量芯片获取计量数据相关推荐

  1. 免校准的电量计量芯片_万物互联,开启智慧计量新时代—2020年中国物联网计量创新发展论坛在济南举办...

    10月22日,2020年中国物联网计量创新发展论坛在泉城济南举办.论坛以"万物互联,开启智慧计量新时代"为鲜明主题,共同探讨了物联网计量领域新技术.新成绩,提出了新方向.新前景.浙 ...

  2. 电能计量芯片应用心得之选型篇

    电能计量芯片应用心得之选型篇 什么是计量芯片 计量芯片是测量交流电信号的一类芯片,因最早是使用于电表产品,所以在行业内也俗称电表芯片,它可以统计用电负载的用电量.测量用电负载的功率大小和电流大小,以及 ...

  3. 免校准的电量计量芯片_【应用】基于高精度免校准电能计量芯片CSE7761的漏电保护设计,可支持单芯片两路计量...

    随着家电产业开始步入物联网时代,终端企业也开始借助更为智能的手段来保障电器的使用安全,如电器电能监测.过载检测.故障预警等等,使得电能计量芯片开始崭露头角.本文将介绍 漏电是由于电器外壳和市电火线间因 ...

  4. ESP8266+电能计量芯片

    ESP8266+BL0937电能计量芯片 1. BL0937计量芯片的介绍 BL0937的应用电路图 BL0937的外围电路图 2. ESP8266与BL0937芯片的引脚连接 ESP引脚 BL093 ...

  5. 计量芯片应用心得之软件篇

    本文内容是我从对电表芯片应用中,积累的一些经验,以便于工程师朋友可以对计量芯片有更多的了解,在应用过程中能够有一些帮助和收获.我们以HLW8110为例,讲一讲软件处理前需要知道的一些芯片原理,和在软件 ...

  6. 免校准的电量计量芯片_具有免校准和带漏电检测功能的计量芯片HLW8112

    具有免校准和带漏电检测功能的计量芯片 HLW8112 未来几年,更多的家电产品将要步入智能化,而随着物联网的快速发展,基 于数字化.物联网和大数据的智能家电将是未来的趋势. 智能家电发展主要有三个阶段 ...

  7. stm32 + RN8209C单相计量芯片使用心得

    RN8209C单相计量芯片使用心得 由于项目需求,最近使用了一下RN8209C单相电量计量芯片,用STM32读取外接用电器的有效功率.第一次接触肯定是看技术手册. RN8209C技术手册V1.5 单相 ...

  8. 关于钜泉光电ATT7053C计量芯片使用的若干经验

    大家好!第一次写东西,完全是当作自己的一个笔记来写的,笔法不成熟,有些凌乱.如果对一些小伙伴有所帮助的话是我的荣幸,也欢迎各位小伙伴指出其中的问题. 首先说一下,使用这款芯片呢是因为一个项目需求,之前 ...

  9. 免校准的电量计量芯片_电量计量芯片HLW8110的前端电路设计与误差分析校正

    电量计量芯片 HLW8110 的前端电路设计与误差分析校正 龙顺宇 ; 许禄枝 ; 邝国旺 ; 徐元哲 ; 吴路光 [期刊名称] <单片机与嵌入式系统应用> [年 ( 卷 ), 期] 20 ...

最新文章

  1. java中的注解(二)
  2. Windows sever 2008 动态硬盘数据恢复
  3. 模拟飞行 android,RFS模拟飞行pro安卓版
  4. iOS UI 开发按钮的使用
  5. (转)调用System.gc没有立即执行的解决方法
  6. Fixjs——显示交互基类InteractiveObject
  7. 如何枚举String类型的枚举?
  8. hashcat字典攻击
  9. oracle logon 乱码,鼎信诺审计软件2013-2014年度常见问题解答
  10. javascript连接数据库
  11. 一文图解自定义修改el-table样式
  12. 台式计算机 如何组装,台式电脑买回家怎么装_组装方法图文分析
  13. 嵌入式系统框架----软件篇
  14. 【路径规划】基于蚁群求解多旅行商MTSP问题matlab源码
  15. Cisco nat inside接口,outside接口,nvi接口的区别
  16. 研究区分onbeforeunload事件是刷新还是关闭
  17. DICOM-RT struct转换为nii.gz
  18. Win8初体验 内存/SSD硬盘性能挑Win7(一)
  19. 自定义IOS系统弹框
  20. FPGA功耗的那些事儿

热门文章

  1. 【QGIS入门实战精品教程】8.1:QGIS制作地图案例教程
  2. ubuntu16 环境配置
  3. 生产者消费模型-管程法
  4. 论文投稿指南——中文核心期刊推荐(力学)
  5. c语言一个小写字母字节,C语言:给定一个小写字母,转换成大写字母
  6. c#直接横向打印LocalReport
  7. 海思SD3403开发板
  8. Moderate Modular Mode
  9. Gradle教程和指南 - 构建审视
  10. java定义苹果类Apple_定义一个水果接口Fruit,里面定义一个表示吃水果的eat方法。定义一个苹果类Apple和一个橘子...