AD转换DA转换及pwm转速测量实验.docx

上传人:b****5 文档编号:8376571 上传时间:2023-01-30 格式:DOCX 页数:23 大小:485.71KB
下载 相关 举报
AD转换DA转换及pwm转速测量实验.docx_第1页
第1页 / 共23页
AD转换DA转换及pwm转速测量实验.docx_第2页
第2页 / 共23页
AD转换DA转换及pwm转速测量实验.docx_第3页
第3页 / 共23页
AD转换DA转换及pwm转速测量实验.docx_第4页
第4页 / 共23页
AD转换DA转换及pwm转速测量实验.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

AD转换DA转换及pwm转速测量实验.docx

《AD转换DA转换及pwm转速测量实验.docx》由会员分享,可在线阅读,更多相关《AD转换DA转换及pwm转速测量实验.docx(23页珍藏版)》请在冰豆网上搜索。

AD转换DA转换及pwm转速测量实验.docx

AD转换DA转换及pwm转速测量实验

 

工程实训实验报告

 

单位(二级学院):

自动化学院

学生姓名:

张宝川

专业:

电气工程及其自动化

班级:

0831302

学号:

2013212629

 

实验一、数据采集_A/D转换

一、实验目的

(1)掌握A/D转换与单片机接口的方法;

(2)了解A/D芯片0809转换性能及编程方法;

(3)通过实验了解单片机如何进行数据采集。

(4)ADC0809引脚结构:

ADC0809各脚功能如下:

D7~D0:

8位数字量输出引脚。

IN0~IN7:

8位模拟量输入引脚。

VCC:

+5V工作电压。

GND:

地。

REF(+):

参考电压正端。

REF(-):

参考电压负端。

START:

A/D转换启动信号输入端。

ALE:

地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).

EOC:

转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:

输出允许控制端,用以打开三态数据输出锁存器。

CLK:

时钟信号输入端(一般为500KHz)。

A、B、C:

地址输入线。

二、实验任务

1.硬件电路设计:

设计基于单片机控制的AD转换应用电路。

AD转换芯片采用ADC0809。

ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。

ADC0809的VREF接+5V电压。

2.软件设计:

程序设计内容

(1)进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,经过数据处理之后在数码管上显示。

(2)进行A/D转换之前,要启动转换的方法:

ABC=110选择第三通道。

ST=0,ST=1,ST=0产生启动转换的正脉冲信号

图1.2ADC0809时序图

三、实验代码

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitOE=P1^0;

sbitST=P1^2;

sbitEOC=P1^1;

sbitCLK=P1^3;

sbitC1=P1^6;

sbitC2=P1^5;

sbitC3=P1^4;

unsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigneddate;

voiddelay(unsignedintz)

{

unsignedinti,j;

for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

voiddisplay(unsignedintx)

{

P2=0xfe;

P0=table[x/100];

delay(10);

P0=0x00;

P2=0xfd;

P0=table[x/10%10];

delay(10);

P0=0x00;

P2=0xfb;

P0=table[x%10];

delay(10);

P0=0x00;

}

voidmain()

{

TMOD=0x01;

TH0=(65536-900)/256;

TL0=(65536-900)%256;

TR0=1;

ET0=1;

EA=1;

C1=0;

C2=1;

C3=1;

while

(1)

{

ST=0;

ST=1;

ST=0;

delay

(2);

while(!

EOC)

display(date);

OE=1;

date=P3;

OE=0;

}

}

voidtimer0()interrupt1

{

TH0=(65536-900)/256;

TL0=(65536-900)%256;

CLK=~CLK;

}

四、实验结果

实验二、D/A转换及数字式波形发生器

一、实验目的

1、熟悉DAC0832内部结构及引脚。

2、掌握D/A转换与接口电路的方法。

3、通过实验了解单片机如何进行波形输出。

二、D/A转换器的主要性能参数

(1)分辨率:

该参数是描述D/A转换对输入变量变化的敏感程度。

具体指D/A转换器能分辨的最小电压值。

分辨率的表示有两种:

最小输出电压VLSB(输入数字只有最低位为1)与最大输出电压输入数字全为1)的比值来表示

用输入端待进行转换的二进制数的位数来表示,位数越多,分辨率越高。

分辨率的表示式为:

分辨率=Vref/2位数或分辨率=(V+ref+V-ref)/2位数

若Vref=5V,8位的D/A转换器分辨率为5/256=20mV。

(2)转换时间:

指数字量输入到模拟量输出达到稳定所需的时间。

一般电流型D/A转换器在几秒到几百微秒之内;而电压型D/A转换器转换较慢,取决于运算放大器的响应时间。

