STM32 关于DAC的转换速率问题
时间:10-02
整理:3721RD
点击:
[color=rgb(0, 0, 0) !important]STM32F407 目前项目里需要利用DAC输出信号,数据存在数组DAc_value[l++]中,然后通过定时器定时触发DAC发送库函数DAC_SetChannel1Data(DAC_Align_12b_R,(int)DAc_value[l++]); 。目前的尝试到的最短时间为1.4us。求教各位DAC转换频率最低为多少。有哪些方法设置。谢谢了。
- void TIM3_IRQHandler(void) //TIM3中断
- {if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
- { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
- num++;
- DAC_SetChannel1Data(DAC_Align_12b_R,(int)DAc_value[l++]);
- if(num>27*N_ifft-1)
- {TIM_Cmd(TIM3, DISABLE);
- num=0;
- l=0;
- j=0;
- DAC_SetChannel1Data(DAC_Align_12b_R,0);
- }
- }
- }
-
- void TIM3_Mode_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
-
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- // TIM_DeInit(TIM3);
- TIM_InternalClockConfig(TIM3);
- TIM_TimeBaseStructure.TIM_Period =3;
- TIM_TimeBaseStructure.TIM_Prescaler =21;
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_div1;
- // 初始化定时器TIM3
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
-
-
- // 清除定时器更新中断标志位
- TIM_ClearFlag(TIM3, TIM_FLAG_Update);
- //禁止ARR预装载缓冲器
- TIM_ARRPreloadConfig(TIM3, ENABLE);
- // 开启定时器更新中断
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
- // 使能定时器
- TIM_Cmd(TIM3, ENABLE);
- // 设置中断组为0
- //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- // 设置中断来源
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- // 设置抢占优先级
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
- // 设置子优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
可以推荐用PWM去做DAC的
谢谢。我试试看看
PWM输出后面加一个低通滤波电路就可以编程模拟量输出
PWM输出后面加一个低通滤波电路就可以编程模拟量输出
图中,只要改变R15和R 19的阻值就可以实现0-12V模拟量输出了,希望对你有帮助。
后面是一个RC一阶低通滤波器,频率只要远远小于PWM的【】频率就可以将直流分量留下了