这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » MSP430FE42x 利尔达推出MSP430FE42x单相多功能防窃电电能表解

共2条 1/1 1 跳转至

MSP430FE42x 利尔达推出MSP430FE42x单相多功能防窃电电能表解决方案

院士
2006-09-17 18:14:16     打赏
MSP430FE42x 利尔达推出MSP430FE42x单相多功能防窃电电能表解决方案



关键词: MSP430FE42x     利尔     推出     单相     多功能         

院士
2006-12-22 22:43:00     打赏
2楼
问 多功能解决方案
有功功率/电能、无功功率/电能、视在功率/电能;
电流有效值、电压有效值、功率因子(附带容性、感性指示)、电网频率;
带温度补偿的实时时钟。

防窃电解决方案
电流不平衡时的防窃电测量:电流不平衡典型为零线接地或火线短接。
电流反向时的防窃电测量:电流反向典型为火线的进出端口连接对换。
移除主电压时的防窃电测量:移除主电压典型为拆除电表的零线连接,没有电压信号进入电表。

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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]