新聞中心

EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 以32位MCU-HY16F198實(shí)現(xiàn)AC電流量測(cè)應(yīng)用

以32位MCU-HY16F198實(shí)現(xiàn)AC電流量測(cè)應(yīng)用

作者: 時(shí)間:2015-03-30 來(lái)源:電子產(chǎn)品世界 收藏

  軟件說(shuō)明

本文引用地址:http://butianyuan.cn/article/271787.htm

  程序流程圖

  函式使用說(shuō)明 :

  1. void AC_DataCount(int index, int ADC_Data) : 把量測(cè)到的ADC Data轉(zhuǎn)換成AC Data。

  int index : 代表所量測(cè)到的ADC Data資料筆數(shù)。

  int ADC_Data : 使用 ADC所量測(cè)到的ADC Data數(shù)值。

  2. long long AC_Algorithm(void) : AC Data透過(guò)交流信號(hào)算法計(jì)算出電流數(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();

  }

  二、 參考文獻(xiàn)

  [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相關(guān)文章:adc是什么



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: HY16F198 WCS1800

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