STM32 关于DAC的转换速率问题

2019-07-14 19:15发布

[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. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
TenYears
1楼-- · 2019-07-15 04:46
我是咸鱼 发表于 2017-10-5 09:24
可以推荐用PWM去做DAC的

谢谢。我试试看看
我是咸鱼
2楼-- · 2019-07-15 08:56
TenYears 发表于 2017-10-10 19:21
谢谢。我试试看看

PWM输出后面加一个低通滤波电路就可以编程模拟量输出
我是咸鱼
3楼-- · 2019-07-15 10:25
TenYears 发表于 2017-10-10 19:21
谢谢。我试试看看

PWM输出后面加一个低通滤波电路就可以编程模拟量输出
我是咸鱼
4楼-- · 2019-07-15 13:37
 精彩回答 2  元偷偷看……
我是咸鱼
5楼-- · 2019-07-15 16:12
我是咸鱼 发表于 2017-10-20 10:32
图中,只要改变R15和R 19的阻值就可以实现0-12V模拟量输出了,希望对你有帮助。

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

一周热门 更多>