当前位置: 首页 > news >正文

商城网站建设公司排行郑州网站建设 .cc

商城网站建设公司排行,郑州网站建设 .cc,甘肃庆阳网红排名,asp网站相册14.1 实验内容 通过本实验主要学习以下内容: DAC工作原理 使用DAC输出电压 14.2 实验原理 14.2.1 DAC工作原理 我们上几章学习了ADC,本章我们来学习DAC。ADC是模-数转换,即模拟量转换为数字量,DAC正好相反,即数-…

14.1 实验内容

通过本实验主要学习以下内容:

  • DAC工作原理
  • 使用DAC输出电压

14.2 实验原理

14.2.1 DAC工作原理

我们上几章学习了ADC,本章我们来学习DAC。ADC是模-数转换,即模拟量转换为数字量,DAC正好相反,即数-模转换,是将MCU的数字量转换为模拟量——电压。

GD32F303有两个DAC,对应的IO口分别为PA4(DAC0)和PA5(DAC1),这两个DAC可以独立或并发工作。DAC可以将 12 位的数字数据转换为外部引脚上的电压输出。数据可以采用8位或12位,左对齐或右对齐模式。

如设置12位模式,IO口上输出的电压值和设置的数字值对应的计算公式为:

 

其中VREF为参考电压,DAC_DO为设置的数字值。

DAC 的主要特征如下:

◼ 8 位或 12 位分辨率,数据右对齐或左对齐;

◼ 支持 DMA 功能;

◼ 同步更新转换;

◼ 外部事件触发转换;

◼ 可配置的内部缓冲区;

◼ 外部参考电压, VREF+;

◼ 噪声波形(LSFR 噪声模式和三角噪声模式);

◼ 双 DAC 并发模式  

以下为GD32F303 DAC的框图: 

这里着重讲下DAC的触发源,DAC触发源通过DAC_CTL寄存器中 DTSELx 位来进行选择。DAC的触发源见下表:

DAC有两个类型的数据寄存器——DAC保持数据寄存器(DACx_DH)和DAC 数据输出寄存器(DACx_DO),用户将数字量写入到DACx_DH中,只有当DACx_DH中的数据被转移到DACx_DO时,IO口才会实际输出对应电压值。

当使能了外部触发模式(通过设置 DAC_CTL 寄存器的 DTENx 位控制),当已经选择的触发事件发生, DAC 保持数据(DACx_DH)会被转移到 DAC 数据输出寄存器(DACx_DO)。如果没有使能外部触发模式,当数据写到DACx_DH后就会立即转移到DACx_DO中,此时相应IO口即输出对应电压。

14.2.2 DAC 输出缓冲

为了降低输出阻抗并驱动外部负载,每个DAC 模块内部各集成了一个输出缓冲区。

缺省情况下, 输出缓冲区是开启的,可以通过设置 DAC_CTL 寄存器的 DBOFFx 位来开启或关闭缓冲区。打开缓冲区可以增强DAC对外驱动能力。  

14.2.3 DAC  DMA 功能

在外部触发使能的情况下,通过设置 DAC_CTL 寄存器的DDMAENx 位来使能 DMA 请求。 当有外部硬件触发的时候(不是软件触发),则产生一个DMA 请求。  

14.3 硬件设计

本实验功能是将设定的数字值转换为电压,硬件设计如下:

可以看到是使用PA5即DAC1输出电压,读者可以通过测量H9口进行电压测量

14.4 代码解析

14.4.1 DAC 配置函数

在driver_dac.c中定义了DAC的配置函数driver_dac_config:

