ZHCUC77 August 2024
per_sample_dsp()
图 3-6 展示了 per_sample_dsp()
函数的流程图。per_sample_dsp()
函数用于计算中间点积结果,这些结果会馈送到前台进程以计算计量读数。电压样本和电流样本均在专用 64 位寄存器中进行处理和累积。每相有功功率和无功功率也在 64 位寄存器中累积。
累积 CYCLES_PER_COMPUTATION 个周期(如果 FNOM = 50Hz,为 10 个周期,如果 FNOM = 60Hz,为 12 个周期)后,后台进程将触发前台函数以计算以下参数的最终值:RMS 电压和电流;有功、无功和视在功率;有功、无功和视在电能;频率;功率因数;基波电压、基波电流、基波有功功率、基波无功功率和基波视在功率;欠压偏差和过压偏差;以及电压 THD 和电流 THD。在软件中,有两组点积:在任何给定的时间,一组供前台用于计算,另一组供后台用作工作集。后台进程有足够的样本后,进程会交换两个点积,使前台可以使用后台进程刚刚计算出的新点积,而后台进程可以使用新的空集来计算下一组点积。
每当电压通道上出现前沿过零(− 到 + 电压转换)时,per_sample_dsp()
函数还负责更新相应相位的频率(以每个周期的样本数为单位),并触发 1 周期 VRMS 读数的前台计算。这个 1 周期 VRMS 读数的计算与每 CYCLES_PER_COMPUTATION 个周期更新的 VRMS 读数不同。1 周期 VRMS 读数专门用于更新骤降、骤升和中断状态变量。1 周期 VRMS 的计算与用于 CYCLES_PER_COMPUTATION 点积的方案使用相同的点积交换方案。
per_sample_dsp()
函数还负责输出电压过零引脚(可选)。每当一个电压通道上出现负到正过零并且该电压通道的相应 1 周期 VRMS 读数大于中断阈值时,该引脚则出现下降沿。如果一个电压通道上出现正到负过零并且该电压通道的 1 周期 VRMS 读数大于中断阈值,该引脚则出现上升沿。为了减轻输出过零引脚对此设计的精度的影响,过零输出不需要选择在连接到 LED 的 GPIO 引脚上。
以下部分介绍 per_sample_dsp()
函数中的各个电量测量元素。