找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17215|回复: 10
打印 上一主题 下一主题
收起左侧

Arduino学习18-连接TM8211(PT8211)廉价16bit音频DAC

[复制链接]
跳转到指定楼层
楼主
首先说一下DAC和PWM的关系:
  • DAC是通过电阻分压+开关组合直接凑出想要的电压,输出是直流恒定电压量,比如1024级的DAC,输出512,就是0.5个VCC直流。
  • PWM是通过振荡占空比得到想要电压,比如比如1024级的PWM,输出512,就是50%时间高电平VCC,50%时间低电平0。产生能量刚好是0.5个VCC一样的能量。

  • LED调光,电机调速,更适合使用PWM。
  • 产生模拟音频,产生指定直流电压,控制仪表等更适合使用DAC


TM8211(PT8211)是一片输出分辨率有16bit(65536级电压值),两通道输出的DAC。非常廉价,淘宝零售价大概在0.4元一片左右,而专门用做数字DAC的芯片比如TLC5615(10bit),MAX515(10bit)之类的都需要2元以上甚至更高

下面是转载的介绍:
TM8211是两路16位数模转换集成电路,可广泛应用于数字音频、多媒体系统。芯片采用CMOS工艺设计,内部电路结构基于R-2R电阻网络结构设计,并在全电源电压范围内实现16bit的动态范围。 TM8211可通过采用数字串行总线数据输入,采用快速R-2R网络结构来支持8X的过采样音频信号处理。TM8211 支持较宽范围的采样频率,并与PT8211、TDA1311兼容,输入采用LSBJ (Least Significant Bit Justified ) 格式, 数字编码格式采用MSB在前的补码格式。 TM8211 采用8-pin SOP or DIP封装。

此音频DAC比起数字DAC输出电压范围不够宽广,线性不如数字DAC好。抖动也比较大。不过价格低廉,在要求低的时候可以当做普通数字DAC使用。

硬件连接:
根据官方PDF的标准电路,随便找三个arduino的IO口接BCK/WS/DIN即可。


软件编写:
  1.     //定义引脚,可以自行修改引脚对应
  2.     int BCK = 10, WS = 9, DIN = 8;
  3.     unsigned int cnt = 0;
  4.      
  5.     //TM8211驱动函数,
  6.     void TM8211(unsigned int wr_dat8211)
  7.     {
  8.         for(int i = 16; i > 0; i--)
  9.         {
  10.             digitalWrite(BCK, LOW);
  11.             digitalWrite(DIN, (wr_dat8211 >> i) & 0x01);
  12.             digitalWrite(BCK, HIGH);
  13.         }
  14.     }
  15.      
  16.     void setup()
  17.     {
  18.         //所有引脚都是输出方式
  19.         pinMode(BCK, OUTPUT);
  20.         pinMode(WS, OUTPUT);
  21.         pinMode(DIN, OUTPUT);
  22.     }
  23.      
  24.     void loop()
  25.     {
  26.         //cnt是DA值
  27.         if(cnt > 0xFFF0)
  28.         {
  29.             cnt = 0;
  30.         }
  31.         //WS是通道选择,这段代码是两个通道LCH/RCH同时输出cnt,也可以分开LCH/RCH控制的,具体看pdf
  32.         digitalWrite(WS, LOW);
  33.         TM8211(cnt);
  34.         digitalWrite(WS, HIGH);
  35.         digitalWrite(WS, LOW);
  36.         delay(1);
  37.         cnt += 0x0F;    //每次输出增加16个等级
  38.     }
复制代码

代码输出的是一个锯齿波,输出电平0x0000-0xFFFF。1毫秒上升0x0F个等级
接一个LED在输出端即可看到渐亮效果。

由于LED亮起电压1.8v,本例是0-5v扫描,在0-1.8v扫描时候可能看不到LED亮起,请留意,这不是程序问题,是正常现象
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:183188 发表于 2017-3-24 22:34 | 只看该作者
楼主的这个程序能使PT8211输出0~5V吗?我调试的时候发现PT8211只能输出1.22V到3.7V。(电源电压=5V)
波形如下:



问了厂家,他们说5V供电的时候是输出1.25V~3.75V这个范围。

如果楼主能输出0~5V,请教是怎么实现的?
回复

使用道具 举报

板凳
ID:183796 发表于 2017-3-27 14:07 | 只看该作者
我的最爱
回复

使用道具 举报

地板
ID:230361 发表于 2017-9-8 10:28 | 只看该作者
怎么没有找到相关的时序图的资料啊
回复

使用道具 举报

5#
ID:187624 发表于 2019-6-26 15:29 | 只看该作者
请问这个有源代码么?
回复

使用道具 举报

6#
ID:585672 发表于 2020-3-17 14:30 | 只看该作者
为什么我写单通道,但是两个通道同时输出!怎么可以单通道输出,求告知谢谢!
回复

使用道具 举报

7#
ID:688905 发表于 2023-3-19 21:25 来自手机 | 只看该作者
取名困难户 发表于 2020-3-17 14:30
为什么我写单通道,但是两个通道同时输出!怎么可以单通道输出,求告知谢谢!

这里好像有相关参考信息:搜索文章"利用16位或者24位音频DA制作高精度数控电源的设想"
回复

使用道具 举报

8#
ID:688905 发表于 2023-3-19 21:27 来自手机 | 只看该作者
zhihong0105 发表于 2017-3-24 22:34
楼主的这个程序能使PT8211输出0~5V吗?我调试的时候发现PT8211只能输出1.22V到3.7V。(电源电压=5V)
波形 ...

如果供电低于5v,输出电压范围会是多少呢?
回复

使用道具 举报

9#
ID:705187 发表于 2023-4-11 22:30 来自手机 | 只看该作者
两个通道同时输出的时候电压会降低是什么原因,原来最高可以输出3.8。但是两个通道同时输出最高后两个通道都只有2.5v
回复

使用道具 举报

10#
ID:1088263 发表于 2023-7-12 21:16 | 只看该作者
大佬 Arduino驱动Wii摄像头的电器板能分享一下嘛,我去打板
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表