本帖最后由 Angus 于 2024-9-12 14:00 编辑
电压的基准值是 0.1V。最大值是 16383,若超过此值, 乘4后大于等于65536做坐标旋转会溢出,即最大工作电压是 1638.3V。 在ADC中断里, 读出母线电压ADC值,就换计算出0.1V 的数值,然后赋给变量 V_BUS_0v1
具体代码如下: 母线电压,电路上是俩220K 串4K1电阻分压后到ADC 引脚,所以分压比 (220*2+4.1)/4.1, 12位ADC 参考电压是5V, 所以 ADC值换算成电压公式是:
电压 = 5V * ADC值 / 4096 再乘分压比(444.1/4.1), 这个公式右边再乘10 就是0.1V数值,简化后 = ADC值*5416/4096 。代码中 355 行, 加1024是四舍五入,右移 11位是除 2048,少除了2后面补上。
把当前电压 ADC 值看作 X,
457行是求出了 2X。
458行是 2X + 2Y, 这是母线电压的4倍, 成了 25mV 的数值, 用25mV数值去做 SVPWM计算, 哪怕工作电压不到10V,也有足够的计算精度。最大电压 1638.3V 的数据乘4后得65532, 坐标变换也不会溢出。
459行是 (2X + 2Y)/4 = (X+Y)/2, 这是一阶低通滤波 Y(n) = [Y(n-1) + X(n)]/2。
SVPWM 能输出的无失真相电压,最大值是 0.577倍的母线电压,再大, 就是削顶的正弦电压了。 263行,选择一个相电压上限值。
265行, 增加17位小数后,赋值给 Vq_Limit_f17,Vd_Limit_f17 (后缀 _f17 表示17位小数) 用于电流PI 运算结果的上限值。 电流PI 运算结果有17位小数, 电压上限在这里先增加17 小数,比在PI 运算结果限幅时再增加17位小数,节省代码。
|