-
tiankai001 发表于 2017-5-20 15:22
采样保持时间太短,采集到的电压接近于瞬时电压,所以跟你用万用表测出来的电压有差别,
我采集一个直流电压的话,瞬时电压不都是一个固定的值么?
-
qwerghf 发表于 2017-5-22 08:21
我测试自己写的程序没有问题,你的程序不对,计算你的采样时间,应该是采样时间不够
版主,你用的哪款芯片测试的呢?可以保证,采样转换时间肯定是小于采样间隔的,同样的采样间隔,较大的采样时间得到的数据和实际数据是吻合的,较小的采样时间得到的数据误差较大,是不是和采样保持电路有关?
-
麻烦版主看一下,msp430的ADC我还没有搞得很清楚,用的CCS
-
void main(void)
{
WDT_A_hold(WDT_A_BASE);
init_clock_DCO16MHZ();
init_adc();
while(1)
{
ADC12_B_startConversion(ADC12_B_BASE,
ADC12_B_MEMORY_0,
ADC12_B_SINGLECHANNEL);
vol = ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_0);
if(index_b == 512)
{
index_b = 0;
}
circularBuffer[index_b++] = vol;
}
-
void init_clock_DCO16MHZ(void)
{
//Set DCO frequency to 16MHz
CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4);
CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
}
void init_adc(void)
{
//Set P1.0 as Ternary Module Function Input.
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P1,
GPIO_PIN0,
GPIO_TERNARY_MODULE_FUNCTION
);
PMM_unlockLPM5();
//Initialize the ADC12B Module
/*
* Base address of ADC12B Module
* Use internal ADC12B bit as sample/hold signal to start conversion
* USE smclk as clock source
* Use default clock divider/pre-divider of 1
* Not use internal channel
*/
ADC12_B_initParam initParam = {0};
initParam.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC;
initParam.clockSourceSelect = ADC12_B_CLOCKSOURCE_SMCLK;
initParam.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1;
initParam.clockSourcePredivider = ADC12_B_CLOCKPREDIVIDER__1;
initParam.internalChannelMap = ADC12_B_NOINTCH;
ADC12_B_init(ADC12_B_BASE, &initParam);
//Enable the ADC12B module
ADC12_B_enable(ADC12_B_BASE);
/*
* Base address of ADC12B Module
* For memory buffers 0-7 sample/hold for 4 clock cycles
* For memory buffers 8-15 sample/hold for 4 clock cycles (default)
* Disable Multiple Sampling
*/
ADC12_B_setupSamplingTimer(ADC12_B_BASE,
ADC12_B_CYCLEHOLD_4_CYCLES,
ADC12_B_CYCLEHOLD_4_CYCLES,
ADC12_B_MULTIPLESAMPLESDISABLE);
//Configure Memory Buffer
/*
* Base address of the ADC12B Module
* Configure memory buffer 0
* Map input A0 to memory buffer 0
* Vref+ = AVcc
* Vref- = VSS
* Memory buffer 0 is not the end of a sequence
*/
ADC12_B_configureMemoryParam configureMemoryParam = {0};
configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_0;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A0;
configureMemoryParam.refVoltageSourceSelect =
ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;
configureMemoryParam.windowComparatorSelect =
ADC12_B_WINDOW_COMPARATOR_DISABLE;
configureMemoryParam.differentialModeSelect =
ADC12_B_DIFFERENTIAL_MODE_DISABLE;
ADC12_B_configureMemory(ADC12_B_BASE, &configureMemoryParam);
}
-
用过的来一起讨论啊
-
写的很好啊,解开了我对ADC的一些疑惑,这些内容对初学者,比如我,很有用,赞
-
在datasheet中找到了内部联系,再次感谢版主
-
lcofjp 发表于 2017-5-16 15:34
第一看看有没有内部连接,就是不通过引脚就可以控制那种
如果没有内部连接,就选择两个不在同一引脚的输 ...
好的,理解了,我再仔细看看手册有没有内部连接。谢谢版主{:1_103:}
-
lcofjp 发表于 2017-5-16 15:14
不可以,同一时刻只能使用一个功能。
版主,那如果我需要把比较器的输出作为定时器的捕获输入,该如何解决呢?
-
楼主现在对bypass mode有没有更确切的理解呢?
-
ccs 6.2.0版本在app center 中找不到grace,怎么办?
-
安装过程中出错,com.ti.emulation.pack.win32 failed to copy file . the file may be in use。如何解决?
-
michael_llh 发表于 2017-4-19 15:52
加油!
谢谢版主鼓励。
-
之前没有接触51,直接用stm32,对寄存器的操作比较陌生。楼主写的很棒,一下子就明白了。
-
楼主很棒,不枯燥,抓重点
-
即将用到msp430fr5994,之前用stm32,努力学习