简易DA转换器设计报告Word下载.docx
《简易DA转换器设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《简易DA转换器设计报告Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
![简易DA转换器设计报告Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/30/4bdb2da9-fc10-48ca-aa9f-3a875811c04b/4bdb2da9-fc10-48ca-aa9f-3a875811c04b1.gif)
PWM频率=系统时钟频率/(分频系数*2*计数器上限值))
相位修正PWM模式对占空比的调节精度高,虽然输出频率较低,只要调整好二阶低通滤波电路的截止频率,并不影响模拟电压的转换。
因此采用此方案,并且选用定时器1的10位相位修正PWM模式。
2、D/A转换的低通滤波电路的选择
2.1、方案一、用PWM模式产生不同占空比的脉冲信号,通过滤波器滤掉PWM信号中的高频信号便可得到模拟电压信号。
一阶RC低通滤波电路设计简单,计算方便,其截止频率计算公式为:
fc=1/2*pi*R*C
但是一阶滤波电路的幅频特性曲线较平滑,滤波效果相比二阶低通滤波电路较差,可能由此造成系统误差,使输出的模拟电压的误差增大,因此我们不选择此方案。
电路如图所示。
2.2、方案二、此方案我们采用二阶低通滤波电路,其截止频率计算公式为:
fc=0.3742/2*pi*R*C
二阶低通滤波电路在计算时较为复杂,并且电路也比一阶电路复杂,但是由于其幅频特性曲线陡峭,滤波效果明显比一阶低通滤波电路好。
因此我们选用此方案。
电路图如图所示。
3、方波及三角波方案论证与选择
3.1、方案一、
选择定时器1的快速PWM模式,TOP值为OCR1,比较匹配时电平取反,即可在0C1A引脚输出方波,通过改变0CR1的值即可改变方波的频率。
3.2、方案二
选择定时器1的CTC模式,OCR1为匹配值,比较匹配时电平取反,即可在0C1A引脚输出方波,通过改变OCR1匹配值即可改变方波的频率。
我们选用方案二。
3.3、方波幅度可变方案
将单片机发出的方波通过运算放大器,将运放电路设计成增益可变电路,通过可调电阻改变增益的大小来改变方波的幅度,电路图如下:
3.4、发出三角波的方案
将方波输入有源积分电路就可将方波转换成三角波,有源积分电路图如下:
4、正弦波方案论证与选择
4.1、方案、首先按照下面的公式建立一个正弦波样本表,样本表将一个正弦波周期分为128个点,每点按7位量化(127对应最高幅值Vcc/2):
f(x)=64+63*sin(2πx/180)x∈[0…127]
如果在一个正弦波周期中采用128个样点,那么对应1KHz的正弦波PWM的频率为128KHz。
实际上,按照采样频率至少为信号频率的2倍的取样定理来计算,PWM的频率的理论值为2KHz即可。
考虑尽量提高PWM的输出精度,实际设计使用PWM的频率为16KHz,即一个正弦波周期(1KHz)中输出16个正弦波样本值。
这意味着在128点的正弦波样本表中,每隔8点取出一点作为PWM的输出。
4.2、部分程序如下:
unsignedcharx_SW=8,X_LUT=0;
voidtimer0_ovf_isr(void)
{
X_LUT+=x_SW;
//新样点指针
if(X_LUT>
127)X_LUT-=128;
//样点指针调整
OCR0=auc_SinParam[X_LUT];
//取样点指针到比较匹配寄存器
}
voidmain(void)
DDRB|=0x10;
//PB4(OC0)输出
TCCR0=0x71;
//相位调整PWM模式,分频系数=1,正向控制OC0
TIMSK=0x01;
//T/C0溢出中断允许
SEI();
//使能全局中断
while
(1)
{……};
}
每次计数器溢出中断的服务中取出一个正弦波的样点值到比较匹配寄存器中,用于调整下一个PWM的脉冲宽度,这样在PB4引脚上输出了按正弦波调制的PWM方波。
当PB4的输出通过一个低通滤波器后,便得到一个980.4Hz的正弦波了。
如要得到更精确的1KHz的正弦波,可使用定时/计数器T/C1,选择工作模式10,设置ICR1=250为计数器的上限值。
三、软件设计
1.PWM方式的D/A转换软件设计
用PWM方式实现D/A转化时,我们选择定时器1的10位相位修正PWM模式,向上匹配清零OC1B,向下匹配置位OC1B,此时定时器的TOP值等于1023,我们用按键写入8位二进制数,然后将二进制数转换成10进制数,再将此十进制数乘上8转换成相应占空比对应的匹配值,再将匹配值写入,即可完成占空比的调整。
流程图如下:
部分程序如下:
if(Key1_Flag==1)//写入二进制数0
{
find_Dnum();
write_data(num_D[0]);
num++;
Key1_Flag=0;
if(num==9)
DA_num=8*math_num;
OCR1B=DA_num;
get_Vnum(math_num);
}
if(Key2_Flag==1)//写入二进制1
write_data(num_D[1]);
num++;
ADD_num();
Key2_Flag=0;
if(num==9)
}
2.方波软件设计
用按键输入频率值,f0cnA=fclk_i/o/(2*n*0CRnA)通过此公式将频率值转换成相应的匹配值写入匹配寄存器中,即可输出对应频率的方波,部分程序如下:
if(xHz_flag==1)
{
temp=(4000000/sum)-1;
}
else
sum=sum*1000;
TCCR1B=0x00;
//关闭定时器
TCNT1=0x00;
//清零计数器
ASSR=0x00;
//关闭异步计数模式
TCCR1A=0x40;
//OC1A输出,匹配时电平取反
OCR1A=temp;
//匹配值
TCCR1B=0x09;
//CTC模式,预分频为1
Key4_Flag=0;
sum=0;
3.正弦波软件设计
正弦波的软件设计在方案中已经详细的说明,在这不再重复说明。
四、系统测试结果
为了确定系统与题目要求的符合程度,我们对系统中的关键部分进行了测试。
测试仪器:
示波器,万用表。
1.基本要求:
(1)输入八位数字量能够转换成相应的模拟量,模拟输出为0~5伏,即当输入00000000时输出为0V,输入为11111111时输出为5V
(2)输出电压误差不大于10%
(3)采用按键或拨码输入数字量,并能显示出来
1)以下是我们组随机选取了10组数据,并测出实际值U1,计算出理论值U及误差:
二进制数
1010
1011
1111
0000
0101
0011
1000
0111
U1V
3.32
4.97
0.00
1.64
1.60
3.20
0.27
2.62
2.30
2.77
UV
3.35
5.00
1.65
1.61
3.22
0.28
2.64
2.34
2.79
误差
0.009
0.006
0.000
0.035
0.007
0.017
平均误差=0.99%<
10%
2.发挥部分
要求:
(1)可通过按键切换,使输出能产生三角波和方波;
(2)输出方波和三角波幅度可调,误差不大于10%;
(3)输出的三角波和方波频率可调,误差不大于10%;
(4)能够输出正弦波,要求波形无明显失真,频率和幅度与设定值误差在10%以内
1)方波幅度
实际幅度
理论幅度
振幅误差
-1.2—3.2V
-1.2-3.2V
0%
2)三角波及方波频率
实际频率
理论频率
频率误差
80HZ
100HZ
500HZ
1KHZ
2KHZ
10KHZ
30KHZ
50KHZ
3)正弦波的频率与幅度
1.32
1.36
频率误差=0%
振幅误差=2.9%
结论
这次比赛给了我们一个平台,使我们从枯燥的课本理论知识中走了出来,走到实际的工程应用中去。
综合应用电子技术知识和技能,灵活的设计应用具体的电路,设计制作出符合要求的系统作品。
在这一过程中,我们的理论知识认知水平、电路设计能力、分析解决问题的能力都有了大幅度的提高。
作为团队的一员,我们彼此相互团结,竭诚协作、共同提高。
通过这次比赛我们对团队精神有了更深的认识。
在这次比赛的过程中,我们遇到了各种各样的问题,但是我们没有沮丧、气馁,更没有妥协。
面对问题我们冷静分析,逐步排除各种可能的原因,经过苦苦的探索最终所有问题都得以完美解决。
我们能在如此短的时间里完成较为复杂的系统作品,得益于平时老师的谆谆教导,以及学校社会等各界的支持和帮助。
当然,我们的设计还存在着一些缺陷,在此恳请各位老师批评指正,以便我们能在将来设计中进一步改进提高。
参考文献:
1.《AVR单片机》张军中国电力出版社
2.《电路分析(第2版)》胡翔俊高等教育出版社
3.《模拟电路分析与设计基础》吴援明唐军科学出版社
4.《电子设计从零开始》杨欣王玉凤刘湘黔清华大学出版社