电流检测AD采样值处理的高效方法
在电机控制软件的编写过程中,经常要处理由AD采样回来的电流值。由于电流有正有负,电流传感器输出地电压也是以0为中点,而一般AD的输入只能为正电压,所以电流传感器出来的电压量需要通过加减运算电路加上一个偏移值再送入AD,以保证进入AD的值恒为正。
这里AD以TI的2812的片内AD为例,其输入范围是0~3V,电流传感器以LEM的LA25NP为例,量程25A,通常采用的电路是将LEM传感器的输出经过一个100欧的电阻接到地,获得一个以0为中点的电压信号,然后在送入比例运算电路,在比例运算电路的另一个输入端加入1.5V的偏移量,这样在满量程范围内使输入AD的电压信号始终保持在0~3V之内。电流为0的时候送入AD的电压是1.5V
在程序中进行电流运算时,一般要把AD采样结果取回来,然后再减去1.5V的偏移值,这样的到一个有符号数,然后再进行运算。
今天在阅读TI提供的电机驱动库代码时,发现里边使用了一种高效的处理方法,代码很简单,是这样的:
DatQ15 = AdcRegs.ADCRESULT0^0x8000;
2812的AD是12位的,AD采样结果存储在高12位。因此当AD满量程时,ADCRESULT0中的值是0xfff0。
这段代码仅仅通过一个按位异或运算就将AD的值减去了1.5V的偏移,并变成了有符号数。
至于具体为什么,举例说明,当电压为3V时,采样值是0xfff0,异或运算后高位的1变成了0,其余位不变,其结果是7ff0,如果将最高位看做符号位,那么有效位是11位。
|