搜索
bottom↓
回复: 89

RN8302计量芯片使用经验分享

  [复制链接]

出0入0汤圆

发表于 2018-8-22 19:16:34 | 显示全部楼层 |阅读模式
本帖最后由 Baldwin 于 2018-8-22 19:16 编辑

最近有款产品需要用到电能计量,选用了FM33A0xx+RN8302主流方案。计量模块开发也是从一知半解到懵懂,再到熟悉,酸甜苦辣因有尽有 ,下面把相关资料分享给大家,尽量少走弯路;
1---------------------------------------硬件部分-------------------------------------------------------------------------
RN8302外围电路

电压、电流信号采集电路;电压采用常规电阻分压,电流采用电流互感器5(60)A/2mA;


2---------------------------------------RN8302 通信部分-------------------------------------------------------------------------
(1)RN8302采用模拟SPI通信(RN8302与MCU之间采用了光耦隔离,无法直接用硬件SPI,只能用软件SPI)
  1. static void RN8302_GPIO_Init(void)
  2. {
  3.     //cs端口初始化
  4.     OutputIO(RN8302_CS_GPIO, RN8302_CS_GPIO_Pin, 0);
  5.     OutputIO(RN8302_SCK_GPIO, RN8302_SCK_GPIO_Pin, 0);
  6.     InputIO(RN8302_MISO_GPIO, RN8302_MISO_GPIO_Pin, 1);
  7.     OutputIO(RN8302_MOSI_GPIO, RN8302_MOSI_GPIO_Pin, 0);

  8.     //MySPI1_Init();
  9.     //SPIx_SPICR2_SPIEN_Setable(SPI1, ENABLE);//SPI1模块使能

  10.     RN8302_CS_SET();
  11.     RN8302_SCK_CLR();
  12.     RN8302_MOSI_SET();
  13. }

  14. static void RN8302_SPI_WriteByte(uint8_t byte)
  15. {
  16.     uint8_t i=0;

  17.     for(i=0;i<8;i++)        //写字节
  18.     {
  19.         RN8302_SCK_SET();       //在时钟的上升沿写数据
  20.                 RN8302_SCK_SET();
  21.         RN8302_DelayUs(RN8302_CLOCKWIDTH);
  22.                 if(byte & 0x80 ){
  23.           RN8302_MOSI_SET();
  24.                   RN8302_MOSI_SET();
  25.                 }
  26.         else{
  27.           RN8302_MOSI_CLR();
  28.               RN8302_MOSI_CLR();
  29.                 }
  30.                 RN8302_DelayUs(RN8302_CLOCKWIDTH/2);  
  31.         RN8302_SCK_CLR();
  32.                 RN8302_SCK_CLR();
  33.         RN8302_DelayUs(RN8302_CLOCKWIDTH);      
  34.         byte <<= 1;
  35.     }
  36.     RN8302_DelayUs(RN8302_CLOCKWIDTH);   
  37. }

  38. static uint8_t RN8302_SPI_ReadByte(void)
  39. {
  40.     uint8_t i=0,byte=0;

  41.     for(i=0;i<8;i++)        //读字节
  42.     {
  43.         byte <<= 1;
  44.         RN8302_SCK_SET();
  45.         RN8302_SCK_SET();
  46.         RN8302_DelayUs(RN8302_CLOCKWIDTH);
  47.         RN8302_SCK_CLR();
  48.         RN8302_SCK_CLR();
  49.         RN8302_DelayUs(RN8302_CLOCKWIDTH);
  50.         if(RN8302_Read_MISO())  //在时钟的下降沿读数据
  51.           byte += 0x01;
  52.         //RN8302_DelayUs(RN8302_CLOCKWIDTH/2);
  53.     }

  54.     return byte;
  55. }
复制代码


