《微机原理及应用》课程自主学习报告.docx
《《微机原理及应用》课程自主学习报告.docx》由会员分享,可在线阅读,更多相关《《微机原理及应用》课程自主学习报告.docx(13页珍藏版)》请在冰豆网上搜索。
《微机原理及应用》课程自主学习报告
《微机原理及应用》课程自主学习报告
一、单片机与D/A转换器组成波形发生器
单片机处理的是数字量。
然而,在单片机的实时控制和智能仪表等应用系统中,被控制量或被测对象的有关参量往往是一些连续变化的模拟量,如温度、压力、流量等物理量。
这些模拟量必须转化成数字量后才能输入到计算机进行处理。
计算机处理的结果也常常需要转化成模拟信号,驱动相应的执行机构,实现对被控对象的控制。
如果输入是非电量的模拟信号,还需通过传感器转换为电信号并加以放大。
这时就需要解决单片机的D/A、A/D的接口技术问题。
本次,就D/A转换器原理及简单应用进行了学习。
将数字量转换成模拟量的过程称为数/模转换(DigittoAnalog,D/A),实现D/A转换的设备称为D/A转换器或DAC。
1.1D/A转换器的主要技术指标
(1)分辨率
分辨率表示对输入的最小数字量信号的分辨能力,即当输入数字量最低位(LSB)发生一次变化时,所对应输出模拟量的变化量。
它与输入数字量的位数有关。
通常定义刻度值与
之比。
例如,如果满量程为5V,设8位D/A转换,分辨率为5/
=19.5mV,即二进制变化一位可引起模拟电压变化19.5mV。
位数越多分辨率就越高。
分辨率也可用百分比表示,如8位DAC的百分比分辨率为0.4%。
(2)建立时间
建立时间是描述转换速度快慢的一个重要参数,是D/A转换器输入数字量为满刻度值(各二进制各位全为1)时,从输入信号到模拟量电压输出达到满刻度值或满刻度值的某一百分比(如99%)所需的时间(也可表述为:
从输入数字量到转换结束,输出达到最终值并稳定(终值误差±1/2LSB)所需的时间。
电流型快(几百ns~几µs),电压型慢。
例:
DAC0808建立时间约150ns,DAC0832为1us。
),也可称之为D/A转换速度。
(3)转换精度
精度参数用于描述D/A转换的精度程度,一般用误差大小表示。
通常以满刻度电压(满量程电压)VFS的百分数形式给出。
例如,精度为±0.1%指的是最大误差为VFS的±0.1%,若VFS为10V,则最大误差为±10mV。
精度不等于分辨率。
(4)线性度
线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。
常以相对于满量程的百分数表示。
如±1%是指实际输出值与理论值之差在满刻度的±1%以内。
1.2典型D/A转换芯片DAC0832
(1)DAC0832简介
DAC0832,8位D/A转换器,片内有输入数据寄存器,可直接与单片机接口。
以电流形式输出,可外接运算放大器。
属于该系列的芯片还有DAC0830、DAC0831,它们可以相互代换。
DAC0832主要特性:
•分辨率8位;
•电流输出,稳定时间为1μS;
•输出电流线性度可在满量程下调节;
•可双缓冲输入、单缓冲输入或直接数字输入;
•逻辑电平输入与TTL电平兼容;
•单一电源供电(+5V~+15V);
•低功耗,20mW。
(2)DAC0832的逻辑结构
逻辑功能:
(3)DAC0832应用
单极性电压输出
由运算放大器进行电流到的电压转换,使用内部反馈电阻。
输出电压值VOUT和输入数字量D的关系:
VOUT=-VREF×D/256
D=0~255,VOUT=0~-VREF×255/256
VREF=-5V,VOUT=0~+(255/256)V
VREF=+5V,VOUT=0~-(255/256)V
双极性输出
如果实际应用系统中要求输出模拟电压为双极性,则需用转换电路实现。
其中R2=R3=2R1
VOUT=2×VREF×D/256-VREF=(2D/256-1)VREF
D=0,VOUT=-VREF;
D=128,VOUT=0;
D=255,VOUT=(2×255/256-1)×VREF=(254/255)VREF
即:
输入数字为0~255时,输出电压在-VREF~+VREF之间变化。
程控电压放大器
1.3DAC8080原理及应用
DAC0808引脚功能
DAC0808是8位数模转换集成芯片,电流输出,稳定时间为150ns,驱动电压±5V,33mW。
DAC0808可以直接和TTL,DTL和CMOS逻辑电平相兼容。
引脚功能
A1—A8:
8位并行数据输入端(A1为最高位,A8为最低位)
VREF(+):
正向参考电压(需要加电阻)
VREF(-):
负向参考电压,接地
IOUT:
电流输出端
VEE:
负电压输入端
COMP:
compensation(补偿),补偿端,与VEE之间接电容(R14=5kΩ时,(R14为14引脚的外接电阻),一般为0.1uF,电容必须随着R14的增加而适当增加)
GND:
接地端,VCC:
电源端,在proteus中都已隐藏。
DAC0808典型电路
如下图所示,VEE接-5V电压,COMP端与VEE之间接0.1uF电容,VREF(+)通过5K电阻接+5V电源,VREF(-)接地。
输出端IOUT连接运算放大器反向输入端。
运算放大器同相输入端接地。
方形波的产生:
Proteus仿真运行后示波器界面:
C程序如下:
#include
voidDelay10ms(void)//误差0us
{
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
voidmain(void)
{
while
(1)
{
P2=0x00;
Delay10ms();
P2=0xff;
Delay10ms();
}
}
二、单片机与DS18B20接口
2.1单总线(1-Wire)简介
1-Wire是美国Dallas公司的一项专有技术,它使用一根导线进行信号双向传输,具有接口简单、容易扩展等优点。
所有的1-Wir总线器件都具有一个共同的特征;无论是芯片内还是iButton内,在出厂时每个器件都有一个与其它任何器件互不重复的固定的序列号。
也就是说,每一个器件都是唯一的。
一旦器件的序列号已知,通过这个序列号,任意一个器件都可以从众多连到同1-Wire总线的器件中被选出用于通信。
2.2DS18B20简介
DS18B20是美国Dallas公司推出的数字温度传感器。
它将温度传感器、数字转换电路集成到了一起,外形如同一只三极管。
2.2.1DS18B20的主要特性
1)适合电压范围宽:
3.0~5.5V,在寄生电源方式下可由数据线供电。
2)独特的单线借口方式:
DS18B20与微处理器连接时仅需一条信号线即可实现微处理器与DS18B20的双向通信。
3)测温范围:
-55~+125℃,在-10~+85℃时精度为±0.5℃.
4)可实现9~12位分辨率的编程,对应可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
在9位分辨率时最多在93.75ms内把温度值转化成数字,在12位分辨率时最多在750ms内把温度值转化成数字。
5)支持多点组网功能,多个DS18B20可以并联在一条DQ线上,实现“一线制”单主机—多主机分布式温度采集系统,DS18B20依靠各自的序列号采用分时方式与主控器点对点通讯。
6)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
2.2.2DS18B20的封装和引脚
引脚功能定义如下:
DQ:
数据输入输出,可直接与单片机的I/O口相连。
:
+5V电源电压。
GND:
电源地。
2.2.3DS18B20工作原理
1)测温原理图:
图中低温度系数晶振的震荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1.高温度系数晶振随温度变化其震荡率明显改变,所产生的的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置值将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2技术到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
2)操作流程
1、复位
2、存在脉冲
3、控制器发送ROM指令
4、控制器发送存储器操作指令
5、执行或数据读写
复位时序图
读时序图
写时序图
2.2.4DS18B20的应用
在PROTEUS仿真软件中实现单片机和DS18B20的接口
硬件图:
C源程序:
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineoutP0
sbitsmg1=out^4;
sbitsmg2=out^5;
sbitDQ=P3^7;
voiddelay5(uchar);
voidinit_ds18b20(void);
ucharreadbyte(void);
voidwritebyte(uchar);
ucharretemp(void);
voidmain(void)//主函数
{
uchari,temp;
ucharj;//delay5循环次数控制变量,用于较长时延
for(j=0;j<10;j++)
delay5(100);
while
(1)
{
temp=retemp();
for(i=0;i<10;i++)//连续扫描数码管10次
{
out=(temp/10)&0x0f;
smg1=0;
smg2=1;
for(j=0;j<10;j++)//延时5mS
delay5(100);
out=(temp%10)&0x0f;
smg1=1;
smg2=0;
for(j=0;j<10;j++)//延时5mS
delay5(100);
}
}
}
voiddelay5(ucharn)//延时5uS
{
do
{
_nop_();
_nop_();
_nop_();
n--;
}
while(n);
}
voidinit_ds18b20(void)//函数:
DS18B20初始化
{
ucharx=0;
DQ=0;
delay5(120);
DQ=1;
delay5(16);
delay5(80);
}
ucharreadbyte(void)//读取1字节数据
{
uchari=0;
uchardate=0;
for(i=8;i>0;i--)
{
DQ=0;
delay5
(1);
DQ=1;//15us内拉释放总线
date>>=1;
if(DQ)
date|=0x80;
delay5(11);
}
return(date);
}
voidwritebyte(uchardat)//函数:
写1字节
{
uchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;//写1,在15us内拉低
delay5(12);//写0,拉低60us
DQ=1;
dat>>=1;
delay5(5);
}
}
ucharretemp(void)//函数:
读取温度
{
uchara,b,tt;
uintt;
init_ds18b20();
writebyte(0xCC);
writebyte(0x44);
init_ds18b20();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}
三、心得与反思
首先,本人觉得《单片机原理及其应用》这门课程有点难,专业术语太多了,看起来、听起来都很陌生,不太容易理解。
但慢慢发现这门课非常有趣,实用性非常强,我认为这门课和《C语言程序设计》是所学课程中最具有实用价值的课程。
老师上课也挺好的,上课时可根据李老师图文并茂的PPT上机实践,但是不同人的理解能力各不相同,老师讲的理论知识我总是稀里糊涂的,一讲到某个知识点我就会反问自己“为什么?
”,虽然老师解释了,但是还是不太懂……老师是不是可以用更加通俗易懂的语言文字来教学呢?
单片机的学习其实是非常有意思的,我感觉课时安排还是比较少,单片机的概念刚建立起课程就结束了,实验课也就只有几次,有点遗憾。
这也体现了大学学习的真谛:
自主学习为主,老师传道授业解惑为辅!
“书读百遍,其义自见”,平时还是应该多看看单片机原理书,扫扫冒,书看的多了,自然而然就慢慢理解了。
最后留下一句话勉励自己:
越有差距,越要努力;越有困惑,越得看书!
参考文献——
《单片机原理与应用及C51编程技术》高雪芹
——机械工业出版社
上课用教材及PPT