历史上的今天
返回首页

历史上的今天

今天是:2025年03月06日(星期四)

正在发生

2020年03月06日 | AC交流电流数值量测原理

2020-03-06 来源:elecfans

一、内容简介

本文将介绍以HY16F198搭配Hall Sensor(WCS1800)进行交流电流数值量测,最大可量测电流范围从0.1A~17.68A.本文实验数据从0A~17.6A,比较使用电表Agilent 34401A与HY16F198透过交流信号计算出在不同频率45Hz, 50Hz, 60Hz之间所得到的交流电流最大误差率可以控制在3%以内。


二、原理说明

量测原理

透过WCS1800将感应到的交流电流转变为输出电压(Vout),而输出电压(Vout)组成成分是包含(Vac)交流电压讯号和(Vdc)直流电压讯号混和而成的讯号,使用HY16F198量测输出电压(Vout)讯号,并且透过算法分析ADC Count数值,进而换算出相对感测到的交流电流负载。但需注意,透过Hall Sensor(WCS1800)转出每1安培(A)的输出电压最大误差为正负6mV,详细的Hall Sensor特性规格表显示在下一页电器特性表。


Hall Sensor(WCS1800)因为本身的输出电压(Vout)带有Vac交流电压加上Vdc直流电压混和成分,而Vdc的数值为1/2 Vdd,因此,本文应用使用HY16F198设定VDDA电压为3V,并且于ADC缓存器内设定ADC输入参考电压放大倍数为VREF*1/2(VREF= VRPS-VRNS),如把缓存器做为此设定,可以准确的量测到输入电压最大范围1.5V.但是这样的连接,就无法量测到Hall Sensor的Vout输出电压范围,所以需要在外部增加两个分压电阻,在ADC的AIO(0)与VDDA和VSS之间各串10k奥姆电阻做分压,因此量测到的电压数值再透过交流信号计算分析求出感应到的交流电流,并且由LCD Display做电流数值显示。

AC交流电流数值量测原理

图1 Hall Sensor

AC交流电流数值量测原理

图2 结构框图


控制芯片

单片机简介:HY16F系列32位高性能Flash单片机(HY16F198)

AC交流电流数值量测原理

图3 HY16F198


(1)采用最新Andes 32位CPU核心N801处理器。

(2)电压操作范围2.2~3.6V,以及-40℃~85℃工作温度范围。

(3)支持外部20MHz石英震荡器或内部16MHz高精度RC震荡器,拥有多种CPU工作频率切换选择,可让使用者达到最佳省电规划。

(3.1)运行模式350uA@2MHz/2(3.2)待机模式10uA@32KHz/2(3.3)休眠模式2.5uA(4)程序内存64KBytes Flash ROM(5)数据存储器8KBytes SRAM.(6)拥有BOR and WDT功能,可防止CPU死机。

(3.2) 待机模式 10uA@32KHz/2

(3.3) 休眠模式 2.5uA

(4) 程序内存64KBytes Flash ROM

(5)数据存储器8KBytes SRAM。

(6)拥有BOR and WDT功能,可防止CPU死机。

(7)24-bit高精准度ΣΔADC模拟数字转换器(7.1)内置PGA (Programmable Gain Amplifier)最高可达128倍放大。

(7.2)内置温度传感器。


三、 系统设计

硬件说明

HY16F198搭配Hall Sensor连接电路如下,AIO1与Hall Sensor的Vout接,AIO0透过10k电组分压电路连接在VDDA与VSS之间,这样就可以量测到带有1/2VDDA的交流电压讯号。

AC交流电流数值量测原理

  主要组件介绍

(1) MCU:HY16F198,功能为量测电信号、控制、运算包含功能为储存校正参数。

(2) LCD Display:负责显示量测出来的电流数值。

(3) 10K奥姆分压电路 : 主要做为分压电路应用,可以量测到带有1/2VDDA的交流电压讯号。

(4) Hall Sensor : 将感应到的交流电流转换为Vac加上Vdc的混合电压输出讯号。


  软件说明


  程序流程图

AC交流电流数值量测原理

  函式使用说明 :

1. void AC_DataCount(int index, int ADC_Data) : 把量测到的ADC Data转换成AC Data。

int index : 代表所量测到的ADC Data资料笔数。

