共2条
1/1 1 跳转至页
MSP430FE42x 利尔达推出MSP430FE42x单相多功能防窃电电能表解决方案
问
多功能解决方案
有功功率/电能、无功功率/电能、视在功率/电能;
电流有效值、电压有效值、功率因子(附带容性、感性指示)、电网频率;
带温度补偿的实时时钟。
防窃电解决方案
电流不平衡时的防窃电测量:电流不平衡典型为零线接地或火线短接。
电流反向时的防窃电测量:电流反向典型为火线的进出端口连接对换。
移除主电压时的防窃电测量:移除主电压典型为拆除电表的零线连接,没有电压信号进入电表。
答 1: 能否提供软件设计方案!!!谢谢!!! 答 2: 晕我都做完了 答 3: 如何窃电??电费太贵了
另外,这样的表如果电表坏了电力公司是不是给免费换一个?如果免费的话我能不能把430给flash掉? 答 4: 软件是问题. 答 5: 这是我编的程序,测3V直流电压,有错误,帮忙看看!谢谢
#include"MSP430XE42X.h"
const unsigned char NUM_LCD[10]=
{
0xb7, //*"0"*//
0x12, //*"1"*//
0x8f, //*"2"*//
0x1f, //*"3"*// //LCD显示代码表
0x3a, //*"4"*//
0x3d, //*"5"*//
0xbd, //*"6"*//
0x13, //*"7"*//
0xbf, //*"8"*//
0x3f, //*"9"*//
};
const unsigned char ERROR[5]=
{
0xAD, //E //
0xBB, //R //
0xBB, //R //
0xB8, //O //
0xBB, //R //
};
#define LCD_IN_USE 8
unsigned char LCD_Buf[LCD_IN_USE];
#define RADIX_POINT 0x08
#define REFVOL 1.2 //vcc参考设为1.2
void set_parameter(unsigned int param,unsigned int data);
//**********************************************************
void init_LCD(void)
{
char tmpv;
BTCTL |= 0x10; // set LCD 时钟
LCDCTL = LCDON+LCD4MUX+LCDP1; // 4Mux 模式
for (tmpv = 0;tmpv<7;tmpv++)
{
LCDMEM[tmpv] = 0x00; //clear LCD
}
LCDMEM[7] = 0x02; // 设置LCDMEM[7]
}
void lcd_Display(result)
{
char tmpv;
char tmp;
for (tmp = 0;tmp<7;tmp++)
{
LCD_Buf[tmp] = result % 10; //把结果转换成十进制,并存放在LCD缓冲区中
result = result /10; //
}
for(tmpv=0;tmpv<LCD_IN_USE-1;tmpv++)
{
LCDMEM[tmpv] = NUM_LCD[LCD_Buf[tmpv]]; //更新LCDMEM中的内容
}
}
void lcd_SetRP()
{
LCDMEM[2] |= 0x80; // 显示小数点
}
void display()
{
char tmp;
for(;;)
{
for (tmp = 0;tmp<7;tmp++)
{
LCDMEM[tmp] = ERROR[tmp] ; //把结果转换成十进制,并存放在LCD缓冲区中
}
}
}
//******************************************************
void init_SD16(void) // 初始化SD16
{
ESPCTL |=~ESPEN ;
SD16CTL |=SD16REFON+SSEL_2 ; //参考电压1.2 ACLK
SD16CCTL1 |=SD16OSR0+SD16SNGL+SD16IE ;
SD16INCTL1|=SD16INCH1+SD16GAIN_1+SD16INTDLY0 ;
}
void init_esp_parameter() //初始化ESP430CE1模块
{
volatile unsigned int timeout;
ESPCTL |=ESPEN;
if((RET0&ACTIVEFG)!=0)
{
MBOUT1=modeIDLE; // 跟消息有关的数据写进MBOUT1
MBOUT0=mSET_MODE; //消息写进邮箱寄存器
timeout=0xffff;
while(((RET0&0x8000)!=0)&&(timeout-->0));
}
MBOUT0=mSWVERSION;
timeout=0xffff;
do
{
while(((MBCTL&IN0IFG)==0)&&(timeout-->0)); // 如果发送消息IFG置位
if(timeout==0)
{
display();
return;
}
}
while(MBIN0!=mSWRDY); // mSWRDY为发送的消息
set_parameter(mSET_STARTCURR_INT,0); // 设置esp430CE模块参数
set_parameter(mSET_STARTCURR_FRAC,0);
}
void set_parameter(unsigned int param,unsigned int data) // 设置esp430CE模块参数
{
volatile unsigned int timeout=0x0ffff;
MBOUT1=data; // 跟消息有关的数据写进MBOUT1(数据)
MBOUT0=param; //消息写进邮箱寄存器 (地址)
do
{
while(((MBCTL&IN0IFG)==0)&&(timeout-->0));
if(timeout==0)
{
display();
return;
}
}
while ((MBIN0!=mPARAMSET)||(MBIN1!=param)); // 参数号成功设置
}
void start_measurement(void)
{
set_parameter(mSET_EVENT,ENRDYME);
MBCTL=IN0IE;
_EINT(); // 使能中断
MBOUT1=modeMEASURE; // 开始测量
MBOUT0=mSET_MODE;
}
void main(void)
{
unsigned int tmpv,i;
WDTCTL = WDTHOLD + WDTPW; //停止看门狗
FLL_CTL0 |= XCAP14PF;
for (i = 0; i < 10000; i++);
init_LCD(); //初始化LCD
init_SD16(); //初始化SD16
init_esp_parameter();
start_measurement();
while(1)
{
SD16CCTL0 |= SD16SC; //启动SD16
tmpv = 0;
while(tmpv < 0xffff) tmpv++;//延时
}
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
unsigned int msg_data=MBIN1;
unsigned int msg=MBIN0;
if (msg==mEVENT)
{
unsigned int result;
result = SD16MEM1; // 使用通道I2差分输入
lcd_Display(result);
lcd_SetRP();
_BIC_SR_IRQ(LPM0_bits); // Exit LPM0
}
}
有功功率/电能、无功功率/电能、视在功率/电能;
电流有效值、电压有效值、功率因子(附带容性、感性指示)、电网频率;
带温度补偿的实时时钟。
防窃电解决方案
电流不平衡时的防窃电测量:电流不平衡典型为零线接地或火线短接。
电流反向时的防窃电测量:电流反向典型为火线的进出端口连接对换。
移除主电压时的防窃电测量:移除主电压典型为拆除电表的零线连接,没有电压信号进入电表。
答 1: 能否提供软件设计方案!!!谢谢!!! 答 2: 晕我都做完了 答 3: 如何窃电??电费太贵了
另外,这样的表如果电表坏了电力公司是不是给免费换一个?如果免费的话我能不能把430给flash掉? 答 4: 软件是问题. 答 5: 这是我编的程序,测3V直流电压,有错误,帮忙看看!谢谢
#include"MSP430XE42X.h"
const unsigned char NUM_LCD[10]=
{
0xb7, //*"0"*//
0x12, //*"1"*//
0x8f, //*"2"*//
0x1f, //*"3"*// //LCD显示代码表
0x3a, //*"4"*//
0x3d, //*"5"*//
0xbd, //*"6"*//
0x13, //*"7"*//
0xbf, //*"8"*//
0x3f, //*"9"*//
};
const unsigned char ERROR[5]=
{
0xAD, //E //
0xBB, //R //
0xBB, //R //
0xB8, //O //
0xBB, //R //
};
#define LCD_IN_USE 8
unsigned char LCD_Buf[LCD_IN_USE];
#define RADIX_POINT 0x08
#define REFVOL 1.2 //vcc参考设为1.2
void set_parameter(unsigned int param,unsigned int data);
//**********************************************************
void init_LCD(void)
{
char tmpv;
BTCTL |= 0x10; // set LCD 时钟
LCDCTL = LCDON+LCD4MUX+LCDP1; // 4Mux 模式
for (tmpv = 0;tmpv<7;tmpv++)
{
LCDMEM[tmpv] = 0x00; //clear LCD
}
LCDMEM[7] = 0x02; // 设置LCDMEM[7]
}
void lcd_Display(result)
{
char tmpv;
char tmp;
for (tmp = 0;tmp<7;tmp++)
{
LCD_Buf[tmp] = result % 10; //把结果转换成十进制,并存放在LCD缓冲区中
result = result /10; //
}
for(tmpv=0;tmpv<LCD_IN_USE-1;tmpv++)
{
LCDMEM[tmpv] = NUM_LCD[LCD_Buf[tmpv]]; //更新LCDMEM中的内容
}
}
void lcd_SetRP()
{
LCDMEM[2] |= 0x80; // 显示小数点
}
void display()
{
char tmp;
for(;;)
{
for (tmp = 0;tmp<7;tmp++)
{
LCDMEM[tmp] = ERROR[tmp] ; //把结果转换成十进制,并存放在LCD缓冲区中
}
}
}
//******************************************************
void init_SD16(void) // 初始化SD16
{
ESPCTL |=~ESPEN ;
SD16CTL |=SD16REFON+SSEL_2 ; //参考电压1.2 ACLK
SD16CCTL1 |=SD16OSR0+SD16SNGL+SD16IE ;
SD16INCTL1|=SD16INCH1+SD16GAIN_1+SD16INTDLY0 ;
}
void init_esp_parameter() //初始化ESP430CE1模块
{
volatile unsigned int timeout;
ESPCTL |=ESPEN;
if((RET0&ACTIVEFG)!=0)
{
MBOUT1=modeIDLE; // 跟消息有关的数据写进MBOUT1
MBOUT0=mSET_MODE; //消息写进邮箱寄存器
timeout=0xffff;
while(((RET0&0x8000)!=0)&&(timeout-->0));
}
MBOUT0=mSWVERSION;
timeout=0xffff;
do
{
while(((MBCTL&IN0IFG)==0)&&(timeout-->0)); // 如果发送消息IFG置位
if(timeout==0)
{
display();
return;
}
}
while(MBIN0!=mSWRDY); // mSWRDY为发送的消息
set_parameter(mSET_STARTCURR_INT,0); // 设置esp430CE模块参数
set_parameter(mSET_STARTCURR_FRAC,0);
}
void set_parameter(unsigned int param,unsigned int data) // 设置esp430CE模块参数
{
volatile unsigned int timeout=0x0ffff;
MBOUT1=data; // 跟消息有关的数据写进MBOUT1(数据)
MBOUT0=param; //消息写进邮箱寄存器 (地址)
do
{
while(((MBCTL&IN0IFG)==0)&&(timeout-->0));
if(timeout==0)
{
display();
return;
}
}
while ((MBIN0!=mPARAMSET)||(MBIN1!=param)); // 参数号成功设置
}
void start_measurement(void)
{
set_parameter(mSET_EVENT,ENRDYME);
MBCTL=IN0IE;
_EINT(); // 使能中断
MBOUT1=modeMEASURE; // 开始测量
MBOUT0=mSET_MODE;
}
void main(void)
{
unsigned int tmpv,i;
WDTCTL = WDTHOLD + WDTPW; //停止看门狗
FLL_CTL0 |= XCAP14PF;
for (i = 0; i < 10000; i++);
init_LCD(); //初始化LCD
init_SD16(); //初始化SD16
init_esp_parameter();
start_measurement();
while(1)
{
SD16CCTL0 |= SD16SC; //启动SD16
tmpv = 0;
while(tmpv < 0xffff) tmpv++;//延时
}
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
unsigned int msg_data=MBIN1;
unsigned int msg=MBIN0;
if (msg==mEVENT)
{
unsigned int result;
result = SD16MEM1; // 使用通道I2差分输入
lcd_Display(result);
lcd_SetRP();
_BIC_SR_IRQ(LPM0_bits); // Exit LPM0
}
}
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |