主题中讨论的其他器件:TIDA-01606
工具与软件:
无法实现 PLL 运行时遇到问题。
我主要考察 TIDA-01606的逆变器运行。
我的目标是运行连接到电网的逆变器操作。 (380Vrms 线路间电压、60Hz)
// Read ADC results VA = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0); VB = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER1); VC = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER2); // DATA should be centered at 0 while having peak of 1 or -1. // SInce the ABC to DQ0 transformation is going to happen. sine-wave VA_pu = ((float32_t)VA - Vgrid_Sense_Offset_A) / Vgrid_Sense_peak2peak_A; // 변수 변경 가능 VB_pu = ((float32_t)VB - Vgrid_Sense_Offset_B) / Vgrid_Sense_peak2peak_B; VC_pu = ((float32_t)VC - Vgrid_Sense_Offset_C) / Vgrid_Sense_peak2peak_C;
使用上述代码和 ADCSOC。
void initADCSOC(void) { uint16_t acqps = 14; // Acquisition window size // Configure SOCs to be triggered by CPU Timer 0 interrupt ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN0, acqps); // Pin B0 ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN14, acqps); // Pin B14 ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_EPWM1_SOCA, ADC_CH_ADCIN15, acqps); // Pin B15 // Configure interrupt to occur after SOC2 conversion ADC_setInterruptSource(ADCB_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER2); ADC_enableInterrupt(ADCB_BASE, ADC_INT_NUMBER1); ADC_clearInterruptStatus(ADCB_BASE, ADC_INT_NUMBER1); }
感测到的值与正弦波非常相似。 如下所示。
与 TIDA-01606的 LAB1-4类似、
使用 ABC 至 DQ0 POS.h (来自 TI 库)函数将检测值转换为 DQ0形式。
// Perform ABC to DQ0 transformation ABC_DQ0_POS_run(&Vgrid_abc2dq0_pos, VA_pu, VB_pu, VC_pu, sine_VAL, cosine_VAL);
并使用 spll_3ph_srf.h 运行 SPLL
// Run the SPLL algorithm SPLL_3PH_SRF_run(Vgrid_abc2dq0_pos.q, &grid_SPLL); // Update the angle from SPLL angleSPLL_radians = grid_SPLL.theta[0]; sine_VAL = sinf(angleSPLL_radians); cosine_VAL = cosf(angleSPLL_radians);
最后、运行 dq0到 abc、为 A 相、B 相、C 相生成占空比
// Perform DQ0 to ABC transformation to get inverter voltage references DQ0_ABC_run(&Vgrid_dq02abc, Vd_pu, Vq_pu, Vz_pu, sine_VAL, cosine_VAL); //DQ0 to ABC duty_A = (Vgrid_dq02abc.a * 0.5f) + 0.5f; duty_B = (Vgrid_dq02abc.b * 0.5f) + 0.5f; duty_C = (Vgrid_dq02abc.c * 0.5f) + 0.5f; // 12. Clip duty cycles to [0, 1] duty_A = fminf(fmaxf(duty_A, 0.1f), 0.9f); duty_B = fminf(fmaxf(duty_B, 0.1f), 0.9f); duty_C = fminf(fmaxf(duty_C, 0.1f), 0.9f); //sine values to DUTY uint16_t cmpValueA = (uint16_t)(EPWM_TIMER_TBPRD * duty_A); uint16_t cmpValueB = (uint16_t)(EPWM_TIMER_TBPRD * duty_B); uint16_t cmpValueC = (uint16_t)(EPWM_TIMER_TBPRD * duty_C);
嗯、我认为 PLL 运行和流程是正确的、但这一操作的结果不会生成正弦波。 相反、它产生了 失真波。
我将系数设置为与示例部分相同
// Adjust coeffiecients. TI's library follow. grid_SPLL.lpf_coeff.b0 = 333.807f; grid_SPLL.lpf_coeff.b1 = -333.674f;
以及 d.q.z 值。
//DQ0 to ABC const float32_t Vd_pu = 0.835f; const float32_t Vq_pu = 0.0f; const float32_t Vz_pu = 0.0f;
有什么建议可使用并网逆变器实现 PLL 运行?
谢谢。