0
一,内容简介
本文将介绍以HY16F198搭配霍尔传感器(WCS1800)进行交流电流数值量测,最大可量测电流范围从0.1A?17.68A。本文实验数据从0A?17.6A,比较使用电表安捷伦34401A与HY16F198透过交流信号计算出在不同频率在45Hz,50Hz的60Hz的之间所得到的交流电流最大误差率可以控制在3%以内。
二,说明原理
量测原理
透过WCS1800将感应到的交流电流转变为输出电压(Vout),而输出电压(Vout)组成包含(Vac)交流电压讯号和(Vdc)直流电压讯号混和并变成的讯号,并使用HY16F198量测输出电压(Vout)讯号,并通过算法分析ADC计数数值,进而换算出相对感测到的交流电流负载。但需注意,透过霍尔传感器(A)的输出电压最大误差为正负为6mV,详细的霍尔传感器(WCS1800)转出每1安培特性规格表显示在下一页电器特性表。
霍尔传感器(WCS1800)因为本身的输出电压(VOUT)带有吸尘器交流电压加上Vdc的直流电压混和成分,而伏的数值为1/2Vdd时,因此,本文应用使用HY16F198设置VDDA电压为3V,并且在ADC缓存器内部设置ADC输入参考电压放大倍数为VREF*1/2(VREF=VRPS-VRNS),如把缓存器做设置设定,可以准确的量测到输入电压最大范围1.5V。但是这样的连接,就无法量测到HallSensor的Vout输出电压范围,所以需要在外部增加两个分压电阻,在ADC的AIO(0)与VDDA和VSS之间各串10k奥姆电阻做分压,因此量测到的电压数值再透过交流信号计算分析求出感应到的交流电流,并且由LCD显示器做电流数值显示。
基于HY16F198和霍尔传感器实现电流数值测量系统的设计
基于HY16F198和霍尔传感器实现电流数值测量系统的设计
控制芯片
单片机简介:HY16F系列32位高性能闪存单片机(HY16F198)
(1)采用最新安第斯山脉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)程序内存64K字节闪存ROM(5)数据存储器8K字节的SRAM(
(3.2)待机模式10uA@32KHz/2
(3.3)休眠模式2.5uA
(4)程序内存64KBytesFlashROM
(5)数据存储器8KBytesSRAM。
(6)拥有6)具有BOR和WDT功能,可防止CPU死机。BOR和WDT功能,可防止CPU死机。
(7)24位高精密度ΣΔADC模拟数字转换器(7.1)内置PGA(可编程增益放大器)最高可达128倍放大。
(7.2)内置温度传感器。
(8)超低输入噪声运算放大器。
(9))16位定时器A
(10)16位定时器B模块具PWM波形产生功能
(11)16位定时器C模块具捕获/比较功能
(12)硬件串行通讯SPI模块
(13)硬件串行通讯I2C模块
(14)硬件串行通讯UART模块
(15)硬件RTC时钟功能模块
(16)硬件TouchKEY功能模块
三,系统设计
硬件说明
HY16F198搭配HallSensor连接电路如下,AIO1与HallSensor的Vout接,AIO0透过10K电组分压电路连接在VDDA与VSS之间,这样就可以量测到带有1/2VDDA的交流电压讯号。
主要组件介绍(1)MCU:HY16F198,功能为量测电信号、控制、运算包含功能为储存校正参数。
(2)LCDDisplay:负责显示量测出来的电流数值。
(3)10K奥姆分压电路:主要做为分压电路应用,可以量测到带有1/2VDDA的交流电压讯号。
(4)HallSensor:将感应到的交流电流转换为Vac加上Vdc的混合电压输出讯号。
函式使用说明:1.voidAC_DataCount(intindex,intADC_Data):把量测到的ADCData转换成ACData.intindex:代表所量测到的ADCData资料笔数。
intADC_Data:使用HY16F198ADC所量测到的ADCData数值。
2.longlongAC_Algorithm(void):ACData透过交流信号算法计算出电流数值。
一、范例程序
/*——*//*MAINfunction*//*——*/intmain(void)
{longlongAC_Value;DisplayInit();ClearLCDframe();Delay(10000);DisplayHYcon();Delay(1000);MCUSTATUSbits._byte=0;Count=0;InitalADC();SYS_EnableGIE(7,0x1FF);//EnableGIE(GlobalInterrupt)
while(1)
{if(MCUSTATUSbits.b_ADCdone)//b_ADCdone=1executebelow{MCUSTATUSbits.b_ADCdone=0;AC_Value=AC_Algorithm();//TodoACalgorithmandtoshowcurrentvalueAC_Value=AC_Value/0.5770;//Using60HZgainvalue,calibrateat2000mALCD_DATA_DISPLAY(AC_Value);//DisplayACValueCount=0;DrvADC_CombFilter(0);DrvADC_ClearIntFlag();DrvADC_EnableInt();DrvADC_CombFilter(1);}return0;}/*——*//*ADCInterruptSubroutines*//*——*/voidHW2_ISR(void)
{intADCData;if(DrvADC_ReadIntFlag())
{DrvADC_ClearIntFlag();ADCData=DrvADC_GetConversionData();AC_DataCount(Count++,ADCData);//ACAlgorithm:togetADCDataif(Count》=AC_DataLen)//todo4096times{DrvADC_DisableInt();MCUSTATUSbits.b_ADCdone=1;}/*——*//*ADCInitializationSubroutines*//*——*/voidInitalADC(void)
{//SetADCinputpinDrvADC_SetADCInputChannel(ADC_Input_AIO1,ADC_Input_AIO0);//SettheADCpositive/negativeinputvoltagesource.DrvADC_InputSwitch(OPEN);//ADCsignalinput(positiveandnegative)short(VISHR)control.DrvADC_RefInputShort(OPEN);//SettheADCreferenceinput(positiveandnegative)short(VRSHR)control.DrvADC_Gain(ADC_PGA_Disable,ADC_PGA_Disable);//Inputsignalgainformodulator.DrvADC_DCoffset(0);//DCoffsetinputvoltageselection(VREF=REFP-REFN)
DrvADC_RefVoltage(VDDA,VSSA);//SettheADCreferencevoltage.DrvADC_FullRefRange(1);//SettheADCfullreferencerangeselect.//0:Fullreferencerangeinput//1:1/2referencerangeinputDrvADC_OSR(10);//10:OSR=32DrvADC_CombFilter(ENABLE);//EnableOSRDrvADC_ClkEnable(0,1);//SettingADCCLOCKADCK=HS_CK/6Risingedgeishigh//SetVDDAvoltageDrvPMU_VDDA_LDO_Ctrl(E_VDD3V);DrvPMU_BandgapEnable();DrvPMU_REFO_Enable();DrvPMU_AnalogGround(ENABLE);//ADCanaloggroundsourceselection.//1:Enablebufferanduseinternalsource(needtoworkwithADC)
//SetADCinterruptDrvADC_EnableInt();DrvADC_ClearIntFlag();DrvADC_Enable();}
双面板免费加费,四层板加急打样,厚铜电路板打样