您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > C8051F020单片机完成16路信号源的输出
系统集成与应用实验报告2013/2014学年第2学期学生姓名:*杰学号:*学院:仪器与电子学院专业:电子科学与技术题目:用C8051F020单片机完成16路信号源的输出指导教师:焦新泉2014年5月15日一、设计任务与要求用C8051F020单片机完成16路信号源的输出,并通过单片机内部A/D转换器进行输出信号源的反馈采样,最后通过异步串行接口(UART)将采样结果输出。利用C8051单片机将波形量化数据放置于内部ROM,通过内部D/A产生信号以及I/O端口控制多路模拟开关,同时生成16路信号源,注意信号源调理电路中采保部分的选值,并给出理论计算结果。反馈回采部分采用单片机的12位高精度A/D转换器,采样频率自定(要求给出理论计算值),并通过UART接口将采样值送出,按9600bps的波特率发出(接收对象可以是计算机或其它)。二、系统方案论证本系统有DA输出部分、AD反馈部分、串口输出部分组成,系统框图下:单片机多路模拟开关采样保持部分滤波电路放大部分输出16路信号输入16选1开关跟随输入URAT输出电脑上位机ADDA图1.系统流程图1.单片机部分单片机选用C8051F020,是完全集成的混合信号系统级MCU芯片,具有64个数字I/O引脚;具有12位100kps的8通道ADC,带PGA和多路模拟开关;具有2个12位DAC,具有可编程数据更新方式;64K可在系统编程的FLASH存储器;4352字节的片内RAM;可寻址64K字节地址空间的数据存储器接口:2个UART串行接口。基于以上优良特性,故选用该单片机。单片机具有上电复位、掉电复位、外部复位、软件强制复位等多种复位方式。在应用中外部复位方式得到广泛应用。外部/RST引脚提供使用外部电路使单片机强制复位的手段。在外部/RST引脚加一个低电平有效信号,将使单片机复位,最好提供一个外部上拉,或对RST引脚去耦以防止噪声引起复位。图2.C8051F020单片机及其外部电路1.1下载电路C8051F020单片机具有片内JTAG边界扫描和调试电路,通过4脚JTAG接口并使用安装在最终应用系统中的产品器件就可以进行非侵入式全速的在系统调试。图3.C8051F020单片机下载电路1.2电平转换电路通过MAX232芯片实现232电平与TTL电平的转换,以完成单片机与主机之间的通信。图4.C8051F020电平转换电路2.系统电源设计部分系统中电源电路的稳定性具有重要作用,电源电路是系统正常运转的基本要求。在该系统采用12V可充电锂电池进行供电。通过LM-1117芯片将5V转为3.3V使单片机可在3.3V电压下稳定工作。此外系统还需要通过MC34063芯片提供正负12V的电源对采样保持电路以及放大电路进行供电。图55V转3.3V电路图65V转12V电路3.多路模拟开关部分多路模拟开关采用CD4067。CD4067为CMOS16选1双向模拟开关,可用于数字传输、信号分时处理、多路巡回监测电路中,与单片机I/O端口连接,能很方便的实现生产测控。也可与其他CMOS电路连接成数控网络、多路分配器等,设计出多种实用电路。CD4067相当于一个单刀十六掷开关,具体接通哪一通道,由输入地址码ABCD来决定。图7多路模拟开关电路4.信号调理部分4.1采样保持部分采样保持电路部分采用的是AD781集成采样保持芯片,该芯片采用双电源供电,S/H端接入脉冲进行控制采样。图8采样保持电路4.2滤波器部分图9二阶低通巴特沃斯滤波电路为满足以上要求故采用一个无限增益多路反馈型低通滤波电路。在该电路中通带增益Kp=1,截止频率fc=300HZ,由下表知C1=0.1UF有电容C1的实际值,按照下面公式计算电阻换标系数KK=100/(fc*C1)式中C1单位为μF,fo的单位为Hz。由下表确定电容C2和电阻R1、R2、R3的值。计算如下:Ko=100/(fc*C1)=3.3R1=Ko*3.111=9.33KR2=Ko*4.072=13.44KR3=Ko*3.11=9.33KC2=0.2C1=0.02uF仿真电路:图10.仿真电路仿真波形:下图波形,蓝色为输入信号,频率为1KHZ,其输出振幅很小,基本实现了滤波器的功能。图11.仿真波形图12.幅频特性图13.相频特性4.3放大输出部分本系统要求放大输出电压为5V,而在输出前电压最大为2.4V,故需要进行放大。系统采用LM324运放进行反相放大,增益为2.2,其放大电路如下图所示:图14.放大输出电路图15.仿真波形5.串行通信方式的选择与上位机的选择单片机通过URAT发送数据至上位机长采用以下2种方法即通过蓝牙或TTL转串口线将单片机数据发送到电脑上位机。其中由于蓝牙使用较为方便,故采用集成蓝牙模块。上位机需要直观显示单片机发出数据,故采用Serial_Digital_ScopeV2。6.系统软件设计单片机C8051F020的管脚有100个,不是每一个都需要连接,我们只关心我们需要的引脚输入输出的关系在该芯片中我们需要用到的是DACO作为波形的输出口,AINO.O作为A/D转换的输入口,XTAL1和XTAL2作为振荡器的输入端口,WR作为UARTO的输出端给上位机发送数据,端口P1.6作为一个信号灯的显示窗口接入一个发光二极管,这样就可以看到芯片什么时候是在干什么工作的,P1.5是给采样保持电路一个采样的信号,/RST作为外接的一个复位信号,当单片机跑飞的时候可以手动复位最新工作5.2划分程序模块,编写程序流程图系统软件由主程序,D/A产生子程序,UARTO子程序,晶体振荡子程序,交叉开关和通用IO口子程序,定时器1,3,4子程序,和分别的溢出中段构成○1初始化:设定该芯片的看门狗电路启动,时钟使用22.1184MHz晶体为时钟源,打开定时器l,3,4使得DACO,A/D和UARTO开始工作,调用各子程序○2当A/D对信号进行采样的时候外部的LED灯亮,灭的时候是等待采样结果上传采样值到UART0○3数据交叉开关和通用IO口调用数据交叉开关和通用IO口的调用主要是控制10口的输入输出方式以及UARTO的连接方式,和对P1和PO口的输出方式,因为这两个口是要作为外接发光二极管、TXO和CON控制采样保持芯片工作三个用,所以只要控制相应的控制寄存器的值就能够达到想要的效果。○4UARTO调用任务要求中要通过UART接口将采样值送出,按9600bps的波特牢发出,在这个子程序中采用定时器1来作为UARTO的定时根据波特率的值设定定时器1霞装值,公式如下所示已知波特率为9600,TIM为定时器1时钟选择位(CKCON.4)TH1为所求,这样可以计算出需要定时的时问THI-B8H,所以只要往相应的控制位写入数据就能够实现以9600bps的波特率发送数据。系统程序:#includec805lf020.h//SFR声明#includestdio.h/*-----------------------------------------------------------------C805IF02X的16位SFR定义-----------------------------------------------------------------*/sfr16DP=0x82;//数据指针sfr16TMR3RL=0x92;//定时器3重装值sfr16TMR3=0x94;//定时器3计数器sfr16ADCO=0xbe;//ADCO数据sfr16ADCOGT=0xc4;//ADCO大于窗口sfr16ADCOLT=0xc6;//ADCO小于窗口sfr16RCAP2=0xca;//定时器2捕捉/重装sfr16T2=0xcc;//定时器2sfr16RCAP4=0xe4;//定时器4捕捉/重装sfr16T4=0xf4;//定时器4sfr16DAC0=0xd2;//DACO数据sfr16DAC1=0xd5;//DAC1教据/*----------------------------------------------------------------全局常量---------------------------------------------------------------*/#defineSYSCLK22118400//系统H时钟频率Hz#defineBAUDRATE9600//UART波特率bps#defineSANPLERATE063684//ADCO采样频率IOOOHz#defineNUM_SAMPLES2048//ADCO采样次数#defineSAMPLERATED65248//updaterateofDACinIOOHz#defineTRUE1#defineFALSE0sbitLED=P1^6;//LED='1'意为开sbitCON=Pl^5;//CON='1'意为采样信号打开sbitSWI=P3^7;//SWI='0'意为按压开关unsignedcharcodeSINE_TABLE[128]={0x08,0x00,0x08,0xc9,0x09,0x90,0x0a,0x53,0x0b,0x10,0x0b,0xc5,0x0c,0x72,0x0d,0x13,0x0d,0xa8,0x0e,0x2f,0x0e,0xa7,0xcf,0xce,0xcf,0x64,0xcf,0xa8,0xcf,0xd9,0xcf,0xf6,0x0f,0xff,0x0f,0xf6,0xcf,0xd9,0x0f,0xa8,0x0f,0x64,0x0f,0x0e,0x0e,0xa7,0x0e,0x2f,0x0d,0xa8,0x0d,0x13,0x0c,0x72,0x0b,0xc5,0x0b,0x10,0x0a,0x53,0x09,0x90,0x08,0xc9,0x08,0x00,0x07,0x37,0x06,0x70,0x05,0xad,0x04,0xf0,0x04,0x3b,0x03,0x8e,0x02,0xed,0x02,0x58,0x01,0xdl,0x01,0x59,0x00,0xf2,0x00,0x9c,0x00,0x58,0x00,0x27,0x00,0x0a,0x00,0x00,0xcc,0x0a,0x00,0x27,0x00,0x58,0x00,0x9c,0x00,0xf2,0x01,0x59,0x01,0xdl,0x02,0x58,0x02,0xed,0x03,0x8e,0x04,0x3b,0x04,0xf0,0x05,0xad,0x06,0x70,0x07,0x37,};/*---------------------------------------------------------------------函数原型--------------------------------------------------------------------*/voidSYSCLK_Init(void);voidPORT_lnit(void);voidUARTO_lnit(void);voidADCO_lnit(void);voidTimer3_1nit(intcounts);voidADCO_ISR(void);voidTimer4_1nit(intcounts);voidTimer4_ISR(void);/*----------------------------------------------------------------------全局变量---------------------------------------------------------------------*/xdataunsignedsamples[NUM_SAMPLES];//存储ADCO结果数组bitADC0_DONE;//当NUMSAMPLES次被采集为真/*--------------------------------------------------------------------
本文标题:C8051F020单片机完成16路信号源的输出
链接地址:https://www.777doc.com/doc-5695355 .html