新闻中心

EEPW首页>测试测量>设计应用> 以32位MCU-HY16F198实现AC电流量测应用

以32位MCU-HY16F198实现AC电流量测应用

作者: 时间:2015-03-30 来源:电子产品世界 收藏

  软件说明

本文引用地址://m.amcfsurvey.com/article/271787.htm

  程序流程图

  函式使用说明 :

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

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

  int ADC_Data : 使用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] http://www.winson.com.tw/Data%20Sheet/.pdf,Hall Sensor Datasheet

  [2] http://www.hycontek.com/attachments/MSP/DS-_TC.pdf, 纮康科技Datasheet.

  [3] http://www.hycontek.com/attachments/MSP/UG-HY16F198_TC.pdf, 纮康科技HY16F198 User Guide.

adc相关文章:adc是什么



上一页 1 2 下一页

关键词:HY16F198WCS1800

评论


技术专区

关闭