前面了解ADC了,那么肯定有器件可以还原信号,也就是将数字信号转换为模拟信号DAC(Digital-Analog Converter), 其思想与ADC是完全相反的。
89C51单片机没有内部集成的DAC,因此需要使用DAC转换芯片,常见的有DAC0832、DAC0808等。这里以DAC0832为例,进行说明讲解。
DAC032是一款8位、接口简单、低价格的DAC0832转换器,由倒T型R-2R电阻网络,模拟开关、运算放大器和参考电压Vref构成。虽是早期的ADC芯片,但对于学习也是很有帮助的。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。
参数:
工作电压+5~+15V;
分辨率:8位,1/256
电流稳定时间1us;
单缓冲、双缓冲或直接数字输入
低功耗20mW
参考电压-10V~+10V
工作方式:
单缓冲
控制输入寄存器
双缓冲
控制输入寄存器和数据寄存器
直通
无需控制,数据直入直出
引脚说明:
D0-D7——数据输入,TTL电平;
ILE:数据锁存允许控制信号,高电平有效;
CS:片选信号,低电平有效;
WR1:输入寄存器的写选通信号;
XFER:数据传送控制信号输入,低电平有效;
WR2:DAC寄存器写选通信号;
Iout1:电流输出线,输入全1时,Iout1最大;
Iout2:电流输出线,其值与Iout1之和为常数;
Rfb:反馈电阻引脚;
Vref:基准电压
这里我们使用单极性输出进行仿真
Vo=-Vref*D/256,D=0-255
Vref=5V时,Vout=0~-5*255/256=0~-5V
所以Iout1接放大器的-端,Iout2接GND,才能输出+Vout。
转换时序
根据时序要求进行编程即可。
static void Init(void)
{
P2 &= 0x1F; //关闭LED, 数码管
DACCS = 0; //片选有效
DACWR = 0; //启动DAC0832写入数据
}
/* 正弦波数据 */
uint8_t code sin[64]=
{
135,145,158,167,176,188,199,209,218,226,
234,240,245,249,252,254,254,253,251,247,
243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,
17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,
55,66,78,90,102,114,128
};
static void SinWave(void)
{
static uint8_t i = 0;
for(i = 0;i < 64;i++)
{
P0 = sin[i];
}
}
上一篇:单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4相电机
下一篇:Proteus C51仿真学习板9——IIC
推荐阅读最新更新时间:2024-11-05 22:46
设计资源 培训 开发板 精华推荐
- L7812C 跟踪稳压器的典型应用
- LTC2862AHDD-1 ±60V 20Mbps 电平转换器/隔离器的典型应用
- 使用 ON Semiconductor 的 LM340 的参考设计
- 12v电量显示
- 980DR64YCMiniBoard
- MIC5357 的典型应用:高性能、低噪声双 500mA ULDO
- LTM8052MPY 用于为超级电容器充电和主动平衡的典型应用
- LT1934EDCB 环路供电 3.3V 电源的典型应用电路,具有额外的隔离输出
- STEVAL-ISA096V1,在升降压拓扑中使用 Viper06 辅助电源的演示板
- 使用 Analog Devices 的 REF198GRUZ-REEL 的参考设计