以32位MCU-HY16F198實現(xiàn)AC電流量測應(yīng)用
軟件說明
本文引用地址:http://m.butianyuan.cn/article/271787.htm程序流程圖
函式使用說明 :
1. void AC_DataCount(int index, int ADC_Data) : 把量測到的ADC Data轉(zhuǎn)換成AC Data。
int index : 代表所量測到的ADC Data資料筆數(shù)。
int ADC_Data : 使用HY16F198 ADC所量測到的ADC Data數(shù)值。
2. long long AC_Algorithm(void) : AC Data透過交流信號算法計算出電流數(shù)值。
一、 范例程序
/*----------------------------------------------------------------------------*/
/* 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] http://www.winson.com.tw/Data%20Sheet/WCS1800.pdf, WCS1800 Hall Sensor Datasheet
[2] http://www.hycontek.com/attachments/MSP/DS-HY16F198_TC.pdf, 纮康科技HY16F198 Datasheet.
[3] http://www.hycontek.com/attachments/MSP/UG-HY16F198_TC.pdf, 纮康科技HY16F198 User Guide.
adc相關(guān)文章:adc是什么
評論