情况描述:
(1)之前采用28335控制PMSM,我用的霍尔电流传感器量程是【-50A,50A】,传感器对应输出【-4V,4V】电压,我外部作了一个电平转换电路,将【-4V,4V】转换成【0V,3V】用以28335端口进行AD采样。程序中的这块#define BASE_CURRENT 10我也没有改,采样语句也没在例程的基础上进行更改:
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; 速度电流双闭环PI控制,发现实际速度跟踪指令速度效果良好。
(2)昨天偶尔逛论坛,看到有位大神说, BASE_CURRENT的定义数值应该是电流传感器所能测出的最大电流,也即对于传感器: #define BASE_CURRENT 50 ,这样的话clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909;这条语句也需要改了,因为现在的基准值是50A了。我是这样想的,不管怎么定义,我首先需要明确我的电流的真实值是多少,那就推理一遍呗:从两头考虑:【-50A,50A】变换成【0,4096】(线性对应),那么若采样数字量为x,则实际电流应该为(x*0.00024414-0.5)*100,当然offset差不多就是0.5,校准的事情先不考虑,,就是(x*0.00024414-offset)*100,这是真实值,基准值是50,考虑到3到3.3的一个系数0.909,那么标幺值应该是(x*0.00024414-offset)*2*0.909
(3)说到这里我也就明白了,TI官方例程为使用者考虑的十分便利,也就是说只要你把 BASE_CURRENT 定义成你所使用的电流传感器的最大量程值,主程序中的这句话clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909是不需要改动的。这个我理解了。那么问题又来了,(1)中所叙述的#define BASE_CURRENT 10和clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909肯定是不对应的,这时候为什么对于速度控制,跟踪效果还那么好呢?
(4)讲的这里我又进行了思考,主程序中好像没有一条语句出现过BASE_CURRENT (无感器程序中有,是有关滑膜速度辨识模块的,但我这里带传感器不用辨识,这些语句被我删了,这里说的是有传感器速度电流双闭环PI控制) 。也就是说,BASE_CURRENT 是不是对于控制算法根本就没用,它存在的意义就是便于我们怎么根据采样值,让我们知道实际值是多少。实际上BASE_CURRENT 你想定义多大就多大,程序语句clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909;不用变
(5)如果(4)说的是对的,我们再看回(1),刚才说过了(1)中#define BASE_CURRENT 10和clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909是不对应的,那么我这样改:define BASE_CURRENT 10和clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909*5,即还把10当做基准值,(这时候可能会出现clarke1.As计算得到的标幺值>1,但假如是所用电机功率很小不会超过10A,或者空载运行。)这样的编程语句是正确的吗?假如是正确的,那么基准值是10,采样结果乘以5和不乘以5速度跟踪都能实现,岂不是有点不对劲?
最近被这个标幺的事情搞得有点迷了,越想越糊涂。以上的五条,恳请大神予以指教,指点迷津。谢谢。