(2)RN8302读写寄存器,查看手册,不具体说明
  1. /********************************************************
  2. 功能描述:
  3. 参数说明:
  4. 返回说明: 0表示读取成功,非0表示读取失败
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint8_t RN8302_ReadReg(uint16_t regAddr,uint8_t *regBuf,uint8_t regLen)
  12. {
  13.     uint8_t i = 0,chksum = 0;
  14.     uint8_t buf[2]={0};

  15.     RN8302_CS_CLR();
  16.     RN8302_DelayUs(RN8302_CLOCKWIDTH);
  17.     buf[0] = (uint8_t)(regAddr&0x00FF);
  18.     buf[1] = ((uint8_t)(regAddr>>4))&0xF0|RN8302_Cmd_Read;
  19.     for(i=0;i<2;i++)
  20.     {
  21.         RN8302_SPI_WriteByte(buf[i]);
  22.         chksum += buf[i];
  23.     }
  24.     RN8302_DelayUs(RN8302_CLOCKWIDTH);
  25.     //最后一个字节是cs校验,所以要多收一个
  26.     for(i=0;i<regLen+1;i++)
  27.     {
  28.         regBuf[i] = RN8302_SPI_ReadByte();
  29.     }
  30.     for(i=0;i<regLen;i++)
  31.     {
  32.         chksum += regBuf[i];
  33.     }
  34.     RN8302_DelayUs(RN8302_CLOCKWIDTH);
  35.     RN8302_CS_SET();
  36.        
  37.         chksum ^= 0xFF;
  38.        
  39.     if(chksum == regBuf[regLen])
  40.         return 0;
  41.     else
  42.         return 1;

  43. }

  44. void RN8302_WriteReg(uint16_t regAddr,uint8_t *regBuf,uint8_t regLen)
  45. {
  46.     uint8_t i = 0;
  47.     uint8_t buf[2]={0};
  48.     uint8_t chksum = 0;

  49.     RN8302_CS_CLR();
  50.         RN8302_DelayUs(RN8302_CLOCKWIDTH);
  51.     buf[0] = (uint8_t)(regAddr&0xFF);
  52.     buf[1] = RN8302_Cmd_Write|((uint8_t)(regAddr>>4))&0xF0;

  53.     for(i=0;i<2;i++){
  54.         RN8302_SPI_WriteByte(buf[i]);
  55.         chksum += buf[i];
  56.     }
  57.     RN8302_DelayUs(RN8302_CLOCKWIDTH);
  58.     for(i=0;i<regLen;i++){
  59.         chksum += regBuf[i];
  60.     }
  61.     //最后一个字节是cs校验,所以要多写一个
  62.     for(i=0;i<regLen;i++){
  63.         RN8302_SPI_WriteByte(regBuf[i]);
  64.     }
  65.     RN8302_SPI_WriteByte(~chksum);
  66.     RN8302_DelayUs(RN8302_CLOCKWIDTH);
  67.     RN8302_CS_SET();
  68. }
复制代码

这是RN8302寄存器地址范围,读取计量参数存储区时,16位寄存器地址前面为0x00xx;读取配置和状态寄存器时,16位寄存器地址前面为0x01xx,这点千万不用忘记了,之前再这边坑了好久

(3)RN8302初始化,将之前校表时换算出的寄存器值填入,这样RN8302采集到的值就是校准好的
  1. uint8_t RN8302_Init(void)
  2. {
  3.     uint8_t regbuf[4];
  4.     uint8_t status = 1;

  5.     /* 端口初始化 */
  6.     RN8302_GPIO_Init();

  7.     //读取RN8302 DeviceID
  8.     if(RN8302_ReadReg(0x018F,regbuf,3) == 0){
  9.         if((regbuf[0]==0x83)&&(regbuf[1]==0x02)&&(regbuf[2]==0x00)){
  10.             status = 0;
  11.         }
  12.         else{
  13.             status = 1;
  14.         }
  15.     }
  16.     else{
  17.         status = 1;
  18.     }

  19.     //deviceID读取成功
  20.     if(status == 0){
  21.         //写使能
  22.         regbuf[0] = 0xE5;
  23.         RN8302_WriteReg(WREN,regbuf,1);
  24.         //切换到EMM模式
  25.         regbuf[0] = 0xA2;
  26.         RN8302_WriteReg(WMSW,regbuf,1);
  27.         //复位
  28.         regbuf[0] = 0xFA;
  29.         RN8302_WriteReg(SOFTRST,regbuf,1);
  30.         TicksDelayMs(20);
  31.         //写使能
  32.         regbuf[0] = 0xE5;
  33.         RN8302_WriteReg(WREN,regbuf,1);
  34.         //切换到EMM模式
  35.         regbuf[0] = 0xA2;
  36.         RN8302_WriteReg(WMSW,regbuf,1);
  37.         //写HFCONST1
  38.         regbuf[0] = 0x2E;
  39.         regbuf[1] = 0xA1;
  40.         RN8302_WriteReg(HFCONST1,regbuf,2);
  41.         //写电压增益
  42.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSUx[0]/256;
  43.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSUx[0]%256;
  44.         RN8302_WriteReg(GSUA,regbuf,2);
  45.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSUx[1]/256;
  46.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSUx[1]%256;
  47.         RN8302_WriteReg(GSUB,regbuf,2);
  48.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSUx[2]/256;
  49.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSUx[2]%256;
  50.         RN8302_WriteReg(GSUC,regbuf,2);
  51.         //写电流增益
  52.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSIx[0]/256;
  53.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSIx[0]%256;
  54.         RN8302_WriteReg(GSIA,regbuf,2);
  55.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSIx[1]/256;
  56.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSIx[1]%256;
  57.         RN8302_WriteReg(GSIB,regbuf,2);
  58.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSIx[2]/256;
  59.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSIx[2]%256;
  60.         RN8302_WriteReg(GSIC,regbuf,2);
  61.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GSIx[3]/256;
  62.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GSIx[3]%256;
  63.         RN8302_WriteReg(GSIN,regbuf,2);
  64.         //采样通道IA分段相位校正
  65. //        RN8302_WriteReg(PHSIA,(uint8_t*)&StDef_RN8302Para_Reg.PHSI[0],2);
  66. //        RN8302_WriteReg(PHSIB,(uint8_t*)&StDef_RN8302Para_Reg.PHSI[1],2);
  67. //        RN8302_WriteReg(PHSIC,(uint8_t*)&StDef_RN8302Para_Reg.PHSI[2],2);
  68.         //通道相位分段校正,电流阈值               
  69. //        RN8302_WriteReg(PRTH1L,(uint8_t*)&Dl645FirmPara.PRth[0],2);
  70. //        RN8302_WriteReg(PRTH1H,(uint8_t*)&Dl645FirmPara.PRth[1],2);
  71. //        RN8302_WriteReg(PRTH2L,(uint8_t*)&Dl645FirmPara.PRth[2],2);
  72. //        RN8302_WriteReg(PRTH2H,(uint8_t*)&Dl645FirmPara.PRth[3],2);
  73.         //x相有功功率增益
  74.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GPx[0]/256;
  75.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GPx[0]%256;
  76.         RN8302_WriteReg(GPA,regbuf,2);
  77.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GPx[1]/256;
  78.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GPx[1]%256;
  79.         RN8302_WriteReg(GPB,regbuf,2);
  80.         regbuf[0] = StDef_RN8302Para_Reg.Cst_GPx[2]/256;
  81.         regbuf[1] = StDef_RN8302Para_Reg.Cst_GPx[2]%256;
  82.         RN8302_WriteReg(GPC,regbuf,2);
  83.         //x相有功分段相位校正
  84.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Px_PHSL[0]/256;
  85.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Px_PHSL[0]%256;
  86.         RN8302_WriteReg(PA_PHS,regbuf,2);
  87.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Px_PHSL[1]/256;
  88.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Px_PHSL[1]%256;
  89.         RN8302_WriteReg(PB_PHS,regbuf,2);
  90.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Px_PHSL[2]/256;
  91.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Px_PHSL[2]%256;
  92.         RN8302_WriteReg(PC_PHS,regbuf,2);
  93.         //x相无功分段相位校正
  94.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[0]/256;
  95.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[0]%256;
  96.         RN8302_WriteReg(QA_PHS,regbuf,2);
  97.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[1]/256;
  98.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[1]%256;
  99.         RN8302_WriteReg(QB_PHS,regbuf,2);
  100.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[2]/256;
  101.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Qx_PHSL[2]%256;
  102.         RN8302_WriteReg(QC_PHS,regbuf,2);

  103.         //x相无功功率增益
  104. //        RN8302_WriteReg(GQA,(uint8_t*)&Dl645FirmPara.PGain[0],2);
  105. //        RN8302_WriteReg(GQB,(uint8_t*)&Dl645FirmPara.PGain[1],2);
  106. //        RN8302_WriteReg(GQC,(uint8_t*)&Dl645FirmPara.PGain[2],2);
  107.         //x相视在功率增益
  108. //        RN8302_WriteReg(GSA,(uint8_t*)&Dl645FirmPara.PGain[0],2);
  109. //        RN8302_WriteReg(GSB,(uint8_t*)&Dl645FirmPara.PGain[1],2);
  110. //        RN8302_WriteReg(GSC,(uint8_t*)&Dl645FirmPara.PGain[2],2);
  111.         //x相有功功率offset
  112. //        RN8302_WriteReg(PA_OS,(uint8_t*)&Dl645FirmPara.UI_Offset[0],2);
  113. //        RN8302_WriteReg(PB_OS,(uint8_t*)&Dl645FirmPara.UI_Offset[1],2);
  114. //        RN8302_WriteReg(PC_OS,(uint8_t*)&Dl645FirmPara.UI_Offset[2],2);
  115.                 //电流offset
  116.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Ix_OS[0]/256;
  117.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Ix_OS[0]%256;
  118.         RN8302_WriteReg(IA_OS,regbuf,2);
  119.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Ix_OS[1]/256;
  120.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Ix_OS[1]%256;
  121.         RN8302_WriteReg(IB_OS,regbuf,2);
  122.         regbuf[0] = StDef_RN8302Para_Reg.Cst_Ix_OS[2]/256;
  123.         regbuf[1] = StDef_RN8302Para_Reg.Cst_Ix_OS[2]%256;
  124.         RN8302_WriteReg(IC_OS,regbuf,2);
  125.                
  126.         //有功视在启动电流阈值
  127.         regbuf[0] = 0x02;
  128.         regbuf[1] = 0x36;
  129.         RN8302_WriteReg(IStart_PS,regbuf,2);
  130.         //无功视在启动电流阈值
  131.         regbuf[0] = 0x02;
  132.         regbuf[1] = 0x36;
  133.         RN8302_WriteReg(IStart_Q,regbuf,2);
  134.         //无功视在启动电流阈值
  135.         regbuf[0] = 0x04;
  136.         regbuf[1] = 0x00;
  137.         RN8302_WriteReg(LostVoltT,regbuf,2);
  138.         //无功视在启动电流阈值
  139.         regbuf[0] = 0x00;
  140.         regbuf[1] = 0x2C;
  141.         RN8302_WriteReg(ZXOT,regbuf,2);

  142.         //CF管脚配置
  143.         regbuf[0] = 0x04;
  144.         regbuf[1] = 0x77;
  145.         regbuf[2] = 0x10;
  146.         RN8302_WriteReg(CFCFG,regbuf,3);
  147.         //计量单元配置寄存器
  148.         regbuf[0] = 0x40;
  149.         regbuf[1] = 0x00;
  150.         regbuf[2] = 0x00;
  151.         RN8302_WriteReg(EMUCFG,regbuf,3);
  152.         //写缓存
  153.         regbuf[0] = 0x10;
  154.         RN8302_WriteReg(WSAVECON,regbuf,1);
  155.         //三相四线
  156.         regbuf[0] = 0x00;
  157.         RN8302_WriteReg(MODESEL,regbuf,1);
  158.         //计量控制位
  159.         regbuf[0] = 0x77;regbuf[1] = 0x77;regbuf[2] = 0x77;
  160.         RN8302_WriteReg(EMUCON,regbuf,3);
  161.         //写保护
  162.         regbuf[0] = 0xDC;
  163.         RN8302_WriteReg(WREN,regbuf,1);
  164.     }

  165.         return status;
  166. }
