主题中讨论的其他器件: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 运行?
谢谢。

