1、一、电流采样的电路原理图1I_U:U相电流检测信号端(输出),电流传感器采样,-4V - +4V对应电流传感器量程电流。-电压代表U相电流负半周,+电压代表U相电流正半周,0v为0电流。H2: 连接到DSP的ADC模块,ADC的输入电压(电压范围不超过0 +3V)。图1 是霍尔电流传感器的输出进ADC前的调理电路,假设输出输入关系为:VH2 = k*VI_U + 1.5 (k为负值)。图2H2接到DSP的ADCINA5引脚调理电路关系:VH2 = k*VI_U + 1.5 (k为负值)则ADC的输入0V +1.5V 代表U相电流的正半周, +1.5V +3V代表U相电流的负半周, +1.5V为
2、0电流。一、电流采样的电路原理二、ADC模块采样在程序” f280 xileg_vdc电流采样程序.c”中SMODE_SEL为1,表示ADC同步采样ADCINAx和ADCINBx。在同步采样情况下,ADCCHSELSEQ1和ADCCHSELSEQ2寄存器的“CONV00 CONV07”的值决定16个结果寄存器ADCRESULT0 ADCRESULT15存放的是哪个ADC输入端的转换结果。CONV00决定ADCRESULT0和ADCRESULT1,CONV01决定ADCRESULT2和ADCRESULT3, ,CONV06决定ADCRESULT12和ADCRESULT13,CONV07决定ADC
3、RESULT14和ADCRESULT15。二、ADC模块采样上图表明CONVnn的值对应的ADC输入端口二、ADC模块采样在程序中,指定了P-ChSelect = 5,则CONV00 值为5,表示ADC同步采样ADCINA5和ADCINB5,将ADCINA5端口的转换结果存在ADCRESULT0,将ADCINB5端口的转换结果存在ADCRESULT1。二、ADC模块采样根据CMD配置文件可知,ADCRESULTn在2808的地址范围为:0 x7108 0 x7117,ADC结果存在ADCRESULTn的高12位二、ADC模块采样2047 = 0 x07FF, 2048 = 0 x0800, 4
4、095 = 0 x0FFF图3从图3可知,当ADCINA5 的输入为0V +1.5V 时,ADC结果为0 2047。输入为+1.5V +3V 时,ADC结果为2048 4095ADCLO接模拟地ADCINA5的结果存在ADCRESULT0的高12位,前面提到运放电路的关系是:VH2 = k*VI_U + 1.5 (k为负值), ADCINA5的输入0V +1.5V 代表U相电流的正半周, +1.5V +3V代表U相电流的负半周。所以ADCRESULT0的值0 x0000 0 x7FF0代表U相电流的正半周, 0 x8000 0 xFFF0代表U相电流的负半周,0 x8000为0电流。三、程序解
5、析void F280X_ileg2_dcbus_drv_read(ILEG2DCBUSMEAS *p) int16 DatQ15; int32 Tmp; / Wait until ADC conversion is completed while (AdcRegs.ADCST.bit.SEQ1_BSY = 1) ; DatQ15 = AdcRegs.ADCRESULT00 x8000; Tmp = (int32)p-ImeasAGain*(int32)DatQ15; p-ImeasA = (int16)(Tmp13); p-ImeasA += p-ImeasAOffset; p-ImeasA
6、*= -1; AdcRegs.ADCTRL2.all |= 0 x4040; /Reset the sequence 等待ADC转换结果三、程序解析int16 DatQ15;DatQ15 = AdcRegs.ADCRESULT00 x8000; DatQ15 =0 x8000 0 xFFF0 =0 x0000 0 x7FF0 = ADCRESULT00 x0000 0 x7FF00 x8000 0 xFFF00 x80000 x80000 x8000DatQ15 为16位有符号整型,高1位为符号位,低15位表示数值,所以可直接用Q15格式来定标。DatQ15 值为IQ15(-1) IQ15(1
7、)。IQ15(-1) IQ15(0)IQ15(0) IQ15(1)因为运放电路关系假设为:y = kx + 1.5(k为负值),所以ADCRESULT0的值0 x0000 0 x7FF0代表电流的正正半周,0 x8000 0 xFFF0代表电流的负负半周。因此执行” DatQ15 = AdcRegs.ADCRESULT00 x8000;”语句后, DatQ15 的值0 x8000 0 xFFF0( IQ15(-1) IQ15(0) )代表电流的正正半周, 0 x0000 0 x7FF0 (IQ15(0) IQ15(1))代表电流的负负半周。代表电流的正正半周代表电流的负负半周三、程序解析int
8、16 ImeasA;p-ImeasA *= -1; Tmp = (int32)p-ImeasAGain*(int32)DatQ15; p-ImeasA = (int16)(Tmp13); p-ImeasA += p-ImeasAOffset; ImeasAGain = 0 x1FFF (Q13格式),ImeasAOffset = 0 x01B5 (Q15格式)。上述3行代码用于AD结果校正。ImeasA近似等于DatQ15。DatQ15的值IQ15(-1) IQ15(0)代表电流的正半周,IQ15(0) IQ15(1)代表电流的负半周。为了使为了使ImeasA的值的值IQ15(-1) IQ15
9、(0)代表电流的负半周,代表电流的负半周, IQ15(0) IQ15(1)代表电流的正半周,所以代表电流的正半周,所以ImeasA的值要乘的值要乘 - -1,也就是语句,也就是语句“p-ImeasA *= -1; ”中点采样ADCTRL2_INIT_STATE = 0 x0100 ,第8位为1,表明EPWMxSOCA脉冲触发ADC采样中点采样SOCASEL值为2,表明在TBCTR = TBPRD时产生EPWMxSOCA脉冲从而触发ADC采样。中点采样在程序中,计数模式为增减计数,所以TBCTR = TBPRD(TBPRD是最大计数值)时,为一个计数周期的中点,此时,ADC被触发,开始采样并转换
10、结果 在计数周期的中点时,已经没有开关的变化,一边桥臂全开,一边全关,合成0矢量。此时,占空比作用下的电流最平稳,干扰最小,电流进入续流状态。 相比在计数周期的零点采样,中点采样的滞后最小。为什么选择中点采样中点采样 是第是第1次中断程序开始的时候次中断程序开始的时候1.1是程序执行完是程序执行完pwm1.update(&pwm1);的时候,假设这时中断程序已运行的时候,假设这时中断程序已运行48us1.148usTBPRD = 5000,计数模式为增减计数一个计数周期为:(5000100MHZ )2 = 100us100us中断频率为10KHZ,每隔100us中断一次100us第1次中断48us100us第2次中断52us52us48us100us第3次中断52us100us上图红色箭头处就是ADC中点采样的地方,此时采样到的电流是第1次中断程序里占空比作用下的电流。在第2次中断程序的开始调用F280X_ileg2_dcbus_drv_read函数来读取ADC采样到的电流。