|
RN7302測(cè)試?yán)?全網(wǎng)不多的RN7032測(cè)試源碼,值得參考。
單片機(jī)源程序如下:- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "spi.h"
- /* 本測(cè)試?yán)蹋M量程40A)針對(duì)1000:1電流互感器進(jìn)行簡(jiǎn)易校表,offset校正,并輸出ABC三相電流有效值。*/
- /* A5--->RN7302_SCK */
- /* A6--->RN7302_SDO */
- /* A7--->RN7302_SDI */
- #define RN7302_CS PAout(4) //RN7302_CS 使能
- u8 RN7302_Read(u16 wReg,u8 *pBuf) //00計(jì)量參數(shù)寄存器,01配置和狀態(tài)寄存器
- {
- u8 temp;
- RN7302_CS=0;
- SPI1_ReadWriteByte(wReg); //發(fā)送讀取寄存器地址
- temp = (((u8)(wReg >> 4)) & 0xf0)^0xff + 0x10;
- SPI1_ReadWriteByte(temp); //發(fā)送讀取寄存器地址
- delay_us(10);
- pBuf[0]=SPI1_ReadWriteByte(0xff);
- pBuf[1]=SPI1_ReadWriteByte(0xff);
- pBuf[2]=SPI1_ReadWriteByte(0xff);
- pBuf[3]=SPI1_ReadWriteByte(0xff);
- RN7302_CS=1;
- return(1);
- }
- void RN7302_Write(u16 wReg,u8 *pBuf,u8 DatLen) //00計(jì)量參數(shù)寄存器,01配置和狀態(tài)寄存器
- {
- u8 num,temp;
- u8 cs;
-
- RN7302_CS=0;
- temp = (u8)(wReg & 0x00ff);
- SPI1_ReadWriteByte(temp); //發(fā)送讀取寄存器地址
- temp = (((u8)(wReg >> 4)) & 0xf0) + 0x80;
- SPI1_ReadWriteByte(temp); //發(fā)送讀取寄存器地址
- cs=wReg+temp;
- delay_us(10);
- for(num=0;num<DatLen;num++)
- {
- SPI1_ReadWriteByte(pBuf[num]);
- cs+=pBuf[num];
- }
- cs=~cs;
- SPI1_ReadWriteByte(cs);
- RN7302_CS=1;
- }
- int main(void)
- {
- u32 num0=0;
- u8 k[5]={0},f=0;
- delay_init(); //延時(shí)函數(shù)初始化
- NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- uart_init(115200); //串口初始化為9600
- LED_Init(); //LED端口初始化
- SPI1_Init();
- GPIOSet();
-
-
- k[0]=0xe5;
- RN7302_Write(0x0180,k,1); // 寫使能位
- k[0]=0xa2;
- RN7302_Write(0x0181,k,1); // 切換到EMM配置寄存器
- k[0]=0xfa;
- RN7302_Write(0x0182,k,1); // 復(fù)位
- delay_ms(500);
- k[0]=0xe5;
- RN7302_Write(0x0180,k,1);
- k[0]=0xa2;
- RN7302_Write(0x0181,k,1);
- k[0]=0x77;
- k[1]=0x77;
- k[2]=0x77;
- RN7302_Write(0x0162,k,3); //EMU 控制寄存器
-
-
- k[0]=0x25;
- k[1]=0x78;
- RN7302_Write(0x0100,k,2); //HFConst1 ,高頻脈沖計(jì)數(shù)寄存器 1
- RN7302_Write(0x0101,k,2); //HFConst2 ,高頻脈沖計(jì)數(shù)寄存器 1
- k[0]=0x01;
- k[1]=0xD5;
- RN7302_Write(0x0102,k,2); //IStart_PS ,有功視在啟動(dòng)電流閾值寄存器
- RN7302_Write(0x0103,k,2); //IStart_Q ,無功啟動(dòng)電流閾值寄存器
- k[0]=0x14;
- k[1]=0xfb;
- RN7302_Write(0x0104,k,2); //LostVoltT ,失壓閾值寄存器
- k[0]=0x00;
- k[1]=0x49;
- RN7302_Write(0x0105,k,2); //ZXOT ,過零閾值寄存器
- k[0]=0x00;
- k[1]=0x04;
- k[2]=0x0b;
- RN7302_Write(0x0158,k,3); //SAGCFG ,電壓暫降閾值配置
- k[0]=0x47;
- k[1]=0x33;
- RN7302_Write(0x0159,k,2); //OVLVL ,過壓閾值配置
- k[0]=0x65;
- k[1]=0x32;
- RN7302_Write(0x015a,k,2); //OILVL ,過流閾值配置
- k[0]=0x0F;
- k[1]=0x21;
- k[2]=0x00;
- RN7302_Write(0x0161,k,3);/*******************************************************************/
- //k[0]=0x00;
- //k[1]=0x00;
- //RN7302_Write(0x0118,k,2);
- k[0]=0x17;
- k[1]=0x01;
- RN7302_Write(0x0113,k,2); //GSUA ,采樣通道 UA 通道增益
- RN7302_Write(0x0114,k,2); //GSUB ,
- RN7302_Write(0x0115,k,2); //GSUC ,
- k[0]=0x86;
- k[1]=0x0d;
- RN7302_Write(0x0116,k,2); //GSIA ,采樣通道 IA 通道增益
- RN7302_Write(0x0117,k,2); //GSIB ,
- RN7302_Write(0x0118,k,2); //GSIC ,
- k[0]=0x8A;
- RN7302_Write(0x010C,k,1); //PHSUA ,采樣通道 UA 相位校正寄存器
- RN7302_Write(0x010D,k,1); //PHSUB ,
- RN7302_Write(0x010E,k,1); //PHSUC ,
- k[0]=0x80;
- k[1]=0x80;
- k[2]=0x80;
- RN7302_Write(0x010f,k,3);
- RN7302_Write(0x0110,k,3);
- RN7302_Write(0x0111,k,3);
- //空載電壓有效值小數(shù)校準(zhǔn)(OFFSET)
- k[0]=0x00;
- k[1]=0x00;
- RN7302_Write(0x0121,k,2);
- RN7302_Write(0x0122,k,2);
- RN7302_Write(0x0123,k,2);
- //空載電流有效值小數(shù)校準(zhǔn)(OFFSET)
- k[0]=0xff;
- k[1]=0xf0;
- RN7302_Write(0x0124,k,2);
- RN7302_Write(0x0125,k,2);
- RN7302_Write(0x0126,k,2);
- //k[0]=0x00;
- //k[1]=0x00;
- //RN7302_Write(0x0131,k,2);
- //RN7302_Write(0x0132,k,2);
- //RN7302_Write(0x0133,k,2);
- //RN7302_Write(0x0128,k,2);
- //RN7302_Write(0x0129,k,2);
- //RN7302_Write(0x012a,k,2);
- //RN7302_Write(0x012b,k,2);
- //RN7302_Write(0x012c,k,2);
- //RN7302_Write(0x012d,k,2);
- //RN7302_Write(0x012e,k,2);
- //RN7302_Write(0x012f,k,2);
- //RN7302_Write(0x0130,k,2);
- //// 通道功率OFFSET校正
- //RN7302_Write(0x0137,k,2);
- //RN7302_Write(0x0138,k,2);
- //RN7302_Write(0x0139,k,2);
- k[0]=0x42;
- RN7302_Write(0x0184,k,1);
- k[0]=0x00;
- RN7302_Write(0x0185,k,1);
- k[0]=0x00;
- RN7302_Write(0x0184,k,1);
- k[0]=0x04;
- k[1]=0x32;
- k[2]=0x10;
- RN7302_Write(0x0160,k,3);
- // 清空采樣數(shù)據(jù)緩存區(qū)
- k[2]=0x10;
- RN7302_Write(0x0163,k,3);
- // 寫保護(hù)
- k[0]=0xdc;
- RN7302_Write(0x0180,k,1);
- while(1)
- {
- delay_ms(500);
- RN7302_Read(0x000B,k);
- num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;
- printf("IA_Reg=%02x%02x%02x%02x IA =%.3f \r\n",k[0],k[1],k[2],k[3],num0/1000.000);
- RN7302_Read(0x000C,k);
- num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;
- printf("IB_Reg=%02x%02x%02x%02x IB =%.3f \r\n",k[0],k[1],k[2],k[3],num0/1000.000);
-
- RN7302_Read(0x000d,k);
- num0=((0x00000000|k[0]<<24|k[1]<<16|k[2]<<8|k[3])&0x0fffffff)/160;
- printf("IC_Reg=%02x%02x%02x%02x IC =%.3f \r\n\r\n",k[0],k[1],k[2],k[3],num0/1000.000);
- }
- }
復(fù)制代碼 原理圖: 無
仿真: 無
Keil代碼下載(僅供參考,有錯(cuò)誤求指教):
RN7302測(cè)試?yán)?7z
(186.87 KB, 下載次數(shù): 55)
2023-7-22 15:19 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|