int ADC_Data : 使用HY16F198 ADC所量测到的ADC Data数值。

2. long long AC_Algorithm(void) : AC Data透过交流信号算法计算出电流数值。

  一、 范例程序

/*----------------------------------------------------------------------------*/

/* MAIN funcTIon */

/*----------------------------------------------------------------------------*/

int main(void)

{

long long AC_Value;

DisplayInit();

ClearLCDframe();

Delay(10000);

DisplayHYcon();

Delay(1000);

MCUSTATUSbits._byte = 0;

Count=0;

InitalADC();

SYS_EnableGIE(7,0x1FF); //Enable GIE(Global Interrupt)

while(1)

{

if(MCUSTATUSbits.b_ADCdone) //b_ADCdone=1 execute below

{

MCUSTATUSbits.b_ADCdone=0;

AC_Value = AC_Algorithm(); // To do AC algorithm and to show current value

AC_Value=AC_Value/0.5770; // Using 60HZ gain value, calibrate at 2000mA

LCD_DATA_DISPLAY(AC_Value); //Display AC Value

Count=0;

DrvADC_CombFilter(0);

DrvADC_ClearIntFlag();

DrvADC_EnableInt();

DrvADC_CombFilter(1);

}

}

return 0;

}

/*--------------------------------------------------------------------*/

/* ADC Interrupt SubrouTInes */

/*--------------------------------------------------------------------*/

void HW2_ISR(void)

{

int ADCData;

if(DrvADC_ReadIntFlag())

{

DrvADC_ClearIntFlag();

ADCData=DrvADC_GetConversionData();

AC_DataCount(Count++,ADCData); // AC Algorithm : to get ADCData

if(Count》=AC_DataLen) //to do 4096 TImes

{

DrvADC_DisableInt();

MCUSTATUSbits.b_ADCdone=1;

}

}

}

/*--------------------------------------------------------------------*/

/* ADC Initialization Subroutines */

/*--------------------------------------------------------------------*/

void InitalADC(void)

{

//Set ADC input pin

DrvADC_SetADCInputChannel(ADC_Input_AIO1,ADC_Input_AIO0); //Set the ADC positive/negative input voltage source.

DrvADC_InputSwitch(OPEN); //ADC signal input (positive and negative) short(VISHR) control.

DrvADC_RefInputShort(OPEN); //Set the ADC reference input (positive and negative) short(VRSHR) control.

DrvADC_Gain(ADC_PGA_Disable,ADC_PGA_Disable); //Input signal gain for modulator.

DrvADC_DCoffset(0); //DC offset input voltage selection (VREF=REFP-REFN)

DrvADC_RefVoltage(VDDA,VSSA); //Set the ADC reference voltage.

DrvADC_FullRefRange(1); //Set the ADC full reference range select.

//0: Full reference range input

//1: 1/2 reference range input

DrvADC_OSR(10); //10 : OSR=32

DrvADC_CombFilter(ENABLE); //Enable OSR

DrvADC_ClkEnable(0,1); //Setting ADC CLOCK ADCK=HS_CK/6 & Rising edge is high

//Set VDDA voltage

DrvPMU_VDDA_LDO_Ctrl(E_VDD3V);

DrvPMU_BandgapEnable();

DrvPMU_REFO_Enable();

DrvPMU_AnalogGround(ENABLE); //ADC analog ground source selection.

//1 : Enable buffer and use internal source(need to work with ADC)

//Set ADC interrupt

DrvADC_EnableInt();

DrvADC_ClearIntFlag();

DrvADC_Enable();

}

推荐阅读

史海拾趣

微芯(CMOSIC)公司的发展小趣事

随着产品线的逐渐丰富和技术的不断进步,微芯生物开始积极拓展市场。他们与多家国内外医药企业建立了合作关系,将自主研发的药物推向市场。同时,公司也积极参与各类学术会议和展览,提升品牌知名度和市场影响力。通过不懈的努力,微芯生物逐渐获得了市场的认可和信赖。

HELUKABEL公司的发展小趣事

随着产品线的逐渐丰富和技术的不断进步,微芯生物开始积极拓展市场。他们与多家国内外医药企业建立了合作关系,将自主研发的药物推向市场。同时,公司也积极参与各类学术会议和展览,提升品牌知名度和市场影响力。通过不懈的努力,微芯生物逐渐获得了市场的认可和信赖。

APSA公司的发展小趣事

在竞争激烈的电子行业中,APSA公司始终保持对技术的敏锐洞察和持续创新。公司不断投入研发资金,引进先进的技术和设备,推动产品升级换代。通过不断创新和技术升级,公司成功保持了市场领先地位。

Gwconnect (Molex)公司的发展小趣事
可以根据具体需求灵活调整电路参数,实现不同的功能和性能。
华润微(CRMICRO)公司的发展小趣事

华润微一直注重技术创新和研发投入。公司拥有一支高素质的研发团队,致力于宽禁带半导体(即第三代半导体)等领域的技术研发。通过不断的努力和积累,华润微在新技术研发方面取得了丰硕的成果,成为宽禁带半导体领域的佼佼者。同时,公司也加大了对封装测试技术的研发投入,不断提升其封装测试能力和技术水平。

Efficient Power Conversion公司的发展小趣事

在追求自身发展的同时,EPC公司也积极寻求与行业内其他企业的合作。通过与全球知名的汽车制造商、通信设备制造商以及消费电子企业建立合作关系,EPC公司将其氮化镓技术广泛应用于各个领域,推动了整个电子行业的发展。同时,EPC公司也积极参与行业标准的制定和推广工作,为行业的健康发展做出了积极贡献。

问答坊 | AI 解惑

日本发明水驱动汽车 看出我们的差距

日本发明水驱动汽车 看出我们的差距        日本发明水驱动汽车 一升水可跑80公里。本来这是一个很好的事情,特别是针对现在能源紧缺的现状。这无疑是一个很好的消息,对世界汽车行业都特别有好处。但是我们从网易上面看到我 ...…

查看全部问答>

凌阳16位单片机应用基础

    凌阳16位单片机学习的好资料。欢迎大家下载!凌阳16位单片机是台湾凌阳公司生产的性价比很高的一款十六位单片机。,该芯片拥有8路10位精度的AD,其中1路AD为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件 ...…

查看全部问答>

提一个关于C8051f系列中断借口设置的问题

在C8051f020中,为INT0和INT1分配了端口之后,程序中除了对XBR1进行设置外还需要设置写什么?谢谢…

查看全部问答>

请教2440 nand flash驱动的一些问题

//今天看了一下flash驱动的一些代码,发现有些不解。 //平台描述2440+64M nand  flash -------------------------------------------- /* 写扇区函数     @func   BOOL | FMD_WriteSector | Writes the specified ...…

查看全部问答>

STR91x编程参考手册中文版V1.0

STR91x编程参考手册 V1.0   由于时间仓促及水平所限,以及ST的技术文档本身也在不断修正,错误及不妥之处在所难免,欢迎各位读者批评指正。同时大家在开发过程中请下载ST发布的最新芯片手册,如果有技术问题,欢迎访问我 ...…

查看全部问答>

Cosmic

我下了个CosMIC for STM8 但不能仿真,是没有LICENSE的原因吗? 从COsmic申请一个免费的LICENSE,怎么不给我呀…

查看全部问答>

用两个CD4094分时复用控制7个数码管和7个按键怎么处理

两个CD4094一个控制段选,一个控制位选,控制位选的4094的Q1到Q7还接上7个按键,然后把按键连起来一个IO口控制,想问,怎么样处理数码管位选和按键冲突的?我写的程序数码管管能正常使用,但是按键用不。我还是个菜鸟,请各位高手指教一下,或者给 ...…

查看全部问答>

不该走的弯路,还是走了!

DIY数字电源中,由于电路设计的欠合理,恰巧又遇到买的元件不是设计指定的元件,致使接连烧坏CPU。 (相关电路参见“全数字电源”有关贴子) 开始怀疑是耦合变压器反馈到初的高压脉冲引起的,随即买了高速光耦合器等IC做实验。以下仅帖两图。 1 ...…

查看全部问答>

各位前辈帮帮忙吧

用STC89C53RC单片机写个程序,来驱动液晶屏,液晶屏资料就在下面。怎么才能点亮屏幕?上面怎么加汉字、表格啥的。 谢谢各位了。…

查看全部问答>