当前位置:首页 > 消费电子 > 消费电子
[导读]一、 内容简介本文将介绍以HY16F198搭配Hall Sensor(WCS1800)进行交流电流数值量测,最大可量测电流范围从0.1A~17.68A。本文实验数据从0A~17.6A,比较使用电表Agilent 3440

一、 内容简介

本文将介绍以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做电流数值显示。

控制芯片

单片机简介:HY16F系列32位高性能Flash单片机(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死机。

(7)24-bit高精准度ΣΔADC模拟数字转换器

(7.1)内置PGA (Programmable Gain Amplifier)最高可达128倍放大。

(7.2)内置温度传感器。

(8)超低输入噪声运算放大器。

(9)16-bit Timer A

(10)16-bit Timer B模块具PWM波形产生功能

(11)16-bit Timer C 模块具Capture/Compare 功能

(12)硬件串行通讯SPI模块

(13)硬件串行通讯I2C模块

(14)硬件串行通讯UART模块

(15)硬件RTC时钟功能模块

(16)硬件Touch KEY功能模块

三、 系统设计

硬件说明

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

 

 

主要组件介绍

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

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

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

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

 

 

函式使用说明 :

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[!--empirenews.page--]

{

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();

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