我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
10#:
你使用的是哪颗芯片?
如果A0是对的,B0结果为0,是否确定B0通道的信号存在?
如果采集A1/B1呢?
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
Bei Su:
回复 10#:
用的是28335,即便不加信号,A0貌似也会有一个随机值,并且其它通道都有,A0加输入信号以后就能正常采集,但是B0加了信号以后也还是显示0,。
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
Bei Su:
回复 Bei Su:
B1通道也不正常,B1通道的的数值也不变化,是个固定的值,加不加输入信号都是这样,不会是B通道对应的这个AD给坏掉了吧,还是我里面有些东西出了问题没有复位?
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
Bei Su:
回复 10#:
求解答啊,怎么弄都不行,我看了内核也上电了啊,怎么就是不行呢
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
Bei Su:
回复 10#:
可不可以留个QQ什么的,这样我有问题可以咨询下,不然这一个问题要等待这么长时间。
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
Bei Su:
在线等求解答啊
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
10#:
1. 你是如何判断B0/B1..等是不对的,对应的寄存器名分别是什么?
2. 交换一下这两句话的顺序试试:AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;和AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
3. 将AdcRegs.ADCMAXCONV.all = 0x0007;的0x0007改成0x0001测试一下;
4. 将四个ADCCHSELSEQ2换成ADCCHSELSEQ3看看。
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
SANPIAN:
请问,问题解决了吗?我遇到了类似的情况,AD值始终为0,请问问题是怎么回事?
我现在AD采用的是级联同步采样模式,通道A0的结果寄存器是正常的,但是通道B0的结果寄存器值始终为0
void ADCInit(void)
{
// Configure ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //adc内部分频4位现在4分频12.5Mhz
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //可以再进行一次额外的二分频,为0则不分频
//一次ADC转换的周期
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 非级联模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //1 级联模式
//顺序采样模式
//AdcRegs.ADCTRL3.bit.SMODE_SEL=0
//同步采样模式(考虑到可同时采样输入电压和电流)
AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
//最大转换通道数,采样3个变量,每个采4次
AdcRegs.ADCMAXCONV.all = 0x0007; // Setup 2 conv's on SEQ1
//采用启动停止方式,因为只是每个载波频率采样而已 AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//输入电压和电流:adcA0和adcB0
//输出电压和电流:adcA1和adcB1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; // AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; // AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x1;
//允许epwm事件触发adc
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)使能seq1中断
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
}
这是AD初始化程序
请问这是怎么回事,应该怎么解决
tabletennis ye:
回复 SANPIAN:
请问你的问题解决了吗?我也遇到了同样的问题,级联模式下有一块AD的寄存器值全为0。期待你的解答,非常感谢!