您好,
也许这是基本问题。 我在网上寻找一些答案,但我没有找到答案。
有多种类型的中断,ADC,ePWM和ePWM_TZ中断。 它们之间有何区别? 我应该选择哪一种?
我用过一次ADCA1和一次EPWM1_TZ,现在我回头看,我感到困惑。 有人能帮我理解吗?
例如,我需要从下面的列表中选择一个。 我为什么要选择它?
ADCA1中断
EPWM1_TZ中断
EPWM1中断
谢谢!
Emily
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.
您好,
也许这是基本问题。 我在网上寻找一些答案,但我没有找到答案。
有多种类型的中断,ADC,ePWM和ePWM_TZ中断。 它们之间有何区别? 我应该选择哪一种?
我用过一次ADCA1和一次EPWM1_TZ,现在我回头看,我感到困惑。 有人能帮我理解吗?
例如,我需要从下面的列表中选择一个。 我为什么要选择它?
ADCA1中断
EPWM1_TZ中断
EPWM1中断
谢谢!
Emily
您好,Emily:
[报价用户="hongmei Wan "]
ADCA1中断
EPWM1_TZ中断
EPWM1中断
[/引述]
以上3个中断用于3个不同的目的,即:
ADCA1中断-基于转换的ADC中断。
EPWM1_TZ中断- ePWM tripzone中断
EPWM1中断-基于设置频率的ePWM中断。
[引用user="hongmei Wan ]例如,我需要从以下列表中选择一个。 我为什么要选择它?[/QUOT]
要求是什么?
此致,
Gautam
谢谢,Gautam。
我知道这个名字,但我不知道何时使用它。
现在我正在使用ADCA1中断。 我问我为什么使用它,我不得不说我不知道。 请问您能在什么条件下使用它吗?
我的PWM频率为300kHz。 三个板交错。 共感应3个电流,共2个电压,每个温度2个(共6个)。
我只会为每个板写入一个中断函数。 在 __interrupt void ADC_ISR(void)函数中,主要是用于降压-升压转换器的闭环计算。
在以下代码中,
我认为是:EPwm10Regs.ETSEL.bit.SOCASEL = 1;-> 设置何时(EPWM10的连接=0)采样和开始转换, ADCARegs.ADCINTSEL1N2.bit.INT1SEL = 5;-> EOC5触发ADCINT1。 我认为它将转到 SOC5末尾的__interrupt void ADC_ISR(void)的中断函数 ,因为我给出了AdcdRegs.ADCSOC5CTL.bit的设置。 但是 ,当AdcaRegs.ADCINTSEL1N2.bit.INT1SEL的值高于2时,它不会进入__interrupt void ADC_ISR(void)。
我理解的是,如果我需要SOC15,它将 进入 __interrupt void ADC_ISR(void)以在SOC15的末尾运行代码,因此AdcaRegs.ADCINTSEL1N2.bit.INT1SEL将被设置为15。 否则,它不会完成转换。 不管 AdcaRegs.ADCINTSEL1N2.bit.INT1SEL的值是什么,似乎所有SOC都将完成。 为什么? 我需要提供什么价值?
__interrupt void ADC_ISR(void)
{
I= AdcaResultRegs.ADCRESULT0;
J= AdcbResultRegs.ADCRESULT0;
k= AdccResultRegs.ADCRESULT0;
M= AdcaResultRegs.ADCRESULT1;
N= AdcbResultRegs.ADCRESULT1;
t0= AdcdResultRegs.ADCRESULT0;
t0= AdcdResultRegs.ADCRESULT1;
t0= AdcdResultRegs.ADCRESULT2;
t0= AdcdResultRegs.ADCRESULT3;
t0= AdcdResultRegs.ADCRESULT4;
t0= AdcdResultRegs.ADCRESULT5;
}
void配置ADC(void)
{
EALLOW;
// ADC-A
AdcaRegs.ADCCTL2.bit.prescale =6; //将ADCCLK分配器设置为/4;0110 ADCCLK =输入时钟/ 4.0
AdcaRegs.ADCCTL2.bit.resolution = 0; // 12位分辨率
AdcaRegs.ADCCTL2.bit.SIGNALMODE = 0; //单端通道转换(仅限12位模式)
AdcaRegs.ADCCTL1.bit.INTPULSEPOS =1; //将脉冲位置设置为晚期
ADcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; //打开ADC电源
// ADC-B ADC-C ADC-D的设置,与ADC-A相同
DELAY _US (1000);
}
void SetupADCEpwm (void)
{
EALLOW;
//SOC0,电感器电流IL
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; // SOC0将转换引脚A4,BIUA的电感器电流
AdcaRegs.ADCSOC0CTL.bit.ACQPS =14; //样例窗口是...?
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 4; // SOC0将转换引脚B4,BIU2的电感器电流
AdcbRegs.ADCSOC0CTL.bit.ACQPS =14; //示例窗口
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
ADccRegs.ADCSOC0CTL.bit.CHSEL = 4; // SOC0将转换引脚C4,BIU3的电感器电流
ADccRegs.ADCSOC0CTL.bit.ACQPS =14;// 示例窗口
ADccRegs.ADCSOC0CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
//SOC1,蓄电池电压
ADcaRegs.ADCSO1CTL.bit.CHSEL = 14; //SOC1将转换引脚ADCIN14,VB1
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14; //示例窗口
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
ADcbRegs.ADCSOC1CTL.bit.CHSEL = 15; //SOC1将转换引脚ADCIN15,VB2
AdcbRegs.ADCSOC1CTL.bit.ACQPS = SAH_TIME; //示例窗口
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
//温度感应
AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0; // SOC0将转换引脚D0,BIU1的温度
AdcdRegs.ADCSOC0CTL.bit.ACQPS =14;// 样例窗口
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcdRegs.ADCSOC1CTL.bit.CHSEL = 1; // SOC1将转换引脚D1,BIU1的温度
AdcdRegs.ADCSOC1CTL.bit.ACQPS = 14; //示例窗口
AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcdRegs.ADCSOC2CTL.bit.CHSEL = 2;// SOC2将转换引脚D2,即BIU2的温度
AdcdRegs.ADCSOC2CTL.bit.ACQPS = 14; //示例窗口
AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcdRegs.ADCSOC3CTL.bit.CHSEL = 3; // SOC3将转换引脚D3,即BIU2的温度
AdcdRegs.ADCSOC3CTL.bit.ACQPS = 14; //示例窗口
AdcdRegs.ADCSOC3CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcdRegs.ADCSOC4CTL.bit.CHSEL = 4; // SOC4将转换引脚D4,即BIU3的温度
AdcdRegs.ADCSOC4CTL.bit.ACQPS = 14; //示例窗口
AdcdRegs.ADCSOC4CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
AdcdRegs.ADCSOC5CTL.bit.CHSEL = 5; // SOC5将转换引脚D5,BIU3的温度
AdcdRegs.ADCSOC5CTL.bit.ACQPS = 14; //示例窗口
AdcdRegs.ADCSOC5CTL.bit.TRIGSEL = 0x17; // ePWM10 SOCA上的触发器
// SOC结束触发中断标志
ADcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; // EOC5是ADCINT1的触发器
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //启用INT1标志
AdcaRegs.ADCINTFLGCLL.bit.ADCINT1 =1; //确保INT1标志已清除
EDIS;
DELAY _US (1万);
}
void InitEPwm10 (void)
{
EALLOW;
EPwm10Regs.TBCTL.bit.CTRMODE = 3; //现在冻结计数器
EPwm10Regs.TBPRD = SW_PRD; //与PWM1相同的期间
EPwm10Regs.TBCTL.bit.PHSEN = 1; //启用相位加载
EPwm10Regs.TBPHS.bit.TBPHS = 0; //相位
EPwm10Regs.TBCTR = 0x0000; //清除计数器
EPwm10Regs.TBCTL.bit.HSPCLKDIV = 0; //最大速度100MHz;设置1/2 SYSCLK的比率
EPwm10Regs.TBCTL.bit.CLKDIV = 0; //与HSPCLKDIV相同???
EPwm10Regs.TBCTL.bit.SYNCOSEL = 0;//sync in clock signal ??
EPwm10Regs.ETSEL.bit.SOCAEN = 0; //禁用组上的SOC
EPwm10Regs.ETSEL.bit.SOCASEL = 1;//2; //选择SOCA开- 1:零,2:句点,3:零或句点
//EPwm10Regs.ETSEL.Bit.SOCAEN = 1; //启用ADC开始转换A (EPWMxSOCA)脉冲
EPwm10Regs.ETPS.bit.SOCAPRD = 1; //在第一个事件上生成脉冲
EDIS;
//启动ePWM 10以开始ADC采样和中断
EPwm10Regs.ETSEL.bit.SOCAEN = 1; //启用ADC开始转换A (EPWMxSOCA)脉冲
EPwm10Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN; //启用上/下模式
}
您好,Hongmei,
由于ADCA只进行2次转换(SOC0和SOC1),因此从不触发ADCA-SOC2到ADCA-SOC5。 因此,如果将AdcaRegs.ADCINTSEL1N2.bit.INT1SEL设置为2到5 (或更高),则不会发生任何情况。
您可以触发:
使用 AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 5中断ADCD1
或
如果通过ADCA SOC5将虚拟样本添加到ADCA SOC2,则中断ADCA1
非常感谢,Devin。
真有意思。 我从来不知道。
1.从哪里 可以获得此信息“ADCA只进行2个转换(SOC0和SOC1)”? Interrupt ADCD1进行了多少次转换?
2. 使用 AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 5中断ADCD1 ,或者 如果通过ADCA SOC5向ADCA SOC2添加虚拟样本,中断ADCA1, 哪一个更好?
3. 当AdcaRegs.ADCINTSEL1N2.bit.INT1SEL=0时,这是否意味着在SOC0的末尾,我们只能得到结果0并且 程序进入中断?
如果 AdcdRegs.ADCINTSEL1N2.bit.INT1SEL =5,则可以通过result5获得result0?
谢谢!