基于STM32G4芯片的DAC应用示例分享

发布者:q13358975046最新更新时间:2023-08-28 来源: elecfans关键字:DAC  正弦波 手机看文章 扫描二维码
随时随地手机看文章

有人使用STM32G431芯片做DAC应用,具体来说就是通过DMA将数据从指定内存传送给DAC数据寄存器,并由定时器触发DAC转换。他发现总是没法实现该功能。这里简单介绍下相关实现过程,并做些提醒。这里要演示的基本功能就是让DAM将内存数据周期性传输给DAC数据寄存器,最后输出一路正弦波。


结合STM32G4芯片的特性,这里可以有两种实现方式。


第一种,DMA的请求来自于DAC1的转换事件。第二种,DMA的请求来自于定时器事件,下面用到的是定时器的更新事件。这里就两种实现方式的配置及相关用户代码简单介绍下,以供参考。


我们先看第一种方式,即DMA请求来自DAC转换事件,定时器3触发DAC的转换。

使用CubeMx进行配置,主要配置如下:

c633dbda-4ddc-11ec-9eda-dac502259ad0.png

c6869bf4-4ddc-11ec-9eda-dac502259ad0.png

c6f152b4-4ddc-11ec-9eda-dac502259ad0.png

完成配置后生成初始代码,再添加下面代码即可验证测试:

#define Tpai (2*3.14159)

uint32_t PData[200],Dac_data;

uint16_t i;

for (i=0;i《200;i++)

{

PData[i]=

(uint32_t ) (2000*(sin((Tpai/200)*i))+2000);

} //prepare data for DAC

HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)&PData[0], 200,DAC_ALIGN_12B_R);

__HAL_TIM_ENABLE(&htim3);

上面配置的DMA传输方向是从内存到外设,目的和源的访问宽度都是32位WORD. 当然也可以是内存访问宽度为16位的半字,外设访问宽度为32位字。即DMA的配置像下面这样也是可以的。

c73c377a-4ddc-11ec-9eda-dac502259ad0.png

其它配置不动,代码稍微改动和整理下即可。参见下面代码:

Uint16_t PData[200],Dac_data;

#define Tpai (2*3.14159)

uint16_t i;

for (i=0;i《200;i++)

{

PData[i]=

(uint16_t )(2000*(sin((Tpai/200)*i))+2000);

} //prepare data for DAC

SET_BIT(hdac1.Instance-》CR,DAC_CR_DMAEN1);

HAL_DAC_Start(&hdac1,DAC_CHANNEL_1 );

HAL_Delay(2);

HAL_DMA_Start_IT(&hdma_dac1_ch1,(uint32_t)&PData[0],(uint32_t)&DAC1-》DHR12R1, 200);

__HAL_TIM_ENABLE(&htim3);

第一种方式就介绍到这里,再来看看第二种实现方式,即TIMER更新事件作为DMA请求源,同时作为DAC转换触发源。

基于CubeMx配置,主要调整下DMA配置,其它配置基本不动。

主要是DMA请求事件变了,其它配置跟第一种模式基本一样。

配置完成后生成初始化代码,再添加下面用户代码:

#define Tpai (2*3.14159)

uint16_t PData[200], Dac_data;

uint16_t i;

for (i=0;i《200;i++)

{

PData[i]=

(uint16_t )(2000*(sin((Tpai/200)*i))+2000);

}

HAL_DAC_Start(&hdac1,DAC_CHANNEL_1 );

HAL_Delay(3);

HAL_DMA_Start(&hdma_tim3_up,(uint32_t)&PData[0],(uint32_t)&DAC1-》DHR12R1, 200);

__HAL_TIM_ENABLE_DMA(&htim3, TIM_DMA_UPDATE);

__HAL_TIM_ENABLE(&htim3);

这里要提醒一点,G4系列的DAC1的数据保持寄存器可以一次放2个通道的数据,在使用DMA传输时,即使只用到1个通道,DMA对它的访问也要遵循WORD对齐,不然你可能会遇到麻烦。

