该知识点来源于B站知弦,本章便是对其DA(数字信号转模拟信号)应用的简单总结!!!
一、DA转化
DIA转换一般由电阻解码网络、模拟电子开关、基准电压、运算放大器等组成。按电阻解码网络的组成形式,将D/A转换器分成有权电阻解码网络DIA转换器、T型电阻解码网络D/A转换器、倒T型电阻解码网络D/A转换器和开关树型电阻解码网络D/A转换器等。
倒T型电阻解码网络D/A转换器只用到两种电阻,精度较高,容易集成化,在实际中使用最频繁。倒T型电阻解码网络DIA转换器介绍D/A转换器的工作原理如下图。
二、DAC0832芯片
DAC0832是采用CMOS工艺制成的电流型8位T型电阻解码网络D/A转换器芯片,是DAC0830系列的一种。它的分辨率为8位,满刻度误差+1LSB,线性误差+0.1%,建立时间为1μs,功耗20mW。其数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通方式输入。由于DAC0832与单片机接口方便,转换控制容易,价格便宜,所以在实际工作中广泛使用。其接口介绍如下图:
三、仿真与程序
1、仿真:button、AT89C51、tl082(运算放大器)、DAc0832(DA转化芯片)
2、程序
根据仿真可以看出程序的功能:
功能1:根据按键调PWM占空比
功能2:显示三角波
功能三:显示正弦波
#include "reg51.h"
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^2;
uint flat=0,m=0;
//code:不占用单片机内存空间
code unsigned char sin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,
0xab,0xae,0xb1 ,0xb4,0xb7 ,0xba,0xbc,0xbf,0xc2,0xc5,0xc7 ,0xca,0xcc,0xcf,0xd1 ,0xd4,0xd6,
0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7 ,0xe9,0xea,0xec,0xee,0xef,0xf1 ,0xf2,0xf4,0xf5,
0xf6, 0xf7 ,0xf8,0xf9,0xfa,0xfb ,0xfc ,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7 ,0xf6,0xf5,0xf4,0xf2,0xf1 ,0xef,0xee,
0xec,0xea,0xe9,0xe7 ,0xe5,0xe3,0xe1,0xde ,0xdd,0xda,0xd8,0xd6,0xd4 ,0xd1 ,0xcf,0xcc,
0xca,0xc7 ,0xc5,0xc2,0xbf,0xbc,0xba,0xb7 ,0xb4,0xb1 ,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,
0x69,0x66,0x63,0x60,0x5d,0x5a,0x57 ,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,
0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b, 0x0a,0x09,0x08,0x07 ,0x06 ,0x05,0x04,0x03,
0x02,0x02,0x01 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 ,0x02,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,
0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,
0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51 ,0x55,0x57 ,0x5a,0x5d,0x60,0x63,0x66,
0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}; //正弦表
void delay(uint n)
{
uint i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<120;j++);
}
}
void PWM()
{
P2=0;
delay(100);
P2=255;
delay(m);
}
void key()
{
if(key1==0&&flat==0)
{
flat=1;
}
if(key1==1&&flat==1)
{
m=m+10;
flat=0;
}
if(key2==0&&flat==0)
{
flat=1;
}
if(key2==1&&flat==1)
{
m=m-10;
flat=0;
}
}
void stair()
{
uint i=0;
for(i=0;i<255;i++)
{
P2=i;
delay(5) ;
}
}
void stair1()
{
uint i=0;
for(i=0;i<255;i++)
{
P2=sin[i];
// delay(5) ;
}
}
void main()
{
while(1)
{
stair1();
// key();
// PWM();
}
}
四、总结
学会DAC0832的使用,
PWM占空比通过延时来调整
需要显示三角波只需要使用一个for循环
正弦波的显示分为256个十六进制,但是实验结果可知细分下去还是方波,说明越细分,显示效果越好!!!