程控放大器的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开放实验报告

课题名称程控放大器的设计

学生姓名

系、年级专业信息工程系、11、12级电子信息工程指导教师王少杰

2014年 5 月15日

程控放大器的设计

一.实验目的

1、了解程控放大器原理。

2、掌握在Proteus中进行电子电路设计与仿真方法。

3、学会Proteus虚拟仪器仪表的使用。

二.实验内容

1、在Proteus中,设计基于数字电位器的程控放大器,并进行仿真。

2、在Proteus中利用虚拟仪器仪表测量放大器的技术参数。

三.电路设计

1、程控放大器原理

2、程控放大器电路

3、程序设计

4、仿真结果与分析

5、结论

1、程控放大器电路原理如下:

其工作原理是:

通过单片机的SPI总线来控制数字电位器MCP41010,通过对数字电位器MCP41010写时序能够操作操控MCP41010的阻值大小,进一步控制电路中的电压大小,实现单片机对电路电压的放大与缩小。

四.实验分析

MCP41010是数字电位器MCP41XXX系列中的10K阻值的数字电位器,内部有256个抽头,能够精确地对电压实现放大与缩小,采用低功耗CMOS技术,结口是SPI串行接口,最大INL和DNL误差为1LSB,静态工作电流最大值为1uA,关断功能可断开所有的电阻电路,最大限度的节能功耗,单电源工作(2.7V-5.5V),在上电时抽头复位到半量程(80h),MCP41XXX系列数字电位器分为变阻器模式和电位器模式。本次试验使用MCP41010的变阻器模式,通过对单片机的P1.5,P1.6,P1.7(CS,SI,SCK)三个引脚进行输出控制,利用单片机的计数功能对外部按键(增大,减少)进行计数,单片机内部通过按键数多少对MCP41010时序写入,进一步控制MCP41010的抽头数,来改变电路的电压大小,实现程序控制电压的放大与缩小。

五.仿真结果

仿真开始

放大波形

缩小波形

源程序附后:

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar code P_P0[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uchar code P_Pshi[]={0x40,0x79,0x24,0x30,0x19,0x12,0x12,0x78,0x00,0x10};

sbit K1=P3^4;

sbit K2=P3^5;

sbit CS=P1^5;

sbit SI=P1^6;

sbit SCLK=P1^7;

uchar i=0,j=0,k=200,Count=175;

void delay(uint x) //延时

{

while(x--);

}

void Send_Data(uchar x) //发送数据

{

uchar n=2, i,command=0x11;

CS=0;

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

{

SCLK=0;

if(command&0x80)

{

SI=1;

}

else

{

SI=0;

}

SCLK=1;

for(;n!=0;n--);

command<<=1;

}

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

{

SCLK=0;

if(x&0x80)

{

SI=1;

}

else

{

SI=0;

}

SCLK=1;

for(;n!=0;n--);

x<<=1;

}

for(;n!=0;n--);

CS=1;

}

void Key_read(void) //读按键{

if(K1==0)

{

Send_Data(Count);

i=0;

do

{

i++;

Send_Data(Count);

}while(K1==0);

}

if(K2==0)

{

Send_Data(Count);

j=0;

do

{

j++;

Send_Data(Count);

}while(K2==0);

}

}

void led_scan(void) //数码管显示{

P0=P_Pshi[k/100];

P2=0x01;

delay(125);

P2=0x00;

P0=P_P0[k/10%10];

P2=0x02;

delay(125);

P2=0x00;

P0=P_P0[k%10];

P2=0x04;

delay(125);

P2=0x00;

P0=P_P0[0];

P2=0x08;

delay(125);

P2=0x00;

}

void main()

{

IE=0x8a;

IP=0x02;

TMOD=0x66;

TH0 = 255;

TL0 = 255;

TH1 = 255;

TL1 = 255;

TCON=0x55;

while(1)

{

Send_Data(Count);

Key_read();

led_scan();

}

}

void timer0(void) interrupt 1

{

if(i>20)

相关文档
最新文档