复制代码


3---------------------------------------RN8302 校表部分-------------------------------------------------------------------------
(1)校表主要流程,详细流程可以参照用户手册


(2)RN8302校表初始化,这块参照手册,将RN8302的值设置成默认值
  1. /********************************************************
  2. 功能描述:   RN8302校表初始化
  3. 参数说明:
  4. 返回说明:
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint8_t RN8302_CalibrateInit(void)
  12. {
  13.     uint8_t regbuf[4];
  14.     uint8_t status = 1;

  15.     if(RN8302_ReadReg(0x018F,regbuf,3) == 0){
  16.         if((regbuf[0]==0x83)&&(regbuf[1]==0x02)&&(regbuf[2]==0x00)){
  17.             status = 0;
  18.         }
  19.         else{
  20.             status = 1;
  21.         }
  22.     }
  23.     else{
  24.         status = 1;
  25.     }

  26.     //deviceID读取成功
  27.     if(status == 0){
  28.         //写使能
  29.         regbuf[0] = 0xE5;
  30.         RN8302_WriteReg(WREN,regbuf,1);
  31.         //切换到EMM模式
  32.         regbuf[0] = 0xA2;
  33.         RN8302_WriteReg(WMSW,regbuf,1);
  34.         //复位
  35.         regbuf[0] = 0xFA;
  36.         RN8302_WriteReg(SOFTRST,regbuf,1);
  37.         TicksDelayMs(20);
  38.         //写使能
  39.         regbuf[0] = 0xE5;
  40.         RN8302_WriteReg(WREN,regbuf,1);
  41.         //切换到EMM模式
  42.         regbuf[0] = 0xA2;
  43.         RN8302_WriteReg(WMSW,regbuf,1);
  44.         //写HFCONST1
  45.         regbuf[0] = 0x2E;
  46.         regbuf[1] = 0xA1;
  47.         RN8302_WriteReg(HFCONST1,regbuf,2);
  48.                 m_memset(regbuf,0,2);
  49.                 RN8302_ReadReg(HFCONST1,regbuf,2);
  50.         //写电压增益
  51.         StDef_RN8302Para_Reg.Cst_GSUx[0] = 0;
  52.         StDef_RN8302Para_Reg.Cst_GSUx[1] = 0;
  53.         StDef_RN8302Para_Reg.Cst_GSUx[2] = 0;
  54.         RN8302_WriteReg(GSUA,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSUx[0],2);
  55.         RN8302_WriteReg(GSUB,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSUx[1],2);
  56.         RN8302_WriteReg(GSUC,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSUx[2],2);
  57.         //写电流增益
  58.         StDef_RN8302Para_Reg.Cst_GSIx[0] = 0;
  59.         StDef_RN8302Para_Reg.Cst_GSIx[1] = 0;
  60.         StDef_RN8302Para_Reg.Cst_GSIx[2] = 0;
  61.         StDef_RN8302Para_Reg.Cst_GSIx[3] = 0;
  62.         RN8302_WriteReg(GSIA,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSIx[0],2);
  63.         RN8302_WriteReg(GSIB,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSIx[1],2);
  64.         RN8302_WriteReg(GSIC,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSIx[2],2);
  65.         RN8302_WriteReg(GSIN,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GSIx[3],2);
  66.         //x相有功功率增益
  67.         StDef_RN8302Para_Reg.Cst_GPx[0] = 0;
  68.         StDef_RN8302Para_Reg.Cst_GPx[1] = 0;
  69.         StDef_RN8302Para_Reg.Cst_GPx[2] = 0;
  70.         RN8302_WriteReg(GPA,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GPx[0],2);
  71.         RN8302_WriteReg(GPB,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GPx[1],2);
  72.         RN8302_WriteReg(GPC,(uint8_t*)&StDef_RN8302Para_Reg.Cst_GPx[2],2);
  73.         //x相有功分段相位校正
  74.         StDef_RN8302Para_Reg.Cst_Px_PHSL[0] = 0;
  75.         StDef_RN8302Para_Reg.Cst_Px_PHSL[1] = 0;
  76.         StDef_RN8302Para_Reg.Cst_Px_PHSL[2] = 0;
  77.         RN8302_WriteReg(PA_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Px_PHSL[0],2);
  78.         RN8302_WriteReg(PB_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Px_PHSL[1],2);
  79.         RN8302_WriteReg(PC_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Px_PHSL[2],2);
  80.         //x相无功分段相位校正
  81.         StDef_RN8302Para_Reg.Cst_Qx_PHSL[0] = 0;
  82.         StDef_RN8302Para_Reg.Cst_Qx_PHSL[1] = 0;
  83.         StDef_RN8302Para_Reg.Cst_Qx_PHSL[2] = 0;
  84.         RN8302_WriteReg(QA_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Qx_PHSL[0],2);
  85.         RN8302_WriteReg(QB_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Qx_PHSL[1],2);
  86.         RN8302_WriteReg(QC_PHS,(uint8_t*)&StDef_RN8302Para_Reg.Cst_Qx_PHSL[2],2);
  87.                 //电流offset
  88.         regbuf[0] = 0;
  89.         regbuf[1] = 0;
  90.         RN8302_WriteReg(IA_OS,regbuf,2);
  91.         regbuf[0] = 0;
  92.         regbuf[1] = 0;
  93.         RN8302_WriteReg(IB_OS,regbuf,2);
  94.         regbuf[0] = 0;
  95.         regbuf[1] = 0;
  96.         RN8302_WriteReg(IC_OS,regbuf,2);
  97.         //有功视在启动电流阈值
  98.         regbuf[0] = 0x02;
  99.         regbuf[1] = 0x36;
  100.         RN8302_WriteReg(IStart_PS,regbuf,2);
  101.         //无功视在启动电流阈值
  102.         regbuf[0] = 0x02;
  103.         regbuf[1] = 0x36;
  104.         RN8302_WriteReg(IStart_Q,regbuf,2);
  105.         //无功视在启动电流阈值
  106.         regbuf[0] = 0x04;
  107.         regbuf[1] = 0x00;
  108.         RN8302_WriteReg(LostVoltT,regbuf,2);
  109.         //无功视在启动电流阈值
  110.         regbuf[0] = 0x00;
  111.         regbuf[1] = 0x2C;
  112.         RN8302_WriteReg(ZXOT,regbuf,2);
  113.         //CF管脚配置
  114.         regbuf[0] = 0x04;
  115.         regbuf[1] = 0x32;
  116.         regbuf[2] = 0x10;
  117.         RN8302_WriteReg(CFCFG,regbuf,3);
  118.         //计量单元配置寄存器
  119.         regbuf[0] = 0x40;
  120.         regbuf[1] = 0x00;
  121.         regbuf[2] = 0x00;
  122.         RN8302_WriteReg(EMUCFG,regbuf,3);
  123.                 m_memset(regbuf,0,3);
  124.                 RN8302_ReadReg(EMUCFG,regbuf,3);
  125.         //计量控制位
  126.         regbuf[0] = 0x00;regbuf[1] = 0x00;regbuf[2] = 0x77;
  127.         RN8302_WriteReg(EMUCON,regbuf,3);
  128.         //校表时不要写保护
  129.         //regbuf[0] = 0xDC;
  130.         //RN8302_WriteReg(WREN,regbuf,1);
  131.     }

  132.     return status;
  133. }
复制代码


(3)RN8302校表,电压、电流增益校准(校表台设置3相电压设置成220V,3相电流设置成5A)
  1. /********************************************************
  2. 功能描述:   功率法校正电压增益
  3. 参数说明:   vol:扩大100倍
  4. 返回说明:
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint16_t RN8302_CalibrateUGain(uint16_t vol,uint8_t phase)
  12. {
  13.     uint8_t regbuf[5];
  14.     const uint16_t regURMS[]={0x0007,0x0008,0x0009};
  15.     const uint16_t regGUSx[]={GSUA,GSUB,GSUC};
  16.     float err=0;
  17.     uint16_t uGain;
  18.         int32_t data;

  19.     if(RN8302_ReadReg(regURMS[phase],regbuf,4)==0){
  20.                 data = BufToU32(regbuf);
  21.         err = (data-44000000)*1.0/44000000;
  22.         err = -err/(1+err);
  23.         if(err > 0){
  24.             uGain = (uint16_t)(err*32768);
  25.         }
  26.         else{
  27.             uGain = (uint16_t)(err*32768+65536);
  28.         }
  29.                 //写使能
  30.         regbuf[0] = 0xE5;
  31.         RN8302_WriteReg(WREN,regbuf,1);
  32.         regbuf[0] = uGain/256;regbuf[1] = uGain%256;
  33.         RN8302_WriteReg(regGUSx[phase],regbuf,2);
  34.                 m_memset(regbuf,0x00,2);
  35.                 RN8302_ReadReg(regGUSx[phase],regbuf,2);
  36.         StDef_RN8302Para_Reg.Cst_GSUx[phase] = uGain;
  37.     }

  38.     return uGain;
  39. }
复制代码
  1. /********************************************************
  2. 功能描述:   功率法校准电流
  3. 参数说明:
  4. 返回说明:
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint16_t RN8302_CalibrateIGain(uint16_t cur,uint8_t phase)
  12. {
  13.     uint8_t regbuf[5];
  14.     const uint16_t regIRMS[]={0x000B,0x000C,0x000D};
  15.     const uint16_t regGISx[]={GSIA,GSIB,GSIC};
  16.     float err=0;
  17.     uint16_t iGain;
  18.     int32_t data;

  19.     if(RN8302_ReadReg(regIRMS[phase],regbuf,4)==0){
  20.         data = BufToU32(regbuf);
  21.         err = (data-3500000)*1.0/3500000;
  22.         err = -err/(1+err);
  23.         if(err > 0){
  24.             iGain = (uint16_t)(err*32768);
  25.         }
  26.         else{
  27.             iGain = (uint16_t)(err*32768+65536);
  28.         }
  29.         //写使能
  30.         regbuf[0] = 0xE5;
  31.         RN8302_WriteReg(WREN,regbuf,1);
  32.         regbuf[0] = iGain/256;regbuf[1] = iGain%256;
  33.         RN8302_WriteReg(regGISx[phase],regbuf,2);
  34.         m_memset(regbuf,0x00,2);
  35.         RN8302_ReadReg(regGISx[phase],regbuf,2);
  36.         StDef_RN8302Para_Reg.Cst_GSIx[phase] = iGain;
  37.     }

  38.     return iGain;
  39. }
复制代码

(4)RN8302校表,功率因素在1.0情况下可以不校准,只需通过校表台查看一下误差,误差较大的,再进行校准;正常情况下,电压、电流校准后,1.0无需校准
(5)RN8302校表,0.5L,A相校准,(校表台设置A相电压设置成220V,A相电流设置成5A,功率因素0.5L)
(6)RN8302校表,0.5L,B相校准,(校表台设置B相电压设置成220V,B相电流设置成5A,功率因素0.5L)
(7)RN8302校表,0.5L,C相校准,(校表台设置C相电压设置成220V,C相电流设置成5A,功率因素0.5L)
  1. /********************************************************
  2. 功能描述:   功率法校准 Un Ib 0.5增益
  3. 参数说明:   err扩大1000倍 xx.xxx
  4. 返回说明:
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint16_t RN8302_CalibratePx_PHSL(uint8_t phase)
  12. {
  13.     uint8_t regbuf[5],i;
  14.     uint32_t regtemp[5],regtotal=0;
  15.         float err = 0;
  16.     const uint16_t regGPx[]={PA_PHS,PB_PHS,PC_PHS};
  17.     const uint16_t regGQx[]={QA_PHS,QB_PHS,QC_PHS};
  18.     const uint16_t regArry[]={0x0014,0x0015,0x0016};
  19.     uint16_t pGain;
  20.         uint32_t data;

  21.     for(i=0;i<5;i++){
  22.         if(RN8302_ReadReg(regArry[phase],regbuf,4)==0){
  23.             regtemp[i] = BufToU32(regbuf);
  24.             regtotal += regtemp[i];
  25.         }
  26.         TicksDelayMs(400);
  27.     }
  28.     data = regtotal / 5;
  29.     err = (data-9179115)*1.0/9179115;
  30.     err = -err/(sqrt(3));
  31.     if(err > 0){
  32.         pGain = (uint16_t)(err*32768);
  33.     }
  34.     else{
  35.         pGain = (uint16_t)(err*32768+65536);
  36.     }
  37.     //写使能
  38.     regbuf[0] = 0xE5;
  39.     RN8302_WriteReg(WREN,regbuf,1);
  40.     regbuf[0] = pGain/256;regbuf[1] = pGain%256;
  41.     RN8302_WriteReg(regGPx[phase],regbuf,2);
  42.     RN8302_WriteReg(regGQx[phase],regbuf,2);
  43.     StDef_RN8302Para_Reg.Cst_Px_PHSL[phase] = pGain;
  44.     StDef_RN8302Para_Reg.Cst_Qx_PHSL[phase] = pGain;

  45.     return pGain;
  46. }
复制代码

(8)RN8302校表,电流offset校准,(校表台设置三相相电压设置成220V,三相电流设置成0A)
  1. /********************************************************
  2. 功能描述:   校准电流偏置
  3. 参数说明:
  4. 返回说明:
  5. 调用方式:
  6. 全局变量:
  7. 读写时间:
  8. 注意事项:
  9. 日期    :
  10. ********************************************************/
  11. uint8_t RN8302_CalibrateCurrentOffset(uint8_t phase)
  12. {
  13.     uint8_t regbuf[5];
  14.     uint32_t regtemp[10],regtotal=0;
  15.     const uint16_t regArry[]={0x000B,0x000C,0x000D};
  16.     const uint16_t regIx_OS[]={IA_OS,IB_OS,IC_OS};
  17.     uint8_t i = 0;
  18.     uint16_t temp;

  19.     for(i=0;i<12;i++)
  20.     {
  21.         if(RN8302_ReadReg(regArry[phase],regbuf,4)==0){
  22.             regtemp[i] = (regbuf[0]<<24)+(regbuf[1]<<16)+\
  23.                     (regbuf[2]<<8)+(regbuf[3]);
  24.         }
  25.         regtotal += regtemp[i];
  26.         TicksDelayMs(300);
  27.     }
  28.     regtotal /= 12;
  29.     regtotal = regtotal * regtotal;
  30.     //求反码
  31.     regtotal = ~regtotal;
  32.     temp = (regtotal / 0x4000)&0xFFFF;
  33.     //符号位
  34.     if(regtotal & 0x80000000)
  35.         temp |= 0x8000;
  36.     //写使能
  37.     regbuf[0] = 0xE5;
  38.     RN8302_WriteReg(WREN,regbuf,1);
  39.     regbuf[0] = temp/256;regbuf[1] = temp%256;
  40.     RN8302_WriteReg(regIx_OS[phase],regbuf,2);
  41.     StDef_RN8302Para_Reg.Cst_Ix_OS[phase] = temp;

  42.     return 0;
  43. }
