交流电压的软件处理
扫描二维码
随时随地手机看文章
tmp3 = (int16_t)(((uint32_t)ADCBUFx << 4) - (uint32_t)32768);
tmp4 = (int16_t)(((uint32_t)ADCBUFx << 4) - (uint32_t)32768);
tmp5 = (int16_t)(((uint32_t)ADCBUFx << 4) - (uint32_t)32768);
在三相维也纳PFC中,对输入交流电压采样处理的代码如上,上述处理( (ADCBUFx << 4) - 32768 并转换为 int16_t ),主要是为了将ADC采样值转换为符合控制需求的有符号交流电压信号,具体原因如下:
1. ADC采样的原始特性
- 维也纳PFC的输入交流电压是交变信号(正弦波,正负交替),但多数ADC是单极性采样(只能输出0~满量程的无符号数值),无法直接表示负电压。
- 实际电路中,会通过偏置电路(如叠加直流偏置)将交流电压抬升为单极性信号(例如将±V的交流信号转换为0~2V的直流偏置信号),确保ADC能完整采集正负半周。
2. 代码处理的核心目的
(1)消除直流偏置,恢复有符号特性
- 假设ADC的满量程对应偏置后的最大电压(如0~3.3V),其中中间值(如1.65V)对应交流电压的“0点”。
- 若ADC为12位(输出范围0~4095),则中间值为2048(4095/2≈2048),对应原始交流电压的0V。
- 代码中 32768 是 2048 << 4 (2048×16=32768),即偏置对应的“0点”采样值经左移后的结果。
- 减去32768的作用是消除直流偏置,使结果恢复为以0为中心的有符号值(正半周为正,负半周为负)。
(2)位宽调整与量程匹配
- ADCBUFx << 4 表示将ADC采样值左移4位(相当于×16)。
- 若ADC是12位(分辨率12bit),左移4位后变为16位,与后续的 int16_t (16位有符号整数)匹配,充分利用16位数据的动态范围。
- 同时,左移操作可放大采样值的量化精度,避免后续计算中的精度损失。
(3)转换为有符号整数( int16_t )
- 最终结果转换为16位有符号整数,符合交流电压“正负交替”的特性,便于后续控制算法(如锁相环、电压环调节)直接使用。
3. 与维也纳PFC的适配性
- 维也纳PFC需要精确获取输入电压的相位、幅值和极性,用于正弦波电流跟踪、功率因数校正等控制逻辑。
- 经上述处理后,采样值直接反映交流电压的瞬时值(正负对应电压极性,大小对应幅值),无需额外转换即可参与控制计算。
在三相维也纳PFC的ADC采样处理中,左移位数(3位还是4位)取决于ADC的位数和期望的输出位宽匹配,核心是为了将ADC的采样范围映射到目标有符号整数的量程内。
具体分析左移位数的选择:
假设场景:
- 通常ADC为12位(采样值范围0~4095,即 0x000 ~ 0xFFF )。
- 目标是转换为16位有符号整数( int16_t ,范围-32768~32767)。
1. 左移4位的逻辑:
12位ADC的最大值为4095( 0xFFF ),左移4位后为 0xFFF0 (65520),减去32768后得到范围为 -32768~32752 ,刚好接近 int16_t 的满量程(-32768~32767),能充分利用16位有符号数的动态范围。
2. 若左移3位:
12位ADC最大值左移3位后为 0x7FF8 (32760),减去32768后得到范围为 -32768~-8 ,此时正向范围被严重压缩(只能到-8),无法表示正电压,显然不符合交流电压正负交替的特性。
结论:
左移位数的核心是将ADC的无符号采样范围(如12位)通过移位扩展到16位有符号整数的量程,确保正负半周的电压都能被完整表示。
- 12位ADC对应左移4位( 12 + 4 = 16 ),刚好匹配16位输出。
- 若左移3位,会导致正向电压无法正确映射,因此不适用。
实际中,左移位数需根据ADC位数(如10位ADC可能左移6位)灵活调整,核心是满足“量程匹配”和“正负对称”。
总结:该代码本质是将单极性ADC采样值转换为有符号交流电压信号:通过左移调整位宽,减去偏置对应的中间值消除直流分量,最终得到符合控制需求的正负交替信号,为维也纳PFC的电压环、相位检测等核心逻辑提供准确的原始数据。





