新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2020-9-22
- 在线时间
- 2 小时
|
1金钱
本帖最后由 liaohh 于 2020-9-22 10:07 编辑
我在网上找了一个DAC输出电压的程序,然后在调试的时候发现电压在不断增大。输出电压应该是在500ms的时间间隔内2V和1V两个电压值之间来回切换。刚开始的时候输出电压是正确的,但是随着切换的次数变多,电压值开始按照大约0.04V的数值增大,也就是2V-1V,然后2.04V-1.04V,2.08V-1.08V这样开始变大,这是为什么呀。下面是输出电压和程序。请问这是什么原因呢?
void dac1_init()
{
DAC_InitTypeDef DAC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
// GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
// GPIO_SetBits(GPIOA,GPIO_Pin_4);
DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software;
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
// DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bits11_0;
DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Enable;
DAC_Init(DAC_Channel_1,&DAC_InitStructure);
DAC_Cmd(DAC_Channel_1,ENABLE);
// DAC_SetChannel1Data(DAC_Align_12b_R,0);
}
void Dac1_Out(float vol)
{
float temp1;
temp1=vol/3.3*4096;
int a=temp1;
DAC_SetChannel1Data(DAC_Align_12b_R,a);
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
}
int main (void){
RCC_Configuration();
dac1_init();
while(1){
Dac1_Out(2.0);
delay_s(1);
Dac1_Out(1.0);
delay_s(1);
}
} |
-
这是最开始时候的输出电压
-
这是一段时间后的输出电压
|