使用STM32G431芯片编写的可移植性强的基于PLL锁相环的程序和MATLAB仿真文件,包含...
PLL锁相环程序MATLAB仿真文件。 (SOGIDQ)程序用stm32G431芯片写的(hall库)可移植性强。锁相环这玩意儿在电力电子里算是基本功了最近在STM32G431上折腾了个基于SOGIDQ结构的数字锁相方案。核心算法总共就两个.c文件配合MATLAB仿真验证过电网频率跟踪效果实测在40Hz-65Hz范围能稳定抓波形。先上段硬货——SOGI初始化函数。注意这里用HAL库的定时器触发ADC采样配置成中心对齐模式能省不少事void SOGI_Init(SOGI_TypeDef *sogi, float k, float w0) { sogi-k _Q15(k); // Q15格式存放大佬们最爱的定点数 sogi-w0 _Q15(w0 * Ts); // 基波角频率×采样周期 HAL_TIM_Base_Start_IT(htim3); // 定时器3触发采样 HAL_ADCEx_Calibration_Start(hadc1, ADC_SINGLE_ENDED); }这里的_Q15宏是把浮点数转成Q15格式STM32G431没FPU硬核用定点数运算能避免软浮点库拖慢速度。ADC校准千万别省实测能提升0.5%左右的采样精度。中断服务函数里藏着处理流程的关键void ADC_IRQHandler(void) { static int16_t adc_raw; if(__HAL_ADC_GET_FLAG(hadc1, ADC_FLAG_EOC)){ adc_raw HAL_ADC_GetValue(hadc1); SOGI_Process(sogi_inst, adc_raw); // 先过二阶积分器 DQ_Transform(dq_inst, sogi_inst.alpha, sogi_inst.beta); // 转DQ坐标系 PLL_Update(pll_inst, dq_inst.d); // 用d轴分量调频 } }整个处理链控制在20μs以内G431主频170MHz完全hold得住。重点在DQ变换后的d轴分量直接反映相位误差这个设计让频偏补偿变得直观——误差信号进PI调节器直接修正SOGI的内置角频率。PLL锁相环程序MATLAB仿真文件。 (SOGIDQ)程序用stm32G431芯片写的(hall库)可移植性强。Matlab仿真文件结构更简单粗暴% 电网电压模型 t 0:1e-5:0.1; v_grid 310*sin(2*pi*50*t 0.5*pi) 15*randn(size(t)); % SOGI实现 function [alpha, beta] sogi(v_in, w0, k) persistent x1 x2; if isempty(x1), x10; x20; end x1 x1 w0*(v_in - k*x1 - x2); x2 x2 w0*x1; alpha x2; beta x1; end加了个5%幅值的白噪声模拟实际干扰跑出来的频率跟踪曲线基本在±0.2Hz内抖动。有意思的是当把k参数从1.414调到1.0时系统响应速度明显变快但抗噪能力下降这个平衡点需要根据实际工况取舍。移植时注意三个硬件适配点ADC采样率这里用10kHz、定时器触发配置、Q格式小数位处理。测试过F1和F4系列芯片改改时钟配置基本都能跑起来。完整工程文件里有个hardware_adapt.h改改里面的宏定义就能切不同型号的STM32。最后说个坑初期用浮点运算实现发现进中断太频繁会导致栈溢出。后来改用Q15定点数配合查表法搞sin/cos运算内存占用直接砍半。电力电子搞嵌入式嘛总得在精度和效率之间玩平衡术。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437876.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!