(3)转换精度:

指D/A转换器实际输出与理论值之间的误差,一般采用数字量的最低有效位作为衡量单位。

如:

±1/2LSB表示,当D/A分辨率为20mV,则精度为±10mV.

(4)线性度:

当数字量变化时,D/A转换器输出的模拟量按比例变化的程度。

线性误差——模拟量输出值与理想输出值之间偏离的最大值。

三、实验内容

1.AT89C51控制DAC0832实现数/模转换(D/A)转换。

从单片机输出数据到DAC0832,经其转换成模拟量输出。

2.设计一个由单片机控制的信号发生器。

运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。

信号发生器所产生的波形的频率、幅度均可调节。

并可通过软件任意改变信号的波形。

 基本要求:

 

① 产生三种以上波形。

如正弦波、三角波、矩形波等。

  

②最大频率不低于 500Hz。

并且频率可按一定规律调节。

③幅度可调,峰峰值在0~5V之间变化。

  扩展要求:

产生更多的频率和波形。

四、实验代码

#include

sbitkey1=P1^0;

sbitkey2=P1^3;

sbitkey3=P1^6;

#defineucharunsignedchar

#defineuintunsignedint

voidsanjiaobo();

voidfangbo();

voidjuchibo();

voidmain()

{

P1=0xff;

while

(1)

{

if(key1==0)

sanjiaobo();

if(key2==0)

fangbo();

if(key3==0)

juchibo();

}

}

voidsanjiaobo()

{

unsignedinti;

charflag=0;

P2=0;

while

(1)

{

if(flag==0)

{

for(i=0;i<10;i++);

P2+=1;

if(P2>=255)flag=1;

}

if(flag==1)

{

for(i=0;i<10;i++);

P2-=1;

if(P2==0)flag=0;

}

}

}

voidfangbo()

{

unsignedinti;

while

(1)

{

for(i=0;i<1000;i++);

P2=255;

for(i=0;i<1000;i++);

P2=0;

}

}

voidjuchibo()

{

unsignedinti;

charflag=0;

P2=0;

while

(1)

{

if(flag==0)

{

for(i=0;i<10;i++);

P2+=1;

if(P2>=255)

flag=1;

}

if(flag==1)

{

P2=0;

if(P2==0)

flag=0;

}

}

}

五、实验结果

实验三、基于旋转编码器的转速测量

一、实验目的

1.了解编码器工作原理

2.掌握编码器速度检测的方法;

二、编码器工作原理

  绝对脉冲编码器:

APC

  增量脉冲编码器:

SPC

  两者一般都应用于速度控制或位置控制系统的检测元件

旋转编码器分为单路输出和双路输出两种:

单路输出是指旋转编码器的输出是一组脉冲,

双路输出的旋转编码器输出两组相位差90度的脉冲,通过这两组脉冲不仅可以测量转速,还可以判断旋转的方向。

编码器电路外接74HC74的作用

74HC74在旋转编码器旋转时输出两路正交脉冲A、B,为了判断旋转编码器旋转方向,用74HC74做鉴相器。

A作为时钟脉冲接入74HC74,B作为D接入74HC74,理论上74HC74应该在A的上升沿判断B状态,如果B为低电平,则输出Q为低电平,说明旋转编码器正转;如果B为高电平,则输出Q为高电平,说明旋转编码器反转。

因为A、B是正交脉冲,只要旋转编码器旋转方向不变,74HC74的输出Q就应该维持高电平或低电平状态。

 

三、实验内容

1.根据旋转编码器的工作原理,设计基于旋转编码器的速度检测原理图;

2.利于实验室提供的单片机最小系统,设计位置检测、速度检测系统的应用电路;画出系统框图;

3.编写相关程序,实现对位置及转速的测量,并显示;

四、实验代码

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitIN1=P1^0;

sbitIN2=P1^1;

sbitENA=P1^2;

sfrldata=0x80;

sbitdula=P2^6;

sbitwela=P2^7;

sbitq1=P3^4;

bitbit_0;

uintcount_N,count_N1,count_N2;

uintcount_n8;//计数值

ucharT_N=20;

ucharT_N1=3;

voidmsplay(uchar,uchar);

voidINT_0_Init();

voidTimer0_Init();

voidMotor_Init();

ucharcodex1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x40,0x7c,0x39,0x5e,0x3e,0x48};

ucharcodex2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

