📄 intmapping.c
字号:
/********************************************************************************
* 杭州利尔达 *
* MSP430FE42X单相防窃电多功能电表平台 *
* ----- ESP SD16实现 *
* *
* *
* 说明:本软件为杭州利尔达单相防窃电多功能电表DEMO软件 *
* *
*********************************************************************************/
#include "msp430xe42x.h"
#include "globe.h"
#include "extern_function.h"
#include "emeter_cfg.h"
void EnergyReadyIntMapping(void)
{
/* 读两电流通道上次测量的有功电能 */
emeter.ul_act_power1 = (((uint32)ACTENERGY1_HI)<<16)+ACTENERGY1_LO;
emeter.ul_act_power2 = (((uint32)ACTENERGY2_HI)<<16)+ACTENERGY2_LO;
#ifdef ENERGY_1SEC
ul_total_power_infact = (float)emeter.ul_act_power1 * emeter.f_Cz1;
#endif
/* 读两电流通道上次测量的无功电能 */
emeter.ul_react_power = (((uint32)REACTENERGY_HI)<<16)+REACTENERGY_LO;
/* 读两电流通道上次测量的视在功率 */
emeter.ul_app_power = (((uint32)APPENERGY_HI)<<16)+APPENERGY_LO;
/* 读电流有效值 */
emeter.ui_current_IRMS = IRMS_HI*0.2342;
/* 读电压有效值 */
emeter.ui_voltage_V1RMS = V1RMS*1.23867;
/* 读电网频率 */
emeter.ui_main_frequency = 104857600/MAINSPERIOD;
/* 读功率因子 */
emeter.ui_power_factor = (uint16)(POWERFCT*0.0061035);
#ifdef ENERGY_1SEC
emeter.ui_meter_status |= NEW_ENERGY_READY;
#endif
}
#ifndef ENERGY_1SEC
void ActensperReadyIntMapping(void)
{
uint32 tmp;
uint8 ucmainfeq;
ucmainfeq = (10485760L/MAINSPERIOD + 5)/10;
if ((ESP430_STAT0 & I2GTI1FG) != 0)
{
tmp = ul_actensper2 * ucmainfeq * CURRENT_CH2_100_Cz; //I2 > I1
_DINT();
ul_total_power_infact = tmp;
_EINT();
}
else
{
tmp = ul_actensper1 * ucmainfeq * CURRENT_CH1_100_Cz; //I1 > I2
_DINT();
ul_total_power_infact = tmp;
_EINT();
}
//ul_total_power_infact = ul_total_power_infact + ul_total_power_infact*0.00015*(emeter.i_last_temperature-20);
}
#endif
void BasicTimerIntMapping(void)
{
/* 判断是否需要忽略这一秒 */
if(!(emeter.ui_meter_status & SKIP_A_SECOND == SKIP_A_SECOND))
rtc_bumper();
else
emeter.ui_meter_status &= ~SKIP_A_SECOND;
/* 若温度测量,内部实时时钟补偿周期到,则进行一次温度测量 */
if((emeter.ui_sec_count++) >=(CORRECT_TIME-1))
{
/* 若ESP在工作状态,则用ESP进行温度测量,否则用SD16 */
if((ESPCTL & ESPEN) == ESPEN)
{
MBOUT0= mTEMP;
}
else
{
/* 初始化模拟前端 */
//emeter.ui_meter_status |= IN_TEMPERATURE_MEASURE;
//init_analog_front_end();
//SD16CCTL2 |= SD16SC;
}
emeter.ui_sec_count = 0;
}
if(++emeter.uc_lcd_remaining_times >= 3)
{
emeter.ui_meter_status |= REQUIRE_LCD_UPDATE;
emeter.uc_lcd_remaining_times = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -