This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/DRV8301-69M-KIT:PM 无传感器(构建级别2):ADC 能够读取组 A 中的值、但无法读取组 B 中的值(DRV8301-69M-KIT)

Guru**** 2606725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/684048/ccs-drv8301-69m-kit-pm-sensorless-build-level-2-the-adc-is-able-to-read-the-values-from-the-group-a-but-it-is-not-able-to-read-the-values-from-the-group-b-drv8301-69m-kit

器件型号:DRV8301-69M-KIT

工具/软件:Code Composer Studio

您好!

我正在尝试使用卡上的 ADC 从 A 相和 B 相读取电流值。 但是、我只能获得 A 相(ADC 组 A)的电流。 ADC 组 B 的输出值都等于零。 我还使用示波器检查每个相位中是否有电流、情况就是这样。

#ifndef __F2806XILG_VDC_H__
#define __F2806XILG_VDC_H__

#include "f2806xbmsk.h"

/*-------------------------------------------------------
ADC 初始化宏定义-------------------------------------------------------
*/


#define CPU_CLOCK_SPEED 12.500L// 12.5nS
#define ADC_usDELAY 10000L
#define DELAY_US (a) DSP28x_usDelay ((( long double) a * 1000.0L)/(long double) cpu_clock_speed)- 9.0L)/5.0L)

extern void DSP28x_usDelay (unsigned long Count);


#define ADC_MACRO ()\
delay_US
(adc_usDELAY);\
AdcRegs.ADCCTL1.all=ADC_RESET_FLAG;\
asm (" NOP ");\
asm (" NOP ");\

EALLOW;\
AdcRegs.ADCCTL1.bit.ADCBGPWD= 1;//加电带隙*\

DELA_US (ADC_USDELAREGL.ADCCTL1.bit.ADCBGPWD = 1;\ ADCLA.ADCR0.ADCR1.ADCR1.ADCR1.ADCR0.ADCR1.ADCR0.RIST0= 1;\ ADCR0.ADCR1.ADCR1.ADCR0.ADCR1.ADCR0.ADCR1.ADCR1.ADCR1.ADCR1.ADCR0.ADCR0.ADCR0.ADCR0.ADCR


/*上电基准*/\
AdcRegs.ADCCTL1.bit.ADCPWDN= 1;/*为 ADC 的其余部分加电*/\
AdcRegs.ADCCTL1.bit.ADCENABLE= 1;//启用 ADC */\

\ asm (" RPT#100 || NOP");\AdcRegs.ADCLA.1=ADCCTL1.ADCCEST.ADC.E1.ADAPS.ADAPS.E1.DEPS.ADCMP0




;\ADCMP0

信道选择***** /\

\\\\\ AdcRegs.ADCSO0CTL.bit.CHSEL
= 1;/* 1选择:ADC A1->相位 U 电流*/\
AdcRegs.ADCOC0CTL.bit.TRIGSEL= 5;//设置 SOC0在 EPWM1A 上启动触发器,因为在 SOC0中循环
;然后将 ADC0转换为 ADC0位6。* ADCCOL/*将 SOC0 S/H 窗口设置为7个 ADC 时钟周期,(6个 ACQPS 加1)*/\
\\
AdcRegs.ADCSO1CTL.bit.CHSEL= 9;// 9选择:ADC B1->相位 V Current*/\
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;* ADCSOC1CL.ADC10


= 6位;ADCSOC10选择* ADC1CL.ADCSRC.ADC1CL.ADC1CL=6位 ADC B2->DC 总线电压*/\
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;\
AdcRegs.ADCSO2CTL.bit.ACQPS= 6;\
AdcRegs.ADCOC3CTL.bit.CHSEL
= 15;// ChChSelect:ADC B7->V Regs.ADCSRC.6*= ADCSOC.TCL.ADC3CTS.ADCSRP.ADC=6
;ADCC.ADCC.TCCS.bit.ADCTRS.ADCTRL
= 6;ADCSRC.ADCC.E= ADC32.ADC32.ADCC.TCL.ADCSRC.ADCC.E= ADC32.ADCC.E= ADC32.ADCC.TCL.ADCTI.ADCC.TC.

ADC A7->V 相位 B */\
AdcRegs.ADCSO4CTL.bit.TRIGSEL = 5;\
AdcRegs.ADCSO4CTL.bit.ACQPS= 6;\
AdcRegs.ADCOC5CTL.bit.CHSEL
= 12;// ChSelect:ADC B4->V Regs.ADCSRC.6*

= ADCCO5CTL.ADCMCTRS.C=6;ADCCOM.ADCCOCL.ADC5CTRS.bit.ADCMCTRS=6;ADCMCTL.ADCTRS.CMCTRS.CL.CTRS=ADCTRS.ADCTRS.CTRS=6

ADC A2->低侧直流总线返回电流*/\
AdcRegs.ADCSOC6CTL.bit.TRIGSEL= 5;\
AdcRegs.ADCSOC6CTL.bit.ACQPS= 6;\
\
EDIS;\

\\\
/*为 EPWM1的时基设置启用 CNT_ZERO 的事件触发器*/\
EPwm1Regs.ETSEL.bit.SOCAEN = 1; /*启用 SOCA */\
EPwm1Regs.ETSEL.bit.SOCASEL = 1;/*为 SOCA 启用 CNT_ZERO 事件*/\
EPwm1Regs.ETPS.bit.SOCAPRD = 1; /*在发生第一个事件时生成 SOCA */\
EPwm1Regs.ETCLR.bit.SOCA = 1; //清除 SOCA 标志*/


#endif //__F2806XILG_VDC_H__ 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您用于读取 B 相的代码行是什么? 您是否正在读取正确的结果寄存器?

    肖恩
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在文件"f2806xileg_VDC_PM.h"中用以下行初始化相位 B 电流的 ADC B:
    AdcRegs.ADCSOC1CTL.bit.CHSEL= 9;/*选择:ADC B1->相位 V 电流*/\
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;\
    AdcRegs.ADCSOC1CTL.bit.ACQPS= 6;\

    转换结果在文件"PM_Sensorless.c"中使用以下行进行调用:
    #ifdef F2806x_DEVICE_H
    //clarke1.as=-(((AdcResult.ADCRESULT0)*0.00024414-cal_offset_a)*2);//相位 A 电流。
    //clarke1.B=-(((AdcResult.ADCRESULT1)*0.00024414-cal_offset_B)*2);//相位 B 电流。
    clarke1.as=((AdcResult.ADCRESULT0)*0.00024414-cal_offset_a)*2);//相位 A 电流。
    clarke1.B=((AdcResult.ADCRESULT1)*0.00024414-cal_offset_B)*2);//相位 B 电流。
    #endif

    非常感谢你的帮助。