做一个可调整的恒流源,用了内部dac了,代码就用的原子哥的,例如我设置Dac1_Set_Vol(200);输出的实际电压值是203.46mv---203.54mv之间变化,而且是很规律的变化都是从203.46升到203.54,再从203.54降到203.46,一直如此往复。资料上说一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间t SETTLING 之后,输出即有有效。那此后是不是只要我不改变DAC_DHRx的装载值,输出电压应该是稳定的。关键输出电压有规律的波动,让我怀疑是不是它一直自动重装载啊。
[mw_shl_code=c,true]void Dac1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitType;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4) ;
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 Dac1_Set_Vol(float vol)
{
float temp=vol;
temp/=1000;
temp=temp*4096/2.496;
DAC_SetChannel1Data(DAC_Align_12b_R,temp);
}
[/mw_shl_code]
|