发帖
0 0 0

小安派-Eyes-S1——DAC

st780206
论坛元老

22

主题

25

回帖

9351

积分

论坛元老

积分
9351
本帖最后由 st780206 于 2026-6-2 09:02 编辑

參考 【新提醒】(十六)零基础开发小安派-Eyes-S1【外设篇】——DAC - 小安派&M61零基础开发教程(官方)

ADC是将模拟量转化为数字量,那么DAC就是相反的,将数字量转化为模拟量(电压)输出。
DAC 模块是 12 位电压输出数模转换器,可与 DMA 控制器配合使用。芯片内置的 DAC 模块有两个输出通道,每个通道各有一个独立的转换器,可以互不影响单独进行数模转换。另外此 DAC 的转化器还可以作为 AudioDAC 的模拟输出通道。可用于音频播放,变送器电压调制等应用。
一、了解小安派-Eyes-S1的DAC
小安派-Eyes-S1具有两个通道的DAC,对应通道A和通道B,他们的IO口也是固定的,通道A对应IO3,通道B对应IO2。
其DAC具有以下特点:
• DAC 调制精度为 12-bit
• DAC 的数模转化器可以作为 AudioDAC 模块的模拟输出通道
• DAC 的输入时钟可选为 32MHz,xclk 或者来自于 AudioDAC 模块
• 支持 DMA 功能,支持 10 种数据传输格式
• 支持 DAC 双通道同时转换
• DAC 的输出引脚固定为 ChannelA 为 GPIO3,ChannelB 为 GPIO2
• 支持内部和外部输入参考电压
DAC分频有以下四种选择,其中在DMA模式可使用1分频:
#define DAC_CLK_DIV_16 0#define DAC_CLK_DIV_32 1#define DAC_CLK_DIV_64 3#define DAC_CLK_DIV_1  4​二、结构体与函数接口bflb_dac_init
说明: 初始化 dac。dac 使用之前需要开启 dac ip 时钟、设置 dac 时钟源和分频值、选择使用的 gpio 为 analog 模式。
void bflb_dac_init(struct bflb_device_s *dev, uint8_t clk_div);​
parameter
description

dev
设备句柄

config
配置项
bflb_dac_deinit
说明: 反初始化 dac。
void bflb_dac_deinit(struct bflb_device_s *dev);​
parameter
description

dev
设备句柄
bflb_dac_link_txdma
说明: dac dma 开关使能。
void bflb_dac_link_txdma(struct bflb_device_s *dev, bool enable);​
parameter
description

dev
设备句柄

enable
是否使能DMA
bflb_dac_channel_enable
说明: dac 通道使能。
void bflb_dac_channel_enable(struct bflb_device_s *dev, uint8_t ch);​
parameter
description

dev
设备句柄

ch
通道,多个通道之间使用“与”连接
bflb_dac_channel_disable
说明: dac 通道关闭。
void bflb_dac_channel_disable(struct bflb_device_s *dev, uint8_t ch);​
parameter
description

dev
设备句柄

ch
通道,多个通道之间使用 “与”连接
bflb_dac_set_value
说明: 更改 dac 通道值。
void bflb_dac_set_value(struct bflb_device_s *dev, uint8_t ch, uint16_t value);​
parameter
description

dev
设备句柄

ch
通道,多个通道之间使用 “与 ”连接

value
通道值
三、简单示例——DAC输出正弦波
本来想给大家画一个爱心的波形,但出于种种不可抗力(绝不是我懒)的缘故,没画出来。用官方示例中的数组输出一个正弦波形给大家演示。
#include "bflb_dac.h"#include "bflb_mtimer.h"#include "board.h"#include "bflb_gpio.h"struct bflb_device_s *dac;void My_dac_gpio_init(){    struct bflb_device_s* gpio;    gpio = bflb_device_get_by_name("gpio");    /* DAC_CHA */    bflb_gpio_init(gpio, GPIO_PIN_3, GPIO_ANALOG | GPIO_SMT_EN | GPIO_DRV_0);}uint16_t SIN_LIST[] = {    500, 506, 513, 519, 525, 531, 538, 544, 550, 556,    563, 569, 575, 581, 587, 594, 600, 606, 612, 618,    624, 630, 636, 642, 648, 654, 660, 666, 672, 678,    684, 690, 696, 701, 707, 713, 718, 724, 730, 735,    741, 746, 752, 757, 762, 768, 773, 778, 784, 789,    794, 799, 804, 809, 814, 819, 823, 828, 833, 838,    842, 847, 851, 856, 860, 864, 869, 873, 877, 881,    885, 889, 893, 897, 901, 904, 908, 912, 915, 919,    922, 925, 929, 932, 935, 938, 941, 944, 947, 950,    952, 955, 958, 960, 962, 965, 967, 969, 971, 973,    975, 977, 979, 981, 983, 984, 986, 987, 989, 990,    991, 992, 993, 994, 995, 996, 997, 997, 998, 999,    999, 999, 1000, 1000, 1000, 1000, 1000, 1000, 1000,    999, 999, 999, 998, 998, 997, 996, 995, 994, 993,    992, 991, 990, 989, 987, 986, 984, 983, 981, 979,    978, 976, 974, 972, 970, 967, 965, 963, 960, 958, 955, 953, 950, 947, 944, 941, 938, 935,    932, 929, 926, 922, 919, 916, 912, 908, 905, 901, 897, 893, 890, 886, 882, 878, 873, 869,    865, 861, 856, 852, 847, 843, 838, 833, 829, 824, 819, 814, 809, 804, 799, 794, 789, 784,    779, 774, 768, 763, 758, 752, 747, 741, 736, 730, 725, 719, 714, 708, 702, 696, 691, 685, 679,    673, 667, 661, 655, 649, 643, 637, 631, 625, 619, 613, 607, 601, 594, 588, 582, 576, 570, 563,    557, 551, 545, 538, 532, 526, 520, 513, 507, 501, 495, 488, 482, 476, 469, 463, 457, 451, 444,    438, 432, 426, 420, 413, 407, 401, 395, 389, 383, 376, 370, 364, 358, 352, 346, 340, 334, 329,
──── 0人觉得很赞 ────

使用道具 举报

您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31046 个
  • 话题数: 44939 篇