RN8302计量芯片使用经验分享

2019-12-11 18:13发布

本帖最后由 Baldwin 于 2018-8-22 19:16 编辑

最近有款产品需要用到电能计量,选用了FM33A0xx+RN8302主流方案。计量模块开发也是从一知半解到懵懂,再到熟悉,酸甜苦辣因有尽有 ,下面把相关资料分享给大家,尽量少走弯路;
1---------------------------------------硬件部分-------------------------------------------------------------------------
RN8302外围电路
RN8302计量单元配置寄存器.png (138.91 KB, 下载次数: 0) 下载附件 2018-8-22 12:31 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
70条回答
Baldwin
2019-12-17 00:05
mon51 发表于 2019-3-20 21:39
请问楼主:1、可以把H文件贴出来吗?2、BufToU32()这个函数可以看看吗? 3、有读取电压,电流有效值的代码吗 ...

  1. uint8_t RN8302_ReadCurrentReg(uint8_t phase,uint8_t *regdata)
  2. {
  3.     uint8_t regbuf[4];
  4.     if(phase == 0){
  5.         if(RN8302_ReadReg(0x000B,regbuf,4)==0){
  6.             m_memcpy((uint8_t*)regdata,regbuf,4);
  7.         }
  8.     }
  9.     else if(phase == 1){
  10.         if(RN8302_ReadReg(0x000C,regbuf,4)==0){
  11.             m_memcpy((uint8_t*)regdata,regbuf,4);
  12.         }
  13.     }
  14.     else if(phase == 2){
  15.         if(RN8302_ReadReg(0x000D,regbuf,4)==0){
  16.             m_memcpy((uint8_t*)regdata,regbuf,4);
  17.         }
  18.     }
  19.        
  20.         return 0;
  21. }

  22. uint8_t RN8302_ReadVoltage(uint8_t phase)
  23. {
  24.     uint8_t regbuf[5];
  25.         uint32_t regtemp = 0;
  26.         const uint16_t regArry[]={0x0007,0x0008,0x0009};
  27.        
  28.         if(RN8302_ReadReg(regArry[phase],regbuf,4)==0)
  29.         {            
  30.                 regtemp = (regbuf[0]<<24)+(regbuf[1]<<16)+
  31.                                          (regbuf[2]<<8)+(regbuf[3]);
  32.         #ifdef RN8302_USING_PowerCorrection
  33.         Voltage[phase] = (uint16_t)(regtemp*10.0/ (44000000/220)); //扩大10
  34.         #endif

  35.         #ifdef RN8302_USING_ErrCorrection
  36.         Voltage[phase] = (uint16_t)(regtemp*10.0*Kv); //扩大10
  37.         #endif

  38.         }
  39.        
  40.         return 0;
  41. }
复制代码
这是电压、电流的换算,使用这个宏定义RN8302_USING_PowerCorrection
BUF2int这个函数就是将数组中的4个字节换算成uint32_t

一周热门 更多>