C
void driver_dac_config(uint32_t dac_periph)
{/*使能GPIOA时钟*/rcu_periph_clock_enable(RCU_GPIOA);/*使能DAC时钟*/rcu_periph_clock_enable(RCU_DAC);/*依据选择的DAC号来初始化IO口*/if(dac_periph == DAC0){gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4);}else{gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_5);}/*DAC复位*/dac_deinit();/*DAC外部触发禁能,即数据写入到保持寄存器就会自动输出电压*/dac_trigger_disable(dac_periph);/*DAC噪声关闭*/dac_wave_mode_config(dac_periph, DAC_WAVE_DISABLE);/*输出缓冲打开*/dac_output_buffer_enable(dac_periph);  /*DAC使能*/dac_enable(dac_periph);  
}

14.4.2 DAC数据写入函数

在driver_dac.c中定义了DAC的数据写入函数driver_dac_out,调用这个函数后即将数字值写入到DAC数据保持寄存器中:

Cvoid driver_dac_out(uint32_t dac_periph, uint32_t dac_align, uint16_t data){/*写入数据到DAC保持寄存器*/dac_data_set(dac_periph,dac_align,data);}

 14.4.3 main函数实现

以下为main函数代码:

C
int main(void)
{driver_init();//delay函数初始化bsp_uart_init(&BOARD_UART);//BOARD_UART串口初始化driver_dac_config(DACx);//DAC配置while (1){        delay_ms(200);//延时200msDAC_data += 200;//DAC_data值自增加200if(DAC_data>4000)//DAC防止溢出{DAC_data = 0;                }printf(" the DAC_data is %d \r\n", DAC_data);//打印DAC data数据driver_dac_out(DACx,DAC_ALIGN_12B_R,DAC_data);//输出电压}
}

本例程main函数首先进行了延时函数初始化,再配置开发板上的USB串口,接着进行DAC配置。DAC配置函数中的实参通过main.c中定义,读者可根据实际需求修改:

C
#define DACx DAC1

 main函数主循环中每200ms自增DAC_data 值,并将该值写入到数据保存寄存器中,然后将DAC_data 值打印出来。

14.5 实验结果

使用外用表测量开发板H9接口上的电压值,可以看到电压循环从低到高的变化。

由聚沃科技原创,来源于【红枫派开发板】第十四讲 DAC-输出电压实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com)

 

http://www.yayakq.cn/news/192099/

相关文章:

  • a做片手机免费网站设计网站如何融入非关系数据库
  • 东莞专业网站设计咨询php网站开发实例教程 源码
  • 南京网站开发南京乐识强聊城大学附属小学规划建设
  • 湖北省建设厅招骋网站学校网站建设专业公司
  • 网站美工要求开发商虚假宣传是否构成欺诈
  • 如何用ps做网站平面图十大黄金软件app免费
  • 网站建设便宜辽阳网站建设学校
  • 网站每年续费给谁wordpress头部标签描述
  • 广州酒店网站制作wordpress区块链模板
  • aspsql server典型网站建设案例 源码平台搭建阳光房是否违章建筑
  • 做室内设计人喜欢的网站成品网站前台源码
  • 零基础学做网站开封网站开发
  • 寿光网站建设wordpress 权限阅读
  • 深圳福田网站建设公司哪家好湛江手机网站建设
  • 网站策划书如何做目前还有阳性患者吗最新消息
  • 北京网站制作公司清远慈溪网页设计
  • 建设一个网站的需求分析湘icp备 网站建设 农业 湖南
  • 惠安网站建设东莞小程序建设
  • 郑州有哪些搞网站开发的公司微信官方网站是多少钱
  • 怎么做转载小说网站网站编辑
  • 优秀的定制网站建设公司汉口江岸区城市建设局网站
  • 国外好的室内设计网站403.14网站
  • 湘潭网站优化公司中国教育培训网
  • 网站开发中使用框架吗网站可能存在什么问题吗
  • 网站怎么做聚合页面免费发布网站
  • 做一个app需要多少费用效果好的关键词如何优化
  • 网站建设中两个月了python安装wordpress
  • 专门做橱柜衣柜效果图的网站中装建设(002822)股吧
  • wordpress全站背景如何查看网站是否备案
  • 做跨境电商有没推荐的网站深圳 网站设计 公司