复制代码

(9)RN8302校表,电量清零
RN8302累计电量采用的是读后清零方式,所以累计电量是存在eeprom中的,只需要将eeprom中数据清空就可以,不用对RN8302进行操作

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2018-8-24 14:11:17 | 显示全部楼层
本帖最后由 Baldwin 于 2018-8-24 14:13 编辑


上图按照手册把HFConst寄存器换算方式列了一下,详细说明参照用户手册64页(注意:校准方式采用功率校准,不是误差校准法)
在上文中提到的RN8302初始化时HFCONST1这个寄存器需要设置成这个值

RN8302用户手册

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-8-22 19:17:05 | 显示全部楼层
编辑占位

出0入0汤圆

发表于 2018-8-22 20:19:59 来自手机 | 显示全部楼层
mark顶你

出0入0汤圆

发表于 2018-8-22 22:19:16 | 显示全部楼层
楼主好人;

出0入0汤圆

发表于 2018-8-22 23:37:08 | 显示全部楼层
有相同应用的可以参考了。谢谢分享。

出0入0汤圆

发表于 2018-8-23 00:21:53 来自手机 | 显示全部楼层
楼主分享感谢你

出0入0汤圆

发表于 2018-8-23 01:04:40 | 显示全部楼层
多谢,正好用得上

