登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
10
0
0
首页
小安派&M61零基础开发教程(官方)
›
(十六)零基础开发小安派-Eyes-S1【外设篇】——DAC ...
1
2
/ 2 页
下一页
返回列表
(十六)零基础开发小安派-Eyes-S1【外设篇】——DAC
[ 复制链接 ]
发布帖子
Ai-Thinker小泽
论坛元老
38
主题
550
回帖
6940
积分
论坛元老
论坛元老, 积分 6940, 距离下一级还需 9993059 积分
论坛元老, 积分 6940, 距离下一级还需 9993059 积分
积分
6940
私信
10人留言
楼主
小安派&M61零基础开发教程(官方)
41558
10
2023-12-22 18:11:39
> 本帖最后由 Ai-Thinker小泽 于 2023-12-22 18:11 编辑 # 零基础开发小安派-Eyes-S1【外设篇】——DAC 既然有ADC,自然就会有DAC啦,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, 323, 317, 311, 305, 299, 294, 288, 282, 277, 271, 265, 260, 254, 249, 244, 238, 233, 228, 222, 217, 212, 207, 202, 197, 192, 187, 182, 177, 172, 168, 163, 158, 154, 149, 145, 141, 136, 132, 128, 124, 119, 115, 111, 107, 104, 100, 96, 92, 89, 85, 82, 78, 75, 72, 69, 65, 62, 59, 56, 54, 51, 48, 45, 43, 40, 38, 36, 33, 31, 29, 27, 25, 23, 21, 19, 18, 16, 14, 13, 12, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 8, 9, 10, 11, 12, 14, 15, 17, 19, 20, 22, 24, 26, 28, 30, 32, 35, 37, 39, 42, 44, 47, 50, 52, 55, 58, 61, 64, 67, 71, 74, 77, 81, 84, 87, 91, 95, 98, 102, 106, 110, 114, 118, 122, 126, 130, 135, 139, 143, 148, 152, 157, 161, 166, 171, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 226, 231, 236, 242, 247, 252, 258, 263, 269, 274, 280, 286, 291, 297, 303, 309, 315, 320, 326, 332, 338, 344, 350, 356, 362, 368, 374, 380, 386, 392, 399, 405, 411, 417, 423, 430, 436, 442, 448, 455, 461, 467, 473, 480, 486, 492 }; // 输出正弦波的电压值数组 int main(void) { board_init(); My_dac_gpio_init(); dac = bflb_device_get_by_name("dac"); /* 512K / 16 = 32K */ bflb_dac_init(dac, DAC_CLK_DIV_16); // 16分频 bflb_dac_channel_enable(dac, DAC_CHANNEL_A); //选择通道A,对应GPIO3 printf("DAC Start\r\n"); while (1) { for (uint16_t i = 0; i < sizeof(SIN_LIST) / sizeof(uint16_t); i++) { bflb_dac_set_value(dac, DAC_CHANNEL_A, SIN_LIST[i]); bflb_mtimer_delay_us(100); } } bflb_mtimer_delay_ms(200); // 循环输出波形 } ``` ### 正弦波形:  ### 翻车的爱心波形: 
点赞
0
收藏
0
淘帖
2
────
0
人觉得很赞
────
本帖被以下淘专辑推荐:
·
小安派S1&M61教程合集
|
主题: 19, 订阅: 5
·
小安派&M61零基础教程
|
主题: 19, 订阅: 5
回复
使用道具
举报
10 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
lovzx
回复
使用道具
举报
2023-12-22 18:30:02
泽哥v5
回复
评论
使用道具
举报
板凳
1084504793
回复
使用道具
举报
2023-12-23 12:47:20
赞
回复
评论
使用道具
举报
地板
lazy
回复
使用道具
举报
2023-12-23 14:58:04
大佬就是厉害
回复
评论
使用道具
举报
5
#
bzhou830
回复
使用道具
举报
2023-12-23 16:47:24
泽哥v5
回复
评论
使用道具
举报
选择去发光,而不是被照亮
6
#
King6688
回复
使用道具
举报
2023-12-23 23:46:14
其他都不重要,重要的是翻车
回复
评论
使用道具
举报
7
#
爱笑
回复
使用道具
举报
2023-12-25 08:39:35
回复
评论
使用道具
举报
用心做好保姆工作
8
#
AXK123456
回复
使用道具
举报
2023-12-25 09:29:01
个大佬点赞
回复
评论
使用道具
举报
9
#
axkkj
回复
使用道具
举报
2024-4-23 19:35:49
向博主学习
回复
评论
使用道具
举报
10
#
djy876
回复
使用道具
举报
2024-9-3 11:46:57
学习打卡
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
下一页 »
1
2
/ 2 页
下一页
今日推荐
BW16打板擦除失败是什么原因
我在Application中使能了blinky sample, 程序并没有运行
机器人量产,以后会不会搬砖越来越难
FreeRTOS学习-02-i2c
FreeRTOS学习-01-PWM
FreeRTOS学习-00-led
AI-WV02-32S 无法烧录 ErrorCode: 003B, ErrorMsg: BFLB FLASH S
Ai-M61-32SU 模块硬件版本 V1.2-A1
浅尝bouffalo_sdk
腾讯WorkBuddy 编程测试
热帖排行
SDK包bouffalo_sdk-master中peripherals例子 mtimer疑问
开发板是Ai-M61-32S,询问引脚定义
BW16打板擦除失败是什么原因
RD-03Dv2不需要重新生成门限?
BW20-12F怎么关闭设备自动初始化wifi
分享一个AI硬件 的软件,非广告
新人报道!
我在Application中使能了blinky sample, 程序并没有运行
统计信息
会员数: 30993 个
话题数: 44907 篇
首页
分类
我的