新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 如何實現AC電流量測應用

        如何實現AC電流量測應用

        作者: 時間:2017-02-06 來源:網絡 收藏


        (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)內置溫度傳感器。

        本文引用地址:http://www.104case.com/article/201702/338362.htm

        (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的交流電壓訊號。



        圖4 硬件線路連接圖

        主要組件介紹(1) MCU:HY16F198,功能為量測電信號、控制、運算包含功能為儲存校正參數。

        (2) LCD Display:負責顯示量測出來的電流數值。

        (3) 10K奧姆分壓電路:主要做為分壓電路應用,可以量測到帶有1/2VDDA的交流電壓訊號。

        (4) Hall Sensor :將感應到的交流電流轉換為Vac加上Vdc的混合電壓輸出訊號。

        函式使用說明: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 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 峨山| 葵青区| 郯城县| 翁源县| 雷州市| 桦南县| 兴文县| 历史| 长岛县| 富宁县| 藁城市| 昭平县| 赤城县| 历史| 岚皋县| 丰台区| 高安市| 神农架林区| 乳山市| 吉水县| 宝应县| 育儿| 岳普湖县| 谢通门县| 漠河县| 肃北| 天全县| 固始县| 昌黎县| 东安县| 台北市| 常宁市| 津南区| 平江县| 尚义县| 福建省| 天门市| 葵青区| 格尔木市| 长治县| 海门市|