微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32 关于DAC的转换速率问题

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转换频率最低为多少。有哪些方法设置。谢谢了。

  1. void TIM3_IRQHandler(void)   //TIM3中断
  2. {if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
  3. {  TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
  4.    num++;
  5. DAC_SetChannel1Data(DAC_Align_12b_R,(int)DAc_value[l++]);   
  6. if(num>27*N_ifft-1)
  7. {TIM_Cmd(TIM3, DISABLE);
  8.     num=0;
  9.     l=0;
  10.     j=0;
  11. DAC_SetChannel1Data(DAC_Align_12b_R,0);
  12. }   
  13. }
  14. }

  15. void TIM3_Mode_Config(void)
  16. {   
  17.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  18.      
  19.     NVIC_InitTypeDef NVIC_InitStructure;
  20.       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  21. //  TIM_DeInit(TIM3);
  22.     TIM_InternalClockConfig(TIM3);
  23.   TIM_TimeBaseStructure.TIM_Period =3;
  24.   TIM_TimeBaseStructure.TIM_Prescaler =21;  
  25.     TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
  26.     TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_div1;
  27.     // 初始化定时器TIM3
  28.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  29.      

  30.     // 清除定时器更新中断标志位
  31.     TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  32.        //禁止ARR预装载缓冲器
  33.   TIM_ARRPreloadConfig(TIM3, ENABLE);
  34.     // 开启定时器更新中断
  35.     TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  36.     // 使能定时器
  37.     TIM_Cmd(TIM3, ENABLE);  
  38.     // 设置中断组为0
  39.     //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);      
  40.         // 设置中断来源
  41.     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;     
  42.         // 设置抢占优先级
  43.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   
  44.       // 设置子优先级
  45.     NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;   
  46.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  47.     NVIC_Init(&NVIC_InitStructure);
  48. }

复制代码


可以推荐用PWM去做DAC的

谢谢。我试试看看

PWM输出后面加一个低通滤波电路就可以编程模拟量输出

PWM输出后面加一个低通滤波电路就可以编程模拟量输出

图中,只要改变R15和R 19的阻值就可以实现0-12V模拟量输出了,希望对你有帮助。


后面是一个RC一阶低通滤波器,频率只要远远小于PWM的【】频率就可以将直流分量留下了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top