以32位MCU-HY16F198实现AC电流量测应用
出处:电子产品世界 发布于:2015-03-31 11:12:10
一、 内容简介
本文将介绍以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位CPUN801处理器。
(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的混合电压输出讯号。
软件说明
本文引用地址:https://www.eepw.com.cn/article/271787.htm
程序流程图
函式使用说明 :
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();
}
二、 参考文献
[1] https://www.winson.com.tw/Data%20Sheet/WCS1800.pdf, WCS1800 Hall Sensor Datasheet
[2] https://www.hycontek.com/attachments/MSP/DS-HY16F198_TC.pdf, 纮康科技HY16F198 Datasheet.
[3] https://www.hycontek.com/attachments/MSP/UG-HY16F198_TC.pdf, 纮康科技HY16F198 User Guide.
上一篇:噪声系数测量的三种典型方法
下一篇:硬件电路时序计算方法与应用实例
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- xEV 主逆变器电源模块中第四代 SiC MOSFET 的短路测试2024/4/26 17:31:11
- 定义绝缘耐久性评估的电压脉冲测试要求2024/4/26 16:36:19
- Keysight - 是德科技联合 ETS Lindgren 推出创新 NB-NTN OTA 测试解决方案2024/4/25 15:59:02
- 三坐标测量仪使用步骤及注意事项2024/4/11 17:54:47
- 如何提高接地电阻2024/4/11 16:38:47
- 英特尔数据存储如何操作和实现
- 什么是微动开关_微动开关有什么用_微动开关使用方法
- VCC,VDD,VEE,VSS在电源原理图中有什么区别?
- 低压配电系统设计规范_低压配电系统设计注意事项
- xEV 主逆变器电源模块中第四代 SiC MOSFET 的短路测试
- 光耦详细应用教程
- 定义绝缘耐久性评估的电压脉冲测试要求
- 采用沟槽MOS结构,使存在权衡关系的VF和IR相比以往产品得到显著改善 ROHM推出实现业界超快trr的100V耐压SBD“YQ系列”
- NOVOSENSE - 纳芯微推出车规级温湿度传感器NSHT30-Q1,助力汽车智能化发展
- Keysight - EV 电池设计创新:扩大续航里程、延长电池寿命