
DSP电流采样程序解析1课件.ppt
14页一、电流采样的电路原理图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为0电流一、电流采样的电路原理二、ADC模块采样在程序” f280xileg_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决定ADCRESULT14和ADCRESULT15二、ADC模块采样上图表明CONVnn的值对应的ADC输入端口二、ADC模块采样在程序中,指定了P->ChSelect = 5,则CONV00 值为5,表示ADC同步采样ADCINA5和ADCINB5,将ADCINA5端口的转换结果存在ADCRESULT0,将ADCINB5端口的转换结果存在ADCRESULT1二、ADC模块采样根据CMD配置文件可知,ADCRESULTn在2808的地址范围为:0x7108 – 0x7117,ADC结果存在ADCRESULTn的高12位二、ADC模块采样2047 = 0x07FF, 2048 = 0x0800, 4095 = 0x0FFF图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的值0x0000 ~ 0x7FF0代表U相电流的正半周, 0x8000 ~ 0xFFF0代表U相电流的负半周,0x8000为0电流三、程序解析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.ADCRESULT0^0x8000; Tmp = (int32)p->ImeasAGain*(int32)DatQ15; p->ImeasA = (int16)(Tmp>>13); p->ImeasA += p->ImeasAOffset; p->ImeasA *= -1; …… …… …… …… …… …… …… …… …… AdcRegs.ADCTRL2.all |= 0x4040; //Reset the sequence } 等待ADC转换结果三、程序解析int16 DatQ15;DatQ15 = AdcRegs.ADCRESULT0^0x8000; DatQ15 =0x8000 ~ 0xFFF0 =0x0000 ~ 0x7FF0 = ADCRESULT00x0000 ~ 0x7FF00x8000 ~ 0xFFF0^0x8000^0x8000^0x8000DatQ15 为16位有符号整型,高1位为符号位,低15位表示数值,所以可直接用Q15格式来定标。
DatQ15 值为IQ15(-1) ~ IQ15(1)IQ15(-1) ~ IQ15(0)IQ15(0) ~ IQ15(1)因为运放电路关系假设为:y = kx + 1.5(k为负值),所以ADCRESULT0的值0x0000 ~ 0x7FF0代表电流的正正半周,0x8000 ~ 0xFFF0代表电流的负负半周因此执行” DatQ15 = AdcRegs.ADCRESULT0^0x8000;”语句后, DatQ15 的值0x8000 ~ 0xFFF0( IQ15(-1) ~ IQ15(0) )代表电流的正正半周, 0x0000 ~ 0x7FF0 (IQ15(0) ~ IQ15(1))代表电流的负负半周①代表电流的正正半周②代表电流的负负半周三、程序解析int16 ImeasA;p->ImeasA *= -1; Tmp = (int32)p->ImeasAGain*(int32)DatQ15; p->ImeasA = (int16)(Tmp>>13); p->ImeasA += p->ImeasAOffset; ImeasAGain = 0x1FFF (Q13格式),ImeasAOffset = 0x01B5 (Q15格式)。
上述3行代码用于AD结果校正ImeasA近似等于DatQ15DatQ15的值IQ15(-1) ~ IQ15(0)代表电流的正半周,IQ15(0) ~ IQ15(1)代表电流的负半周为了使为了使ImeasA的值的值IQ15(-1) ~ IQ15(0)代表电流的负半周,代表电流的负半周, IQ15(0) ~ IQ15(1)代表电流的正半周,所以代表电流的正半周,所以ImeasA的值要乘的值要乘 - -1,也就是语句,也就是语句“p->ImeasA *= -1; ”中点采样ADCTRL2_INIT_STATE = 0x0100 ,第8位为1,表明EPWMxSOCA脉冲触发ADC采样中点采样SOCASEL值为2,表明在TBCTR = TBPRD时产生EPWMxSOCA脉冲从而触发ADC采样中点采样在程序中,计数模式为增减计数,所以TBCTR = TBPRD(TBPRD是最大计数值)时,为一个计数周期的中点,此时,ADC被触发,开始采样并转换结果 在计数周期的中点时,已经没有开关的变化,一边桥臂全开,一边全关,合成0矢量此时,占空比作用下的电流最平稳,干扰最小,电流进入续流状态。
相比在计数周期的零点采样,中点采样的滞后最小为什么选择中点采样中点采样 ①是第是第1次中断程序开始的时候次中断程序开始的时候1.1是程序执行完是程序执行完pwm1.update(&pwm1);的时候,假设这时中断程序已运行的时候,假设这时中断程序已运行48us①1.148usTBPRD = 5000,计数模式为增减计数一个计数周期为:(5000÷100MHZ )×2 = 100us100us中断频率为10KHZ,每隔100us中断一次100us第1次中断48us100us第2次中断②52us52us48us100us第3次中断③52us100us上图红色箭头处就是ADC中点采样的地方,此时采样到的电流是第1次中断程序里占空比作用下的电流在第2次中断程序的开始调用F280X_ileg2_dcbus_drv_read函数来读取ADC采样到的电流。












