系统集成电路大作业_第1页
系统集成电路大作业_第2页
系统集成电路大作业_第3页
系统集成电路大作业_第4页
系统集成电路大作业_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

系统集成与应用实验设计报告16路模拟信号发生器班 级:小组成员: 指导教师: 目 录1、 设计任务和要求分析.22、 整体方案设计选择.23、 理论计算. . . . .64、 电路设计及仿真. .75、 实验总结.11六、附录.12一、设计任务与要求分析1.1 设计任务用C8051F020单片机完成16路信号源的输出,并通过单片机内部A/D转换器进行输出信号源的反馈采样,最后通过异步串行接口(UART)将采样结果输出。利用C8051单片机将波形量化数据放置于内部ROM,通过内部D/A产生信号以及I/O端口控制多路模拟开关,同时生成16路信号源,注意信号源调理电路中采保部分的选值,并给出理论计算结果。反馈回采部分采用单片机的12位高精度A/D转换器,采样频率自定(要求给出理论计算值),并通过UART接口将采样值送出按9600bps的波特率发出(接收对象可以是计算机或其它)。1.2 任务要求分析我们通过集体讨论与分析,确定了如下的设计流程:图1.系统流程图 在进行具体的实验设计之后,我们进行了电路简化,放大滤波通过一个运算放大器来实现,不仅使电路得到了简化,而且也节省了资源。二、整体方案设计选择2.1 单片机部分单片机选用C8051F020,是完全集成的混合信号系统级MUC芯片具有64个数字I/O引脚;具有12位100kps的8通道ADC,带PGA和多路模拟开关 ;具有2个12位DAC,具有可编程数据更新方式;64K可在系统编程的FLASH存储器;4352字节的片内RAM;可寻址64K字节地址空间的数据存储器接口:2个UART串行接口。基于以上优良特性,故选用该单片机。单片机具有上电复位、掉电复位、外部复位、软件强制复位等多种复位方式。在应用中外部复位方式得到广泛应用。外部/RST引脚提供使用外部电路使单片机强制复位的手段。在外部/RST引脚加一个低电平有效信号,将使单片机复位,最好提供一个外部上拉,或对RST引脚去耦以防止噪声引起复位。图2 单片机外部电路2.2 电源部分设计电源的选定好与坏对于系统设计来说至关重要,一个好的电源的设计标志着成功的一半。在这个系统中我们需要用到一个正负5V的双电源,用于给运放LM358供电,尽管LM358可以采用单电源供电,但是输入信号的幅度比较小时,用单电源供电运算放大器的特性会变差,而我们的设计中,输入信号的变化范围较大,用双电源比较合适。同时还需要给模拟开关ADG406和构成采样保持电路的CA3140提供正5V的电源电压。综上所述,我们通过用LM7805,LM7905组成一个正负5V的双电源电路提供正负5V的电源。此外,C8051F020的供电电压为3.3V,所以我们还需要用LM1117(低压差三端稳压器)将5V电源转换为3.3V给C8051F020单片机供电。 图3. 7805设计参考资料 图4. 7905设计参考资料2.3 模拟开关部分在整个设计中,我们的多路模拟开关采用ADG406,单芯片CMOS模拟多路复用器。ADG406根据4位二进制地址线A0,A1,A2,A3所确定的地址,将16路输入之一切换至公共输出。所有器件均提供EN输入,用来使能或禁用器件。禁用时,所有通道均关闭。ADG406采用增强型LC2MOS工艺设计,具有低功耗,高开关速度和低导通电阻特性,因而适合高速度数据采集系统和音频信号开关应用。低功耗特性则适合电池供电系统。接通时,各通道在两个方向的导电性能相同,输入信号范围可扩展至电源电压范围。在断开的条件下,达到电源电压的信号电平被阻止。所有通道均采用先开后合式开关,防止开关通道时发生瞬时短路。设计本身具有低电荷注入特性,当切换数字输入时,可实现最小的瞬变。我们采用ADG406进行采样时的16路信号的切换以及将16路信号输入单片机AD时的16路信号切换。 图5.ADG406真值表以及转换时间2.4 信号调理部分设计2.4.1采样保持电路采样保持电路采用的是CA3140集成采样保持芯片。它的输入阻抗高达 ,输入偏流约10PA,工作速度较高(SR=9V/us),常用于积分及保持电路等。它既可以双电源供电(2V18V),又可以单电源供电(4V36V)。其工作温度范围为-55-125,使用CA3140的注意事项如下:(1)因其输入级为MOSFET,故安装焊接时应符合MOSFET的要求。(2)CA3140的最大允许差模电压为8V,故一般应接保护电路,以免因电压过高而击穿,其输入回路电流应小于1mA,因此需在输入及反馈回路中接限流电阻,其值一般不小于3.9K。(3)其输出负载电阻应大于2k,否则将使负向输出动态范围变小。2.4.2放大滤波器部分由于C8051F020的AD转换器输出电压为2.4V,且在实际线路输出过程中会受到噪声干扰,所以需要设计放大滤波电路。我们选用LM358芯片进行放大滤波,不仅可以简化电路,并且成本较低。三、理论计算3.1 DAC输出频率通过手册可知,C8051F020内部DAC最高输出频率为100kHz,模拟开关最快切换时间为180ns,采样保持电路的采样时间约为4.5ns,计算如下:180+4.5=184.5ns所以DA的采样周期必须比184.5ns大,这里我们取DA的输出周期为184.5*3=553.5ns。即频率约为:hz,但是却超过了C8051F020内部DAC最高输出频率为100kHz。所以只要低于hz就可以了,为了以后的设计方便,也为了能够在采集一个周期中尽可能多的点,我们取DAC输出频率为1600Hz.此时每一路模拟开关的输出频率为100Hz。3.2 ADC回采频率计算依据题目ADC回采后经串口发送,串口波特率为9600,所以ADC回采频率受到串口波特率制约,所以取ADC回采频率与串口波特率一致:所以ADC采集每一路模拟信号的频率为1.2kHz。3.3 采样保持电容计算采样保持电容大小选取受到切换速度的制约,与模拟开关、输出放大器的性能都有关系,具体计算如下:计算得:结果取0.01uf的电容。3.4 滤波器的设计计算由于C8051F020的AD转换器输出电压为2.4V,而其内部的DA转换器的输入电压可以达到4.8V,且在实际线路输出过程中会受到噪声干扰,所以我们采用放大倍数为2倍的低通滤波器。我们设计的滤波器是无限增益多路型低通滤波器,滤波器的参数分别如下:,所以,增益,固有频率,阻尼系数为:。所以截至频率为。四、电路设计及仿真4.1 电源设计及仿真图6.双电源设计电路图图7.双电源仿真结果图4.2 放大滤波设计及仿真设计及仿真由于C8051F020的AD转换器输出电压为2.4V,而其内部的DA转换器的输入电压可以达到4.8V,且在实际线路输出过程中会受到噪声干扰,所以我们采用放大倍数为2倍的低通滤波器。我们设计的滤波器是无限增益多路型低通滤波器,滤波器的参数分别如下:,所以,增益,固有频率,阻尼系数为:。所以截至频率为。图8.低通滤波及放大电路图9.低通滤波及放大电路仿真图4.3采用保持电路的设计图10.采样保持电路原理图4.4模拟开关电路设计图11.模拟开关电路原理图4.5抗干扰设计图12.耦合电容设计图13.地隔离的设计4.6 整体电路设计 图14.整体电路原理图4.7 pcb设计图15.pcb版图五、实验总结 这次课程设计我们先从C8051F020芯片的引脚功能和工作原理入手。将里面所涉及到的功能用我所学的系统集成以及模数电、测控电路的知识进行运用。在实现电路的稳压功能时,用到了7805和7905,LM1117这三种芯片。在设计电路的过程中,我们发现芯片的选择是非常重要的一个环节,芯片的参数以及功能和成本都是我们需要考虑的问题。 同时这次课程设计让我们小组成员进一步巩固了对Multisim软件仿真和AD的使用和操作,在设计中遇到了很多问题,我们通过上网查资料以及同学和老师的帮助,大都得到了解决。除此之外,小组成员也感受到了合作的力量,积极分工,在做好自己的工作的同时,协助其他成员。在此,感谢老师的悉心指导和他同学的无私帮助! 附录:程序源码:#include / SFR declarations/-/ 16-bit SFR Definitions for F02x/-sfr16 RCAP4 = 0xE4; / Timer4 capture/reloadsfr16 TMR4 = 0xF4; / Timer4sfr16 DAC0 = 0xd2; / DAC0 datasfr16 DAC1 = 0xd5; / DAC1 data/-/ Global Constants/-#define SYSCLK / Internal oscillator frequency in Hz#define SAMPLE_RATE_DAC L / DAC sampling rate in Hz#define PHASE_PRECISION 65536 / range of phase accumulator#define FREQUENCY 1000 / Frequency of output waveform in Hz / is the change in phase between DAC samples; It is used in / the set_DACs routine.unsigned int PHASE_ADD = FREQUENCY * PHASE_PRECISION / SAMPLE_RATE_DAC;/自加/unsigned long AD;/AD转换的值unsigned char temp_l;unsigned char temp_h;bitReceiveBit;/*接收标志位*/unsigned char temp;/int code SINE_TABLE256 = 0x0000, 0x0324, 0x0647, 0x096a, 0x0c8b, 0x0fab, 0x12c8, 0x15e2, 0x18f8, 0x1c0b, 0x1f19, 0x2223, 0x2528, 0x2826, 0x2b1f, 0x2e11, 0x30fb, 0x33de, 0x36ba, 0x398c, 0x3c56, 0x3f17, 0x41ce, 0x447a, 0x471c, 0x49b4, 0x4c3f, 0x4ebf, 0x5133, 0x539b, 0x55f5, 0x5842, 0x5a82, 0x5cb4, 0x5ed7, 0x60ec, 0x62f2, 0x64e8, 0x66cf, 0x68a6, 0x6a6d, 0x6c24, 0x6dca, 0x6f5f, 0x70e2, 0x7255, 0x73b5, 0x7504, 0x7641, 0x776c, 0x7884, 0x798a, 0x7a7d, 0x7b5d, 0x7c29, 0x7ce3, 0x7d8a, 0x7e1d, 0x7e9d, 0x7f09, 0x7f62, 0x7fa7, 0x7fd8, 0x7ff6, 0x7fff, 0x7ff6, 0x7fd8, 0x7fa7, 0x7f62, 0x7f09, 0x7e9d, 0x7e1d, 0x7d8a, 0x7ce3, 0x7c29, 0x7b5d, 0x7a7d, 0x798a, 0x7884, 0x776c, 0x7641, 0x7504, 0x73b5, 0x7255, 0x70e2, 0x6f5f, 0x6dca, 0x6c24, 0x6a6d, 0x68a6, 0x66cf, 0x64e8, 0x62f2, 0x60ec, 0x5ed7, 0x5cb4, 0x5a82, 0x5842, 0x55f5, 0x539b, 0x5133, 0x4ebf, 0x4c3f, 0x49b4, 0x471c, 0x447a, 0x41ce, 0x3f17, 0x3c56, 0x398c, 0x36ba, 0x33de, 0x30fb, 0x2e11, 0x2b1f, 0x2826, 0x2528, 0x2223, 0x1f19, 0x1c0b, 0x18f8, 0x15e2, 0x12c8, 0x0fab, 0x0c8b, 0x096a, 0x0647, 0x0324, 0x0000, 0xfcdc, 0xf9b9, 0xf696, 0xf375, 0xf055, 0xed38, 0xea1e, 0xe708, 0xe3f5, 0xe0e7, 0xdddd, 0xdad8, 0xd7da, 0xd4e1, 0xd1ef, 0xcf05, 0xcc22, 0xc946, 0xc674, 0xc3aa, 0xc0e9, 0xbe32, 0xbb86, 0xb8e4, 0xb64c, 0xb3c1, 0xb141, 0xaecd, 0xac65, 0xaa0b, 0xa7be, 0xa57e, 0xa34c, 0xa129, 0x9f14, 0x9d0e, 0x9b18, 0x9931, 0x975a, 0x9593, 0x93dc, 0x9236, 0x90a1, 0x8f1e, 0x8dab, 0x8c4b, 0x8afc, 0x89bf, 0x8894, 0x877c, 0x8676, 0x8583, 0x84a3, 0x83d7, 0x831d, 0x8276, 0x81e3, 0x8163, 0x80f7, 0x809e, 0x8059, 0x8028, 0x800a, 0x8000, 0x800a, 0x8028, 0x8059, 0x809e, 0x80f7, 0x8163, 0x81e3, 0x8276, 0x831d, 0x83d7, 0x84a3, 0x8583, 0x8676, 0x877c, 0x8894, 0x89bf, 0x8afc, 0x8c4b, 0x8dab, 0x8f1e, 0x90a1, 0x9236, 0x93dc, 0x9593, 0x975a, 0x9931, 0x9b18, 0x9d0e, 0x9f14, 0xa129, 0xa34c, 0xa57e, 0xa7be, 0xaa0b, 0xac65, 0xaecd, 0xb141, 0xb3c1, 0xb64c, 0xb8e4, 0xbb86, 0xbe32, 0xc0e9, 0xc3aa, 0xc674, 0xc946, 0xcc22, 0xcf05, 0xd1ef, 0xd4e1, 0xd7da, 0xdad8, 0xdddd, 0xe0e7, 0xe3f5, 0xe708, 0xea1e, 0xed38, 0xf055, 0xf375, 0xf696, 0xf9b9, 0xfcdc,;/-/ Function Prototypes/-void main(void);void OSCILLATOR_Init(void);void DAC0_Init (void);void DAC1_Init (void);void TIMER4_Init(int counts);void Set_DACs(void);/自加/void PORT_Init (void);void Timer3_Init (int counts);void ADC_Init(void);void UART0_Init (void);void delayms(unsigned int z);/-/ MAIN Routine/-void main (void) unsigned char temp1=0xff,temp2=0xff;unsigned int ad_now; WDTCN = 0xde; / Disable watchdog timer WDTCN = 0xad; OSCILLATOR_Init (); / Initialize oscillator DAC0_Init (); / Initialize DAC0 PORT_Init (); Timer3_Init (SYSCLK / 1200 ); ADC_Init(); UART0_Init(); AMX0SL =0x00; /选择通道AIN0 TIMER4_Init(SYSCLK/SAMPLE_RATE_DAC);/ Initialize Timer4 to overflow / times per / second EA = 1; / Enable global interrupts ES0 =1;/串口中断使能 while(1) temp1=0xff; temp2=0xff; ad_now=AD; temp1&=ad_now; temp2&=(ad_now8);SBUF0=temp1;while(!TI0);TI0=0; SBUF0=temp2;while(!TI0);TI0=0; SBUF0=0x0d;while(!TI0);TI0=0; SBUF0=0x0a;while(!TI0);TI0=0; delayms(200); /自加/void delayms(unsigned int z)unsigned int x,y;for(x=0;xz;x+)for(y=0;y121;y+);void PORT_Init (void) XBR2 = 0x40;/*使能交叉开关*/ P2MDOUT =0xff;/ XBR0 = 0x04; /*使能UART0*/ XBR1 = 0x00;/ /XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P0MDOUT |= 0x01; /*使能TX0作为推挽输出*/ P1MDOUT |= 0x40; /*时能P1.6 (LED)作为推挽输出*/ P3MDOUT |= 0xdf;XBR0 = 0x04; /*使能UART0*/函数功能: 定时器3初始化/入口参数: int countsvoid Timer3_Init (int counts)TMR3CN = 0x00; TMR3RLL = -counts; /初始化重载值 TMR3L = 0xffff; /设置自动重载值 TMR3CN |= 0x04; /函数功能: ADC0初始化void ADC_Init(void)ADC0CN |=0x84;/*ADC0使能,定时器3溢出使能模/数转换*/REF0CN |=0x03;/*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/ADC0CF |=0x50;/*转换周期和增益为1*/AMX0CF |=0x00;/*单端输入*/EIE2 |=0x02;/*ADC0转换结束中断*/函数功能: AD中断服务程序void ADC_ISR (void) interrupt 15AD0INT=0;/清A/D中断标志 temp_l=ADC0L; temp_h=ADC0H; AD=temp_h*256+temp_l;void UART0_Init (void)SCON0=0x50; /串口方式1TMOD=0X20; /选用定时器1作为波特率发生器TH1=0xF4; TL1=0xF4;PCON=0x80;/波特率为9600TR1=1; /定时器启动void UART0_ISR (void) interrupt 4/if(TI0) /是发送中断还是接收中断/ /SBUF0=AD;/while(!TI0);/TI0=0;/ /-/ Interrupt Service Routines/-/-/ TIMER4_ISR - Wave Generator/-/ This ISR is called on Timer4 overflows. Timer4 is set to auto-reload mode/ and is used to schedule the DAC output sample rate in this example./ Note that the value that is written to DAC1 during this ISR call is/ actually transferred to DAC1 at the next Timer4 overflow./-void TIMER4_ISR (void) interrupt 16static unsigned char ch_i;ch_i+;if(ch_i=16) ch_i=0;Set_DACs();P2=ch_i; T4CON &= 0x80; / Clear Timer4 overflow flag /-/ Initialization Routines/-/-/ OSCILLATOR_Init/-/ Return Value : None/ Parameters : None/ This routine initializes the system clock to use an 22.1184MHz crystal/ as its clock source./-void OSCILLATOR_Init (void) int i; / Delay counter OSCXCN = 0x67; / Start external oscillator with / 22.1184MHz crystal for (i=0; i 256; i+) ; / Wait for osc. to start up while (!(OSCXCN & 0x80) ; / Wait for crystal osc. to settle OSCICN = 0x88; / Select external oscillator as SYSCLK / source and enable missing clock / detector/-/ DAC0_Init/-/ Return Value : None/ Parameters : None/ Configure DAC0 to update on Timer4 overflows and enable the the VREF buffer./-void DAC0_Init(void) DAC0CN = 0x94; / Enable DAC0 in left-justified mode / managed by Timer4 overflows REF0CN |= 0x03; / Enable the internal VREF (2.4v) and / the Bias Generator/-/ TIMER4_Init/-/ Return Value : None/ Parameters :/ 1) int counts - calculated Timer overflow rate/ range is positive range of integer: 0 to 32767/ Configure Timer4 to auto-reload at interval specified by using / SYSCLK as its time base./-void TIMER4_Init

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论