ucharcodex3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharcodex4[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voiddelay(uintz)//延时函数

{

uintx;

for(x=z;x>0;x--);

}

voidMotor_Init()

{

ENA=1;

IN1=1;

IN2=0;

}

voidINT_0_Init()

{

IT0=1;

EX0=1;

}

voidTimer0_Init()

{

TMOD=0X11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidmain()

{

uchark5,k4,k3,k2,k1,k0,k6;

INT_0_Init();

Timer0_Init();

while

(1)

{

k0=0x0e;

k1=0x0f;

if(!

q1)

{

k6=0;

}

else

{

k6=10;

}

if(!

bit_0)

{

k2=count_N%10000/1000;

k3=count_N%1000/100;

k4=count_N%100/10;

k5=count_N%10;

bit_0=1;

}

msplay(k0,0);

msplay(k1,1);

msplay(k6,3);

msplay(k2,4);

msplay(k3,5);

msplay(k4,6);

msplay(k5,7);

}

}

voidint_0()interrupt0

{

count_n8++;

}

voidtimer0()interrupt1

{

TR0=0;

TH0=(65536-45000)/256;

TL0=(65536-45000)%256;

T_N--;

if(0==T_N)

{

count_N2=count_n8;

count_N=27.952*count_N2;

bit_0=0;

count_n8=0;

T_N=20;

}

TR0=1;

}

voidmsplay(uchary1,uchary2)

{

ldata=x1[y1];

if(y2==6)

{

ldata=ldata|0x80;

}

dula=1;

dula=0;

delay

(1);

ldata=x3[y2];

wela=1;

wela=0;

delay

(1);

ldata=0x00;

dula=1;

dula=0;

delay

(1);

ldata=0x0ff;

wela=1;

wela=0;

delay

(1);

}

五、实验结果

 

实验四、基于51系列单片机控制的直流电机PWM调速

一、实验目的

1.掌握脉宽调制(PWM)的方法。

2.用程序实现脉宽调制,并对直流电机进行调速控制。

二、脉宽调制(PWM)基本原理

控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。

也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。

按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

利用51单片机产生PWM脉冲思路:

需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。

用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。

编程思路是这样的:

T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

L298N为SGS-THOMSONMicroelectronics所出产的双全桥步进电机专用驱动芯片(DualFull-BridgeDriver),内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号。

三、实验内容:

1.利用实验室提供的单片机应用系统及直流电机驱动电路板,编制控制程序,实现直流电机PWM调速控制。

四、实验代码

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeLEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbitIN1=P1^0;

sbitIN2=P1^1;

sbitENA=P1^2;

sbitKey1=P3^5;

sbitKey2=P3^6;

sbitKey3=P3^7;

uintVelocity1=50;

uintcount=50;

uinttime=100;

uintcount1=0;

uinttime1=0;

uintvelocity=0;

uintm=0;

voiddelayms(uintms)

{

uchari;

while(ms--)

for(i=0;i<120;i++);

}

voiddisplay(uintresult)

{

P2=0xf7;

P0=LEDData[result%100%10];

delayms

(2);

P0=0x00;

P2=0xff;

P2=0xfb;

P0=LEDData[result%100/10];

delayms

(2);

P0=0x00;

P2=0xff;

P2=0xfd;

P0=LEDData[result/100];

delayms

(2);

P0=0x00;

P2=0xff;

}

voidInit()

{

ENA=1;

IN1=0;

IN2=1;

IT0=1;

EX0=1;

TMOD=0x11;

TL0=(65536-5)/256;

TH0=(65536-5)%256;

TR0=1;

ET0=1;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

TR1=1;

ET1=1;

EA=1;

}

voidKeyScan()

{

if(Key1==0)

{

delayms(5);

if(Key1==0)

{

Velocity1++;

while(!

Key1);

}

}

if(Key2==0)

{

delayms(5);

if(Key2==0)

{

Velocity1--;

while(!

Key2);

if(Velocity1==0)

Velocity1=1;

}

}

if(Key3==0)

{

delayms(5);

if(Key3==0)

{

IN1=~IN1;

IN2=~IN2;

while(!

Key3);

}

}

}

voidmain()

{

Init();

while

(1)

{

KeyScan();

display(velocity);

}

}

voidInt0()interrupt0

{

count1++;

}

 

voidtimer0()interrupt1

{

TR0=0;

TL0=(65536-5)/256;

TH0=(65536-5)%256;

count--;

if(count==0)

{

ENA=0;

count=1;

}

time--;

if(time==0)

{

ENA=1;

time=100;

count=Velocity1;

}

TR0=1;

}

voidtimer1()interrupt3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

time1++;

if(time1==20)

{

if(count1!

=0)

{

m=count1;

}

time1=0;

velocity=(uint)((m*60.0)/(24.0*1.0));

count1=0;

}

}

 

 

五、实验结果

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1