共2条
1/1 1 跳转至页
AD12 AD12转换中的一个超难问题,还请各位高手不吝赐教
问
AD12采用扩展模式,TA。OUT1的PWM控制采样信号(模式7),但在采样低于1/2参考电压的信号时会出现0800的干扰值,我用尽各种实验,仍不得要领,反正只要有低于1/2VREF的信号(不管是直流还是交流),但换到脉冲模式还可以,以下是一次采样的值,还请大虾指点,谢谢!
07a8 076f 0736 0800 06bf 0688 0656 061e 05ec 05c3 0599 056f 0545 0522 04f8 04d5 04ba 049c 0482 0468 044f 043a 0427 041c 040c 03fe 03fb 03f1 03e9 03eb 03f0 03f3 03f3 03ff 040e 041a 0429 0443 0456 0474 048f 04a8 04c5 04ea 0511 0800 055f 0584 05af 05d6 05fe 0633 0800 0693 06c2 06f2 071f 0751 078d 0800 07f5 082b 0864 089b 08d9 0912 0947 097e 09b6 09e6 0a13 0a44 0a73 0a9e 0ac6 0aee 0b14 0b37 0b59 0b7e 0b9b 0bbc 0bd4 0bea 0bff 0c13 0c25 0c32 0c3e 0c48 0c4d 0c53 0c59 0c5b 0c5c 0c5a 0c54 0c4b 0c3b 0c2b 0c22 0c0b 0bfc 0be2 0bc3 0ba7 0b89 0b69 0b46 0b20 0afc 0ad2 0aa9 0a7a 0a4b 0a21 09f2 09c2 0994 0966 0931 0905 08ce 089e 0868 0833 07f9 07c3 07b5 0800 0790 077a 0768 0753 0747 073e 0800 072e 0723 071e 0714 0713 070f 0708 0700 0700 06fb 06f7 06f5 06f5 0800 06f2 06f1 06f1 06f1 06f1 06f8 0800 06fb 0700 0704 0709 0710 071a 0800 0726 072c 0737 073e 074a 0753 0800 076e 0776 0780 078c 079b 07a4 0800 07bd 07c6 07d0 07d7 07e2 07ea 0800 0800 080e 081c 082f 0845 085d 0874 0888 089a 08ad 08c0 08ca 08d7 08df 08e8 08ee 08f3 08fa 0902 0908 090c 0912 0916 091a 091d 0920 0923 0924 0925 0926 0926 0925 0921 0923 0923 0922 091e 0918 0913 0911 090a 0904 08fe 08f6 08ef 08e4 08d9 08d1 08c8 08bc 08b0 08a7 0899 088f 0885 0878 0869 085e 0852 0847 083e 083a 082e 0825 081a 080f 0801 07f1 07e3 0800 答 1: 把程序贴上来让大家帮你看看。还有可能是硬件的问题。 答 2: 那你接0V会怎么样子啊? 答 3: 同样会有,这是AD转换的程序。
ADC12CTL0=REF2_5V+REFON+ADC12ON+ADC12OVIE+ADC12TOVIE;
ADC12IE=0X0000;
void StartAD(void)
{
unsigned int i;
for(i=0;i<256;i++)
{
ADarr[i]=0;
}
TACCTL1=OUTMOD_7;
TACCR0=128;
TACCR1=64;
ADC12CTL0|=ADC12ON+SHT0_1;
ADC12CTL1=CSTARTADD_2+SHS_1+ADC12DIV_1+ADC12SSEL_2+CONSEQ_2; ADC12MCTL2=0X02;
P6DIR=0xFB;
P6SEL=0x44;
ADC12CTL0|=ENC;
i=0;
TACTL=TACLR+MC_1; //TA计数时钟为TACLK,清除TAR,增计数 //启动TA
while(i<128){
ADC12IFG=0X0000; //清除中断标志
while((ADC12IFG & BIT2)==0X0000);
ADarr[i]=ADC12MEM2;
if(ADarr[i]==0x0800) _NOP();
i++;
}
ADC12IFG=0x0000;
ADC12CTL0&=~ADC12ON;
} 答 4: 我自己感觉是你设置的问题
你用错了 答 5: 不会吧?我调试了N次,有不是无法转换,就是在转换小于中间值的时候会出现几次0800,大于就没有。而转为脉冲模式就没有这种问题,很是蹊跷!是不是430 的硬件有问题?对了,AD在什么情况下会出现0800(中间值)的异常?是不是保持电路出问题了!
07a8 076f 0736 0800 06bf 0688 0656 061e 05ec 05c3 0599 056f 0545 0522 04f8 04d5 04ba 049c 0482 0468 044f 043a 0427 041c 040c 03fe 03fb 03f1 03e9 03eb 03f0 03f3 03f3 03ff 040e 041a 0429 0443 0456 0474 048f 04a8 04c5 04ea 0511 0800 055f 0584 05af 05d6 05fe 0633 0800 0693 06c2 06f2 071f 0751 078d 0800 07f5 082b 0864 089b 08d9 0912 0947 097e 09b6 09e6 0a13 0a44 0a73 0a9e 0ac6 0aee 0b14 0b37 0b59 0b7e 0b9b 0bbc 0bd4 0bea 0bff 0c13 0c25 0c32 0c3e 0c48 0c4d 0c53 0c59 0c5b 0c5c 0c5a 0c54 0c4b 0c3b 0c2b 0c22 0c0b 0bfc 0be2 0bc3 0ba7 0b89 0b69 0b46 0b20 0afc 0ad2 0aa9 0a7a 0a4b 0a21 09f2 09c2 0994 0966 0931 0905 08ce 089e 0868 0833 07f9 07c3 07b5 0800 0790 077a 0768 0753 0747 073e 0800 072e 0723 071e 0714 0713 070f 0708 0700 0700 06fb 06f7 06f5 06f5 0800 06f2 06f1 06f1 06f1 06f1 06f8 0800 06fb 0700 0704 0709 0710 071a 0800 0726 072c 0737 073e 074a 0753 0800 076e 0776 0780 078c 079b 07a4 0800 07bd 07c6 07d0 07d7 07e2 07ea 0800 0800 080e 081c 082f 0845 085d 0874 0888 089a 08ad 08c0 08ca 08d7 08df 08e8 08ee 08f3 08fa 0902 0908 090c 0912 0916 091a 091d 0920 0923 0924 0925 0926 0926 0925 0921 0923 0923 0922 091e 0918 0913 0911 090a 0904 08fe 08f6 08ef 08e4 08d9 08d1 08c8 08bc 08b0 08a7 0899 088f 0885 0878 0869 085e 0852 0847 083e 083a 082e 0825 081a 080f 0801 07f1 07e3 0800 答 1: 把程序贴上来让大家帮你看看。还有可能是硬件的问题。 答 2: 那你接0V会怎么样子啊? 答 3: 同样会有,这是AD转换的程序。
ADC12CTL0=REF2_5V+REFON+ADC12ON+ADC12OVIE+ADC12TOVIE;
ADC12IE=0X0000;
void StartAD(void)
{
unsigned int i;
for(i=0;i<256;i++)
{
ADarr[i]=0;
}
TACCTL1=OUTMOD_7;
TACCR0=128;
TACCR1=64;
ADC12CTL0|=ADC12ON+SHT0_1;
ADC12CTL1=CSTARTADD_2+SHS_1+ADC12DIV_1+ADC12SSEL_2+CONSEQ_2; ADC12MCTL2=0X02;
P6DIR=0xFB;
P6SEL=0x44;
ADC12CTL0|=ENC;
i=0;
TACTL=TACLR+MC_1; //TA计数时钟为TACLK,清除TAR,增计数 //启动TA
while(i<128){
ADC12IFG=0X0000; //清除中断标志
while((ADC12IFG & BIT2)==0X0000);
ADarr[i]=ADC12MEM2;
if(ADarr[i]==0x0800) _NOP();
i++;
}
ADC12IFG=0x0000;
ADC12CTL0&=~ADC12ON;
} 答 4: 我自己感觉是你设置的问题
你用错了 答 5: 不会吧?我调试了N次,有不是无法转换,就是在转换小于中间值的时候会出现几次0800,大于就没有。而转为脉冲模式就没有这种问题,很是蹊跷!是不是430 的硬件有问题?对了,AD在什么情况下会出现0800(中间值)的异常?是不是保持电路出问题了!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |