目录
一、功能描述
通过单片机 IO口生成 PWM波来模拟 DAC输出。本次实验要实现的功能是:系统运行时,DAC(PWM)模块上的指示灯 DA1呈呼吸灯效果,由暗变亮再由亮变暗。
二、DAC介绍
DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
2.1 T型电阻网咯DAC
- 分析图中运算放大器:由“虚短”和“虚断”可知V0=-l0×Rfb。
- 分析可知:I1=2I0、I2=4I0、I3=8I0....I7=128I0。Vref=I7×2R,所以I0=Vref/256R。
- 所以V0=
2.2 PWM模拟DAC输出
出于成本考虑,在实际开发应用中,使用较多的是通过 PWM来模拟 DAC输出。
- 设置一个比较值。
- 定时器产生一个定时自增的数,如果小于比较数就是低电平0,大于比较数就是高电平1。
三、测试文件test.c
#include <REGX52.H>
#include"Timer0_Init.h"
#include"Delay.h"
sbit DA=P2^1;
unsigned char counter,setnum;
int main()
{
unsigned char i=0;
Timer0_Init();
while(1)
{
for(i=0;i<100;i++)
{
setnum=i;
Delay(10);
}
for(i=100;i>0;i--)
{
setnum=i;
Delay(10);
}
}
}
void Timer0_ISR() interrupt 1
{
TH0=0xFF; //100us
TL0=0xA4;
counter++;
if(counter>=100){counter=0;}
if(counter>=setnum)
{
DA=1;
}
else
{
DA=0;
}
}
四、实验现象
开发板上DA1这个LED灯以呼吸灯的方式闪烁。