你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32进行DAC配置经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-18 11:56
一.DAC介绍
ADC是模数转换器,可以将模拟电压转换位数字信号;DAC是数模转换器,可以将数字信号转换为模拟电压。
STM32F103ZET6内部DAC有2个通道,12位数字输入(也可以配置为8位),可以按要求输出不同的信号波形,其主要特点如下:
2个DAC转换通道
每个通道都有DMA功能
2个通道可以同时转换或者分别转换
输入信号可以是12位或8位
12位输入模式分为:右对齐、左对齐
有同步更新功能
可以生成噪声波形
可以生成三角波形


DAC框图如下:


20200430194922231.png


二.主要寄存器说明
一般使用DAC情况不多,而且使用也就是单纯输出电压,基本用不到STM32输出一些特殊的波形,所以了解一下基本的寄存器就可以配饰DAC了。


DAC 输出是受 DORx 寄存器直接控制的,但是不能直接往 DORx寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。
比如通道1的12位右对齐数据保持寄存器:


20200430200359260.png


控制DAC的就是DAC控制寄存器了:


20200430200458602.png
20200430200536151.png


这种东西,现在查一下参考手册就可以很快掌握。

三.代码及配置
PA4开始设置为模拟输入是为了防止信号干扰,在使能DAC后,PA4会自动与DAC模拟输出相连,所以不必担心。
  1. /* DAC1  PA4 模拟输入 12位右对齐 参考电压3.3V */
  2. void DAC1_Init( void )
  3. {
  4.         GPIO_InitTypeDef GPIO_InitStruct;
  5.         DAC_InitTypeDef DAC_InitStruct;
  6.        
  7.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
  8.         RCC_APB1PeriphClockCmd( RCC_APB1Periph_DAC, ENABLE );
  9.        
  10.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//GPIO引脚模式:模拟输入
  11.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_Init( GPIOA, &GPIO_InitStruct );
  14.         GPIO_SetBits( GPIOA, GPIO_Pin_4 );
  15.        
  16.         DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;//只有波形发生时才使用
  17.         DAC_InitStruct.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//不使用输出缓存
  18.         DAC_InitStruct.DAC_Trigger = DAC_Trigger_None;//不触发
  19.         DAC_InitStruct.DAC_WaveGeneration = DAC_WaveGeneration_None;//不使用波形发生
  20.         DAC_Init( DAC_Channel_1, &DAC_InitStruct );
  21.        
  22.         DAC_Cmd( DAC_Channel_1, ENABLE );
  23.         DAC_SetChannel1Data( DAC_Align_12b_R, 0 );
  24. }


  25. /* 参考电压3.3V 12位分辨率:0~4095 vol代表输出电压的100倍:0~330 */
  26. void Set_DAC_Vol( uint16_t vol )
  27. {
  28.         uint16_t x;
  29.        
  30.         x = (uint16_t)4096*(vol/330);
  31.         DAC_SetChannel1Data( DAC_Align_12b_R, x );
  32. }


复制代码

————————————————
版权声明:Aspirant-GQ
如有侵权请联系删除


收藏 评论0 发布时间:2023-3-18 11:56

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版