找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1723|回复: 2
打印 上一主题 下一主题
收起左侧

RN7302测试例程

[复制链接]
跳转到指定楼层
楼主
ID:990848 发表于 2022-8-6 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RN7302测试例程,全网不多的RN7032测试源码,值得参考。

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"         
  5. #include "spi.h"



  6. /*        本测试例程(满量程40A)针对1000:1电流互感器进行简易校表,offset校正,并输出ABC三相电流有效值。*/

  7. /*        A5--->RN7302_SCK        */
  8. /*        A6--->RN7302_SDO        */
  9. /*        A7--->RN7302_SDI        */

  10. #define        RN7302_CS   PAout(4)   //RN7302_CS  使能




  11. u8 RN7302_Read(u16 wReg,u8 *pBuf)                                                //00计量参数寄存器,01配置和状态寄存器
  12. {
  13.         u8 temp;
  14.         RN7302_CS=0;
  15.         SPI1_ReadWriteByte(wReg);    //发送读取寄存器地址
  16.         temp = (((u8)(wReg >> 4)) & 0xf0)^0xff + 0x10;
  17.         SPI1_ReadWriteByte(temp);    //发送读取寄存器地址
  18.         delay_us(10);
  19.         pBuf[0]=SPI1_ReadWriteByte(0xff);
  20.         pBuf[1]=SPI1_ReadWriteByte(0xff);
  21.         pBuf[2]=SPI1_ReadWriteByte(0xff);
  22.         pBuf[3]=SPI1_ReadWriteByte(0xff);
  23.         RN7302_CS=1;        
  24.     return(1);
  25. }


  26. void RN7302_Write(u16 wReg,u8 *pBuf,u8 DatLen)                        //00计量参数寄存器,01配置和状态寄存器
  27. {
  28.         u8 num,temp;
  29.         u8 cs;
  30.         
  31.         RN7302_CS=0;
  32.         temp = (u8)(wReg & 0x00ff);
  33.         SPI1_ReadWriteByte(temp);    //发送读取寄存器地址
  34.         temp = (((u8)(wReg >> 4)) & 0xf0) + 0x80;
  35.         SPI1_ReadWriteByte(temp);    //发送读取寄存器地址
  36.         cs=wReg+temp;
  37.         delay_us(10);
  38.         for(num=0;num<DatLen;num++)
  39.         {
  40.         SPI1_ReadWriteByte(pBuf[num]);
  41.         cs+=pBuf[num];
  42.         }
  43.         cs=~cs;
  44.         SPI1_ReadWriteByte(cs);
  45.         RN7302_CS=1;        
  46. }
  47. int main(void)
  48. {        
  49.         u32 num0=0;
  50.         u8 k[5]={0},f=0;
  51.         delay_init();                     //延时函数初始化         
  52.         NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  53.         uart_init(115200);                 //串口初始化为9600
  54.         LED_Init();                             //LED端口初始化
  55.         SPI1_Init();
  56.         GPIOSet();
  57.          
  58.          
  59. k[0]=0xe5;
  60. RN7302_Write(0x0180,k,1);        // 写使能位

  61. k[0]=0xa2;
  62. RN7302_Write(0x0181,k,1);        // 切换到EMM配置寄存器

  63. k[0]=0xfa;
  64. RN7302_Write(0x0182,k,1);        // 复位

  65. delay_ms(500);

  66. k[0]=0xe5;
  67. RN7302_Write(0x0180,k,1);

  68. k[0]=0xa2;
  69. RN7302_Write(0x0181,k,1);


  70. k[0]=0x77;
  71. k[1]=0x77;
  72. k[2]=0x77;
  73. RN7302_Write(0x0162,k,3);        //EMU 控制寄存器
  74.         
  75.         
  76. k[0]=0x25;
  77. k[1]=0x78;
  78. RN7302_Write(0x0100,k,2);        //HFConst1  ,高频脉冲计数寄存器 1
  79. RN7302_Write(0x0101,k,2);        //HFConst2        ,高频脉冲计数寄存器 1

  80. k[0]=0x01;
  81. k[1]=0xD5;
  82. RN7302_Write(0x0102,k,2);        //IStart_PS ,有功视在启动电流阈值寄存器
  83. RN7302_Write(0x0103,k,2);        //IStart_Q  ,无功启动电流阈值寄存器

  84. k[0]=0x14;
  85. k[1]=0xfb;
  86. RN7302_Write(0x0104,k,2);        //LostVoltT  ,失压阈值寄存器

  87. k[0]=0x00;
  88. k[1]=0x49;
  89. RN7302_Write(0x0105,k,2);        //ZXOT  ,过零阈值寄存器

  90. k[0]=0x00;
  91. k[1]=0x04;
  92. k[2]=0x0b;
  93. RN7302_Write(0x0158,k,3);        //SAGCFG ,电压暂降阈值配置

  94. k[0]=0x47;
  95. k[1]=0x33;
  96. RN7302_Write(0x0159,k,2);        //OVLVL  ,过压阈值配置

  97. k[0]=0x65;
  98. k[1]=0x32;
  99. RN7302_Write(0x015a,k,2);        //OILVL  ,过流阈值配置


  100. k[0]=0x0F;
  101. k[1]=0x21;
  102. k[2]=0x00;
  103. RN7302_Write(0x0161,k,3);/*******************************************************************/

  104. //k[0]=0x00;
  105. //k[1]=0x00;
  106. //RN7302_Write(0x0118,k,2);

  107. k[0]=0x17;
  108. k[1]=0x01;
  109. RN7302_Write(0x0113,k,2);        //GSUA  ,采样通道 UA 通道增益
  110. RN7302_Write(0x0114,k,2);        //GSUB  ,
  111. RN7302_Write(0x0115,k,2);        //GSUC  ,

  112. k[0]=0x86;
  113. k[1]=0x0d;
  114. RN7302_Write(0x0116,k,2);        //GSIA  ,采样通道 IA 通道增益
  115. RN7302_Write(0x0117,k,2);        //GSIB  ,
  116. RN7302_Write(0x0118,k,2);        //GSIC  ,

  117. k[0]=0x8A;
  118. RN7302_Write(0x010C,k,1);        //PHSUA ,采样通道 UA 相位校正寄存器
  119. RN7302_Write(0x010D,k,1);        //PHSUB ,
  120. RN7302_Write(0x010E,k,1);        //PHSUC ,

  121. k[0]=0x80;
  122. k[1]=0x80;
  123. k[2]=0x80;
  124. RN7302_Write(0x010f,k,3);
  125. RN7302_Write(0x0110,k,3);
  126. RN7302_Write(0x0111,k,3);


  127. //空载电压有效值小数校准(OFFSET)
  128. k[0]=0x00;
  129. k[1]=0x00;
  130. RN7302_Write(0x0121,k,2);
  131. RN7302_Write(0x0122,k,2);
  132. RN7302_Write(0x0123,k,2);

  133. //空载电流有效值小数校准(OFFSET)
  134. k[0]=0xff;
  135. k[1]=0xf0;
  136. RN7302_Write(0x0124,k,2);
  137. RN7302_Write(0x0125,k,2);
  138. RN7302_Write(0x0126,k,2);

  139. //k[0]=0x00;
  140. //k[1]=0x00;
  141. //RN7302_Write(0x0131,k,2);
  142. //RN7302_Write(0x0132,k,2);
  143. //RN7302_Write(0x0133,k,2);

  144. //RN7302_Write(0x0128,k,2);
  145. //RN7302_Write(0x0129,k,2);
  146. //RN7302_Write(0x012a,k,2);

  147. //RN7302_Write(0x012b,k,2);
  148. //RN7302_Write(0x012c,k,2);
  149. //RN7302_Write(0x012d,k,2);

  150. //RN7302_Write(0x012e,k,2);
  151. //RN7302_Write(0x012f,k,2);
  152. //RN7302_Write(0x0130,k,2);

  153. //// 通道功率OFFSET校正
  154. //RN7302_Write(0x0137,k,2);
  155. //RN7302_Write(0x0138,k,2);
  156. //RN7302_Write(0x0139,k,2);

  157. k[0]=0x42;
  158. RN7302_Write(0x0184,k,1);

  159. k[0]=0x00;
  160. RN7302_Write(0x0185,k,1);

  161. k[0]=0x00;
  162. RN7302_Write(0x0184,k,1);

  163. k[0]=0x04;
  164. k[1]=0x32;
  165. k[2]=0x10;
  166. RN7302_Write(0x0160,k,3);


  167. // 清空采样数据缓存区
  168. k[2]=0x10;
  169. RN7302_Write(0x0163,k,3);

  170. // 写保护
  171. k[0]=0xdc;
  172. RN7302_Write(0x0180,k,1);
  173.         while(1)
  174.         {
  175.         delay_ms(500);
  176.         RN7302_Read(0x000B,k);
  177.         num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;
  178.         printf("IA_Reg=%02x%02x%02x%02x IA =%.3f \r\n",k[0],k[1],k[2],k[3],num0/1000.000);

  179.         RN7302_Read(0x000C,k);
  180.         num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;
  181.         printf("IB_Reg=%02x%02x%02x%02x IB =%.3f \r\n",k[0],k[1],k[2],k[3],num0/1000.000);
  182.                
  183.         RN7302_Read(0x000d,k);
  184.         num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;               
  185.         printf("IC_Reg=%02x%02x%02x%02x IC =%.3f \r\n\r\n",k[0],k[1],k[2],k[3],num0/1000.000);        

  186.         }

  187. }
复制代码
原理图: 无
仿真: 无
Keil代码下载(仅供参考,有错误求指教): RN7302测试例程.7z (186.87 KB, 下载次数: 52)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:88719 发表于 2023-7-22 10:39 | 只看该作者
啥玩楞,不推荐下载,没有用
回复

使用道具 举报

板凳
ID:513700 发表于 2024-1-17 13:56 | 只看该作者
赚积分下载
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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