我用的板子是探索者,用PA4和PA5进行DAC输出,PA4输出直流电平PA5输出正弦信号,用PA7进行AD采集。因为没有示波器,为了验证DAC输出的效果,就把ADC接到了DAC输出脚上并在LABVIEW上显示波形。在测试正弦信号时效果很好,但是在测试直流电平时误差特别大,特别是当设置电压小于2V时,我将输出电压调到了0V时再进行测量都会有0.6V的输出。起初我以为是ADC的问题,但是把ADC直接接到3.3V的电压上效果也很好,然后我也检查了DAC的相关寄存器,特别是DAC_SetChannel1Data函数,没有发现什么问题。请大神帮忙解决一下这是什么回事。DAC的程序以及波形图如下
#include "dc.h"
#include "sys.h"
double temp;
void DC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitType;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
DAC_InitType.DAC_Trigger=DAC_Trigger_None;
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;
DAC_Init(DAC_Channel_1,&DAC_InitType);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_SetChannel1Data(DAC_Align_12b_R, 0);
}
void DC_Set_Vol(u16 dc)
{
temp=dc;
temp/=1000;
temp=temp/4095*3.3;
DAC_SetChannel1Data(DAC_Align_12b_R,temp);
} |