电子系统设计实践报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电气工程学院基于51单片机的低通滤波器
系统设计报告
姓名:胡雄飞孟旭迪
学号:**********,**********
专业:测控技术与仪器(电类)
2016年 5 月25 日
低通滤波器的设计
完成人:胡雄飞(电测控31);孟旭迪(电测控31)
摘要:51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL 公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
这次电子系统设计是以单片机为基础,设计一个低通滤波器。利用单片机外接数模和模数转换器,运算放大电路,以及FT2232,达到与上位机通讯的目的,通过上位机进行数据处理,从而达到滤波的目的。也就是说下位机为单片机,控制DA,AD,FT2232的工作,以及串口通讯。上位机为Labview虚拟仪器,用于数据采集,数据存储,和数据的处理。
关键词:低通滤波器上位机采样 AD DA 串口
1.设计要求
低通滤波器是容许低于截止频率的信号通过,但高于截止频率的信号不能通过的电子滤波装置。在电子系统中应用得很多。
本课题设计的频率计应达到如下指标:
1.AD能很好的工作,DA也能正常运作(虽然不会用到)
2.串口通讯能达到数据基本的传输不丢失,能传输十位的AD采集数据;
3.上位机数据能够正常的接收,存储并处理数据
4. 低通滤波器上位机前面板的低通截至频率能够调整,滤波器阶数可调。
5. 滤波后的波形不会畸变,滤波结果完好,波形圆滑;
2.总体设计
2.1系统组成及工作原理
AT89C51单片机时钟电路采用内部方式,外接陶瓷谐振器(频率为
11.0592MHz)。DAC0832来进行DA转换,FT2232进行数据的传输,串口通讯。基于Labview的虚拟仪器上位机。
系统的总体框图
2.2
低通滤波器的原理
模拟信号可以通过数/模转换器转换成数字信号,因此可通过产生数字信号上传给上位机的方法来获得所需要的数据,Labview处理数据,进行DA转换,51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,AD功能。
单片机和上位机是整个滤波器的核心部分,通过程序的编写和执行,对模拟信号进行模数转换,并通过下位机传输数据,上位机接受数据,上位机进行数据处理,DA转换,波形滤波。
3硬件设计
3.1整体硬件组成 DA部分。
单片机以及AD部分
3.2系统核心模块
上位机模块
4.系统测试及工程4.1系统测试
4.1.1上电测试
首先仔细检查了电路板的电气连接,检查完了各处是否有虚焊的情况,然后用万用表测试了VCC和GND之间的电阻,发现电阻为25.961K,说明此时板子内部没有出现短路的状况。
4.2.2 串口测试:
串口测试的程序:
#include
#include
#define SYSCLK 11059200 //MHz
#define BAUD 9600 //串口波特率
#define times 500 //微秒
#define T2x12 1 //计数脉冲12分频
#define S2RI 0x01
#define S2TI 0x02
sbit clk_A=P1^2; //P1.1做数字输出口线unsigned char th2x,tl2x; //声明变量
unsigned int y;
unsigned char x,i;
main()
{
x=0xa6;
S2CON=0x50; //8位UART,串口使能
put_AUXR_T2x12(1);
y=65536-(SYSCLK/4/BAUD); //计算时间常数
th2x=y>>8; //获取时间常数高8位
tl2x=y; //获取时间常数低8位
T2H=th2x; //置入时间常数高8位
T2L=tl2x; //置入时间常数低8位
AUXR=0x14; //定时器2使能,T2x12=1 //AUXR|=0x01; //sist2=1,使用定时器2作为波特率发生器
IE2=0x01;
EA=1;
S2BUF=0x33; //如果要与LABVIEW通信,必须先发送一个数据,否则程序不进中断
while(1);
}
void uart2() interrupt 8 //中断方式
{
if(S2CON & S2RI) //判断是否S2CON.0(S2RI)=1接收中断
{
S2CON &= ~S2RI; //S2RI=0
x=S2BUF;
S2BUF=x;
}
if(S2CON & S2TI) //判断是否S2CON.1(S2TI)=1接收中断
{
S2CON &= ~S2TI; //S2TI=0
clk_A=~clk_A;
}
}
4.1.2 AD测试:
#include
unsigned int result;
float result_d;
unsigned char flag;
main()
{
P1ASF=0X08; //P1.2为模拟电压输入端
CLK_DIV=0X20; //ADJR位置0,结果存放格式是ADC_RESL的8位加上ADC_RES 的最低两位
ADC_CONTR=0X8B; //ADC上电、选择P1.2为转换通道、转换速度最低、启动ADC 转换
EA=EADC=1; //允许总中断、ADC中断
while(1)
{
if(flag==1)
{
result_d=(result*4.9)/1024; //将结果计算成十进制
ADC_CONTR=0X8B; //重新启动ADC并清除ADC中断标志位(ADC_FLAG)
//当一次转换完成ADC转换控制位(ADC_START)会清0,
//停止再次转换,所以需要再启动一次ADC