如果说,我们不使用DMA做数据传输,只是手动给DAC喂数据,那如何实现上述效果呢?这时我们可以使用软件触发DAC的传输,手动给DAC的数据保持寄存器赋值,参考配置及实现代码如下:

c7e2f83a-4ddc-11ec-9eda-dac502259ad0.png

相关用户代码如下:

#define Tpai (2*3.14159)

uint16_t PData[200],Dac_data;

uint16_t i;

for (i=0;i《200;i++)

{

PData[i]=

(uint16_t)(2000*(sin((Tpai/200)*i))+2000);

}

HAL_DAC_Start(&hdac1,DAC_CHANNEL_1 );

HAL_Delay(3);

while(1)

{

for(i=0;i《200;i++)

{

DAC1-》DHR12R1= PData[i];

SET_BIT(hdac1.Instance-》SWTRIGR,DAC_SWTRIGR_SWTRIG1);

HAL_Delay(5);

Dac_data = DAC1-》DOR1;//for debug

}

}

总之,不论使用哪种方式,都可以实现我们所期望的结果,即输出如下正弦波。


关键字:DAC  正弦波 引用地址:基于STM32G4芯片的DAC应用示例分享

上一篇:浅析基于STM32的除以0运算话题
下一篇:如何用flash保存stm32 html的参数

推荐阅读最新更新时间:2024-11-02 20:18

用AD7008构成可程控正弦波信号发生器
  在许多电子系统中,经常需要用到频率和幅度可调的正弦波信号作为基准或载波信号。正弦渡信号主要通过模拟电路或DDS(Direct Digital Synthesis)等两种方式产生.相对于模拟电路,DDS具有相位连续、频率分辨率高、转换速度快、信号稳定等诸多优点,因此,DDS存雷达、通信、测试、仪表等领域得到了广泛的应用。 1 系统组成   该系统的核心部件是AD7008,AD7008是ADI公司推出的高集成度DDS频率台成器。首先单片机将频率控制字发送给AD7008,在AD7008的输出端口就可以得到所需的正弦信号,为了使输出信号的频率更为稳定,将输出信号通过由MAX262构成的中心频率可调带通滤波器进行滤波处理.MAX262