出0入0汤圆

发表于 2018-8-23 09:04:35 | 显示全部楼层
多谢,楼主介绍的还比较详细,收藏备用

出0入170汤圆

发表于 2018-8-23 09:32:09 | 显示全部楼层
楼主好人

RN8302初始化 uint8_t RN8302_Init(void)和 RN8302校表初始化 uint8_t RN8302_CalibrateInit(void)可以合并一下,在RN8302_CalibrateInit中对StDef_RN8302Para_Reg 赋初始化值写eeprom,然后调用 RN8302_Init
StDef_RN8302Para_Reg 校表参数保存到eeprom中时,建议计算CRC校验,并且至少有一个备份;上电从eeprom恢复数据时判断CRC,取正确的那份数据

出0入0汤圆

发表于 2018-8-23 10:39:26 | 显示全部楼层
非常详细的说明!

出140入115汤圆

发表于 2018-8-23 20:30:38 | 显示全部楼层
多谢分享,收藏备用

出0入0汤圆

 楼主| 发表于 2018-8-24 09:04:39 | 显示全部楼层
agency 发表于 2018-8-23 09:32
楼主好人

RN8302初始化 uint8_t RN8302_Init(void)和 RN8302校表初始化 uint8_t RN8302_CalibrateI ...

你好,校表数据是有crc16校验的,是放在非易失性存储那块做的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-8-24 10:30:27 | 显示全部楼层
楼主不错,MARK一下,以防备用

出0入0汤圆

发表于 2018-8-24 17:22:06 | 显示全部楼层
顶一下,支持。

出0入0汤圆

发表于 2018-9-16 16:28:24 | 显示全部楼层
谢谢楼主分享!!!

出10入120汤圆

发表于 2018-9-16 18:37:28 来自手机 | 显示全部楼层
mark下,备用

出0入0汤圆

发表于 2018-9-16 20:12:30 来自手机 | 显示全部楼层
手上有块rn8209d板,没有datasheet ,不知楼主有吗?有的话能否发个上来。

出0入0汤圆

 楼主| 发表于 2018-9-17 14:08:59 | 显示全部楼层
juncheng14 发表于 2018-9-16 20:12
手上有块rn8209d板,没有datasheet ,不知楼主有吗?有的话能否发个上来。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-9-17 14:24:58 | 显示全部楼层
感谢楼主,这个电流更新频率是多少呀

出0入0汤圆

发表于 2018-9-17 14:30:12 来自手机 | 显示全部楼层
Baldwin 发表于 2018-9-17 14:08

谢楼主,已经在论坛上找到了。

出0入0汤圆

发表于 2018-10-20 08:38:13 | 显示全部楼层
请兄台推荐个校表台,有型号和厂家最好,谢谢

出0入0汤圆

 楼主| 发表于 2018-10-20 09:35:49 | 显示全部楼层
fenglove 发表于 2018-9-17 14:24
感谢楼主,这个电流更新频率是多少呀

3.495Hz或13.982Hz

出0入0汤圆

 楼主| 发表于 2018-10-20 09:37:58 | 显示全部楼层
jiaoyi 发表于 2018-10-20 08:38
请兄台推荐个校表台,有型号和厂家最好,谢谢


你好,校表台一台是相对来说比较贵,大概需要20~30万,你是做什么产品的,如果量不是很大,可以找相应厂家来帮你弄

出0入0汤圆

发表于 2018-11-1 17:22:45 | 显示全部楼层
不错,学习一下。

出0入0汤圆

发表于 2018-11-1 21:51:16 | 显示全部楼层
请问 为什么
“光耦隔离,无法直接用硬件SPI,只能用软件SPI”

谢谢

出0入0汤圆

 楼主| 发表于 2018-11-2 10:49:11 | 显示全部楼层
yaya001 发表于 2018-11-1 21:51
请问 为什么
“光耦隔离,无法直接用硬件SPI,只能用软件SPI”

我用的普通的光耦,通信速度比较慢,硬件SPI的速度都比较快,所以只用了软件spi

出0入0汤圆

发表于 2018-11-2 11:21:16 | 显示全部楼层
Baldwin 发表于 2018-11-2 10:49
我用的普通的光耦,通信速度比较慢,硬件SPI的速度都比较快,所以只用了软件spi ...

速度原因,了解了  多谢

出0入0汤圆

发表于 2019-1-5 22:52:38 | 显示全部楼层
搞得不错,好好学习

出0入0汤圆

发表于 2019-1-18 10:22:16 | 显示全部楼层
marker 一下,过后再看 RN8302

出0入0汤圆

发表于 2019-1-18 10:29:27 | 显示全部楼层
好资料,谢谢分享!

出0入0汤圆

发表于 2019-2-19 13:53:55 | 显示全部楼层
好资料感谢楼主的

出0入0汤圆

发表于 2019-2-19 16:15:41 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2019-2-20 09:01:48 | 显示全部楼层
谢谢 收藏的 以后用

出0入0汤圆

发表于 2019-2-23 00:14:31 | 显示全部楼层
为毛要用光耦隔离呢, 直接通信不行吗……

出0入0汤圆

发表于 2019-2-23 14:34:24 | 显示全部楼层
必须点赞

出0入0汤圆

 楼主| 发表于 2019-2-23 19:43:47 | 显示全部楼层
windrarara 发表于 2019-2-23 00:14
为毛要用光耦隔离呢, 直接通信不行吗……

电压是直连的,不隔离设备就是带电的

出0入0汤圆

发表于 2019-2-25 09:26:46 | 显示全部楼层
Baldwin 发表于 2019-2-23 19:43
电压是直连的,不隔离设备就是带电的

哦, 我用PT了....

出0入0汤圆

发表于 2019-3-20 14:09:10 | 显示全部楼层
原理图能否传一份上来啊

出0入0汤圆

发表于 2019-3-20 16:38:21 | 显示全部楼层
我想问一下   使用RN8209D必须要先校表吗?  我就想检测电压 电流 功率  需不需要校表?

出0入0汤圆

发表于 2019-3-20 17:28:19 | 显示全部楼层
楼主不错,MARK一下,以防备用

出0入20汤圆

发表于 2019-3-20 21:13:32 | 显示全部楼层
正在做RN7302,看看。

出0入20汤圆

发表于 2019-3-20 21:39:43 | 显示全部楼层
请问楼主:1、可以把H文件贴出来吗?2、BufToU32()这个函数可以看看吗? 3、有读取电压,电流有效值的代码吗?主要想看看如何转换成实际值。

出250入8汤圆

发表于 2019-3-20 23:01:56 来自手机 | 显示全部楼层
将要用到电量计量芯片,做个记号

出0入0汤圆

发表于 2019-3-20 23:47:42 | 显示全部楼层
标记标记

出0入0汤圆

发表于 2019-3-20 23:53:29 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2019-3-21 12:42:11 | 显示全部楼层
zhangguanqun 发表于 2019-3-20 14:09
原理图能否传一份上来啊

原理图已上传

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-3-21 12:43:37 | 显示全部楼层
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

出0入0汤圆

 楼主| 发表于 2019-3-21 12:46:30 | 显示全部楼层
panda1985 发表于 2019-3-20 16:38
我想问一下   使用RN8209D必须要先校表吗?  我就想检测电压 电流 功率  需不需要校表? ...

你好,RN8209计量芯片需要先校表的;如果对要求不高,你可以串一个电表来进行校表,通过电表测量出的电压、电流来换算你自己的值

出0入20汤圆

发表于 2019-3-22 18:40:29 | 显示全部楼层
本帖最后由 mon51 于 2019-3-22 18:44 编辑
Baldwin 发表于 2019-3-21 12:43
这是电压、电流的换算,使用这个宏定义RN8302_USING_PowerCorrection
BUF2int这个函数就是将数组中的4个 ...


请问:      Voltage[phase] = (uint16_t)(regtemp*10.0/ (44000000/220)); //扩大10     44000000/220  这个系数是如何确定的?
               Voltage[phase] = (uint16_t)(regtemp*10.0*Kv); //扩大10           Kv 这个参数是如何确定的?

出0入0汤圆

发表于 2019-3-29 22:04:45 | 显示全部楼层

源代码也上传下把,这样就完整了

出0入0汤圆

 楼主| 发表于 2019-3-30 10:19:23 | 显示全部楼层
mon51 发表于 2019-3-22 18:40
请问:      Voltage = (uint16_t)(regtemp*10.0/ (44000000/220)); //扩大10     44000000/220  这个系 ...

用户手册里功率校表法那章有讲的,手册讲的比较详细

出0入0汤圆

发表于 2019-3-31 16:28:32 | 显示全部楼层
推荐 CS5463 电表计量芯片

出0入0汤圆

发表于 2019-3-31 16:29:21 | 显示全部楼层

推荐 CS5463 电表计量芯片







CS5463

CS5464

出0入0汤圆

