<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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://www.ex-cimer.com/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ù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();