[模拟电子]
玩转STM32CubeMX | DAC数模转换
1.DAC数模转换 DAC(digital to analog converter)即数模转换器,它可以将数字信号转换为模拟信号,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号来驱动某些执行器件,使人类易于感知。如音频信号的采集和还原就是这样的一个过程 STM32F1的DAC模块是12位数字输入,电压输出型的DAC。可以配置为8位或12位模式,也可以与DMA控制器配合使用,DAC工作在12位模式下时,数据可以设置为左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC
[单片机]
玩转STM32CubeMX | <font color='red'>DAC</font>数模转换
8位双级性DA转换器DAC08应用电路图
8位双级性DA转换器DAC08应用电路图
[模拟电子]
8位双级性DA转换器<font color='red'>DAC</font>08应用电路图
0.1Hz超低频正弦波耐压试验技术及应用
0.1Hz超低频正弦波耐压试验技术及应用 摘 要  本文着重介绍了国际上普遍采用的0.1Hz超低频正弦波耐压试验技术及运用这一技术的耐压测试设备。美国高电压公司最新推出的90kV耐压测试仪,解决了我国35kV交联聚乙烯绝缘电缆无合适耐压试验设备的难题。该测试设备直接产生一种真正的正弦波,同时不会增加额外的技术难度。这样不仅减轻了重量节约了成本,而且也简化了它在诊断测试,诸如介损测试、局放测试和现场故障定位等领域内的应用。本文还引入了美国电子与电气工程师协会在2003年8月最新发布的IEEE P400.2/D1标准的核心内容,此标准可用于指导现场屏蔽电力电缆系统的耐压、诊断试验。 关键词  超低频 正弦波
[模拟电子]
0.1Hz超低频<font color='red'>正弦波</font>耐压试验技术及应用
单相正弦波逆变器容错控制研究
1 引言     单相正弦波逆变器在工业生产中得到广泛应用,一旦发生故障,不但影响生产的正常进行,而且造成严重的经济损失。采用故障诊断和容错控制技术是提高系统可靠性的有力措施。容错控制的基本思想是:当系统中某些部件发生故障时,这些部件在系统中的功能可由其他部件完全或部分代替,使系统在故障的情况下仍能维持规定的性能,或不丧失基本性能。目前容错控制主要可分为两大类:基于硬件冗余的方法和基于软件冗余的方法。硬件冗余是对容易失效的部件设置一定的备份。此方法简单易行,但易使系统成本增加,结构变得复杂。软件冗余的方法充分利用系统中不同部件在功能上的重叠,为提高控制系统的可靠性设计提供了较经济的途径。 2 容错控制策略     容错控制目的在于针
[电源管理]
单相<font color='red'>正弦波</font>逆变器容错控制研究
抑制单相及三相正弦波逆变器偏磁的有效方法
摘要:分析了SPWM逆变电源中直流偏磁产生的原因,对目前所采用的抗偏磁方法进行了比较,提出了以各桥臂中点电压作为反馈来抑制直流偏磁的新方法。可适用于单、三相逆变电源抗偏磁设计。 关键词:正弦波脉宽调逆变器;偏磁;抑制     1 引言 在SPWM开关型变换器中,主变压器的偏磁可以说是一种通病。只是在各种应用场合中,表现的程度不同而已。偏磁的后果是十分严重的,轻则会使变压器和功率半导体模块的功耗增加,温升加剧,变压器的机械噪声增大(当开关频率或调制频率在听觉范围内时),严重时还会损坏功率器件,使逆变器不能正常工作。因此,抗偏磁是开关型逆变电源的的关键问题之一。 本文在比较分析了PWM和SPWM变压器铁心的不同磁化
[电源管理]
抑制单相及三相<font color='red'>正弦波</font>逆变器偏磁的有效方法
什么是权电阻网络DAC(数模转换器)
  一个多位二进制数中每一位的 1 所代表的数值大小称为这一位的权。如果一个 n 位二进制数用 表示,则最高位( MSB )到最低位( LSB )的权依次为 。 1. 电路结构及原理 下图是 4 位权电阻网络 D/A 转换器的原理图,它由权电阻网络、 4 个模拟开关和 1 个求和放大器组成。 图 7.3 权电阻网络D/A转换器 S 0 --S 3 为模拟开关,它们的状态分别受输入代码d i 的取值控制,d i  =1   时开关接参考电压 V REF 上,此时有支路电流I i   流向求和放大器;   d i  =0 时开关接地,此时支路电流为零。
[电源管理]
什么是权电阻网络<font color='red'>DAC</font>(数模转换器)
具有双总线的8位DAC风扇控制器LTC1840
描述   该LTC1840是一个具有两个8位电流输出DAC风扇控制器,转速表两个接口和四个通用的I / O(GPIO)引脚。它的工作与一个在2.7V至5.75V单电源供电。电流输出DAC是用来控制一个外部开关调节器,控制风扇转速。电流输出DAC和转速表允许控制器,形成一个封闭的风扇速度控制回路。该GPIO引脚可作为数字输入或开漏下拉输出。   该器件具有一个简单的2线I ² C和SMBus兼容串行接口,允许多台设备之间的通信。该接口包括一个故障状态寄存器,反映了部分国家和可调查发现了一个故障状态的原因。其他业务特色,如DAC输出电流的GPIO模式的一部分,频率和转速表,也可以通过串行接口编程。两个地址引脚提供九种可能的设备地址
[模拟电子]
具有双总线的8位<font color='red'>DAC</font>风扇控制器LTC1840
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved