cubemx 配置dac

3 篇文章 0 订阅

cubemx配置adc输出

一直想说做一个产生任意波形的dac怎么实现,研究了一下,算做个总结吧

b站和csdn找了一些视频和资料整理一下

首先本实验实现了三个任务:

1.产生任意电压

2.产生三角波

3.利用dma产生正弦波,当然也可以产生任意波形

每个小实验分为量部分讲解,分别是cubemx和keil代码

都要配置RCC和SYS这里不再赘述

1.产生任意电压

step1:

分析:这里注意打开了buffer过后是不能产生0v的

step2:

 /*产生任意电压*/
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,4095);
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);//开启DAC通道

分析:这里的dac_setvalue函数有两个参数值得注意,DAC_ALIGN_12B_R和4096,一般在16位的存储中,我们都是选用12位右对齐的(左对齐我也试过,这里测出来是200mv,具体我也没细想),然后是4096,因为是选用的12位右对齐,12位最大就是4095,这里就直接3.3*(x/4095)得到电压

2.利用定时器实现三角波输出

需要用到的外设有timer和dac

step1:timer

只需要配置一下分频系数和update event,频率计算等会说

step2: 

 分析:选取对应的定时器触发和产生三角波,和最大的幅度4095和上面同理,就是12位的,另外顺带一提这个参数也会改变频率,它也表示取了多少个点出来

step3:

 /*产生三角波*/    
HAL_TIM_Base_Start(&htim6);
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_8B_R,0x100);
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);//开启DAC通道

这里首先时基初始化对应的timer,然后setvalue的目的是确定最小的电压,0x100和上面同理就是256,但是注意和上面那个最大幅度搭配起来可能导致溢出,就顶端出现在下方,相当于25++4095那肯定超出范围然后从0开始了

然后开启

最后说一说频率,从最高到最低一个来回,72M/(71+1)/4096/2

1/

3.利用dma产生正弦波

step1:timer的配置不变

 

 step2:DAC的配置

关掉波形产生,和第一个产生任意电平相同

 

 增加dma

 step3:

①    

利用软件产生正弦波的点,我这里直接使用产生spwm用到的小软件

 生成数组

 主函数:

HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t*)sine_8bit,256,DAC_ALIGN_8B_R);   HAL_DAC_Start(&hdac,DAC_CHANNEL_1);//开启DAC通道

 频率就是72M/(71+1)/点的个数

 

总结:如果要产生任意波形

首先可以用matlab或者python算出点,然后把对应的点存成一个数组,然后输出出来

DAC+TIM+DMA

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值