发表于 2019-3-31 16:36:42 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-3-31 17:57:25 | 显示全部楼层
谢谢分享~~~

出0入0汤圆

发表于 2019-4-22 14:12:31 | 显示全部楼层
这个校准的话是不是需要校表台才能准确校准?

出0入0汤圆

 楼主| 发表于 2019-4-22 17:28:21 | 显示全部楼层
whitekang82 发表于 2019-4-22 14:12
这个校准的话是不是需要校表台才能准确校准?

要看精度要求的,有表位数量少的,便宜的校表台,2~3万左右

出0入0汤圆

发表于 2019-4-24 08:39:49 | 显示全部楼层
楼主的资料比较详细,点赞~

出0入0汤圆

发表于 2019-5-13 16:02:51 | 显示全部楼层
多谢楼主分享,点赞~

出0入0汤圆

发表于 2019-6-2 11:48:02 | 显示全部楼层
LZ有空解释一下什么是变比参数吗

出0入0汤圆

 楼主| 发表于 2019-6-3 10:23:50 | 显示全部楼层
retention 发表于 2019-6-2 11:48
LZ有空解释一下什么是变比参数吗

变比是互感器的主要参数,比如1000:1,假设输入电压220V,通过互感器后220/1000=0.22V,互感器输出就是0.22V

出0入0汤圆

发表于 2019-6-14 17:23:10 | 显示全部楼层
Baldwin 发表于 2019-6-3 10:23
变比是互感器的主要参数,比如1000:1,假设输入电压220V,通过互感器后220/1000=0.22V,互感器输出就是0.2 ...

这里面这个读操作没有看懂是什么意思啊,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-6-15 13:44:26 | 显示全部楼层
liangshanguang 发表于 2019-6-14 17:23
这里面这个读操作没有看懂是什么意思啊,

这是当时会为了做验证的,回读一下,没特殊含义,可以去掉

出0入0汤圆

发表于 2019-6-16 20:06:59 | 显示全部楼层
mark,计量

出0入0汤圆

发表于 2019-8-20 22:29:22 | 显示全部楼层
感谢楼主,正用到这个芯片

出0入0汤圆

发表于 2019-8-21 16:37:04 | 显示全部楼层
感谢楼主分享经验!

出0入0汤圆

发表于 2019-8-31 16:42:30 | 显示全部楼层
楼主能推荐一个价格便宜的校表仪器吗?用在非计量行业产品。

出140入115汤圆

发表于 2019-8-31 17:17:50 | 显示全部楼层
多谢分享,RN8302计量芯片

出0入0汤圆

发表于 2019-10-24 12:53:31 | 显示全部楼层
多谢分享

出0入0汤圆

发表于 2019-10-24 13:24:35 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-12-18 10:17:46 | 显示全部楼层
谢谢分享,顶一下!!!

出0入0汤圆

发表于 2019-12-21 21:26:58 | 显示全部楼层
留着  备用

出0入0汤圆

发表于 2020-4-15 08:58:08 | 显示全部楼层
SPI接口一定要隔离吗?电压等级不一样吗?

出0入0汤圆

发表于 2020-7-6 16:35:10 | 显示全部楼层
挺全的资料,正在研究当中。。。

出0入0汤圆

发表于 2020-7-9 07:58:30 来自手机 | 显示全部楼层
楼主你好,用功率法校准电压,电流增益后,计算出来电圧,电流,那么有功功率,功率因数应该怎么计算?

出0入0汤圆

发表于 2020-7-22 10:50:37 | 显示全部楼层
有个问题请教lz,你电压寄存器标准值取44000000,理论/标准=0.698,不符合手册说的0.8< <1.2啊,这里怎么考虑的?

出0入0汤圆

发表于 2020-7-23 09:06:45 | 显示全部楼层
有数字隔离芯片,同光耦价格长不多或者更便宜。

出0入0汤圆

发表于 2020-7-23 10:48:22 | 显示全部楼层
好资料,谢谢分享

出15入178汤圆

发表于 2020-7-27 11:09:36 | 显示全部楼层
楼主请教,RN8302B电流空载噪声有多少?你启用OFFSET校正了吗?

出0入0汤圆

发表于 2020-8-28 10:58:27 | 显示全部楼层
刚好研究这个片子,多谢楼主分享~~~

出0入0汤圆

发表于 2020-8-28 14:17:38 | 显示全部楼层
这是个非常好的东西

出0入0汤圆

 楼主| 发表于 2020-8-31 17:12:28 | 显示全部楼层
2nd 发表于 2020-7-27 11:09
楼主请教,RN8302B电流空载噪声有多少?你启用OFFSET校正了吗?

启用offset了,空载噪声和板子有关系

出0入0汤圆

发表于 2020-9-12 16:12:22 | 显示全部楼层
切换到三相三线,UCA 是通过UAB UBC计算出来的吗???

出0入0汤圆

发表于 2020-11-13 14:47:13 | 显示全部楼层
万分感谢楼主!另外有没有PCB分享一下啊?

出0入0汤圆

发表于 2021-11-11 15:50:53 | 显示全部楼层
请问楼主,电压偏置UA_OS不需要设置了吗?

出0入0汤圆

发表于 2022-5-11 16:12:14 | 显示全部楼层
这个帖值得收藏!

出0入0汤圆

发表于 2023-5-30 11:40:50 | 显示全部楼层
楼主,RN8302读取电量值2.2kwh和三相标准源(220V/5A)值3.3kwh,有差别是什么问题?

出0入0汤圆

发表于 2023-5-30 14:25:50 | 显示全部楼层
记录一下,最近可能要用类似芯片

出0入162汤圆

发表于 2023-5-30 18:07:18 来自手机 | 显示全部楼层
deven_zheng 发表于 2023-5-30 11:40
楼主,RN8302读取电量值2.2kwh和三相标准源(220V/5A)值3.3kwh,有差别是什么问题? ...
(引用自88楼)

功率标准值算的有问题吧。
根据手册上的方法算就行了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 17:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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