/* * pll_tools.c * * Created on: 13 нояб. 2024 г. * Author: Evgeniy_Sokolov */ #include #include #include #include #include #include #include #include "IQmathLib.h" #include "mathlib.h" #include "adc_tools.h" #include "limit_power.h" #include "pll_tools.h" //#pragma DATA_SECTION(pll1, ".slow_vars") PLL_REC pll1 = PLL_REC_DEFAULT; void init_50hz_input_net50hz(void) { //1. ИнициализациЯ pll1.setup.freq_run_pll = (FREQ_RUN_PLL); // частота запуска расчета Гц. pll1.setup.rotation_u_cba = 0;//0;//1; // чередование фаз: 0 - правильное A-B-C, 1 - неправильное A-C-B pll1.init(&pll1); // расчет и инициализациЯ внутренних переменных // Конец Инициализации } void calc_pll_50hz(void) { // передача данных в алгоритм. pll1.input.Input_U_AB = analog.iqUin_A1B1; pll1.input.Input_U_BC = analog.iqUin_B1C1; pll1.input.Input_U_CA = analog.iqUin_C1A1; // расчет, запускать с частотой указанной в setup.freq_run_pll pll1.calc_pll(&pll1); // Конец расчета } void get_freq_50hz_float(void) { float int_delta_freq_test; // 3. Получение данных у нормальном виде. // получение данных о частотен сети в Гц*100. // можно вызывать реже - только длЯ получения данных. pll1.get_freq_float(&pll1); if (edrk.Status_Ready.bits.preImitationReady2) edrk.freq_50hz_1 = 5001; else edrk.freq_50hz_1 = pll1.output.int_freq_net; if (delta_freq_test>0) { int_delta_freq_test = _IQtoF( delta_freq_test) * pll1.setup.freq_run_pll / PI * 50.00; // freq*100 edrk.freq_50hz_1 -= int_delta_freq_test; } // } void get_freq_50hz_iq(void) { // 3. Получение данных у нормальном виде. // получение данных о частотен сети в Гц*100. // можно вызывать реже - только длЯ получения данных. pll1.get_freq_iq(&pll1); if (edrk.Status_Ready.bits.preImitationReady2) edrk.iq_freq_50hz = level_50hz; else edrk.iq_freq_50hz = pll1.output.iq_freq_net; if (delta_freq_test>0) edrk.iq_freq_50hz -= delta_freq_test; // }