当前位置:首页 > > 电源漫谈


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的电压环、相位检测等核心逻辑提供准确的原始数据。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