精心整理目录0摘要--------------------------------------------------------21设计任务与要求----------------------------------------------21.1设计任务-----------------------------------------------21.2基本电压-----------------------------------------------21.3233.13.23.344.14.24.3误差分析-----------------------------------------------75设计总结----------------------------------------------------86元件清单----------------------------------------------------87参考文献----------------------------------------------------98程序清单----------------------------------------------------100、摘要:本系统以DSP芯片为核心,控制过程是DSP接收数据并送入DA电路,利用AD820作为比较器,正端接D/A输出,负端接地,反馈输出接AD采样,失调电压调零,输出形成闭环回路,通过AD转换电路将实际值采回DSP,由DSP进行运算,得输入值与采回值之差即误差,输出结果通过12864液晶屏显示。
系统通过LM4050为A/D,D/A提供基准电压,使系统具有较高的可靠性。
采用的DSP减少了由运放产生的非线性误差。
关键字:信号发生器TMS320DSP芯片基准电源芯片LM40501、设计任务与要求1.1设计任务:设计出有一定输出电压范围高精度毫伏信号发生器,并能够检测其输出精度1.2基本要求(1)输出电压:范围0~+1V,步进0.5mV;具有输出电压值(测量值)显示功能;由“+”、(2、(31.3(1(2;(32用相比,器和可提供DSP 器件比33.1DSP是一种独特的微处理器,是以数字信号来处理大量信息的器件。
其工作原理是接收模拟信号,转换为)在一(2(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;(4)具有低开销或无开销循环及跳转的硬件支持;(5)快速的中断处理和硬件I/O支持;(6)具有在单周期内操作的多个硬件地址产生器;(7)可以并行执行多个操作;(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
3.2数模转换模块3.2.1D/A转换电路如图所示,通过AD5541芯片实现将数字量转换为模拟量,送给电压比较器。
该电路通过LM4050提供基准电压源,UA741做电压跟随器,使电压稳定。
AD820作为比较器,正端接D/A输出,负端接地,反馈输出接AD采样,失调电压调零,输出形成闭环回路,减少由运放产生的非线性误差,由DSP进行运算。
D/A转换电路3.2.2AD5541芯片AD5541为单通道、16位、串行输入、电压输出数模转换器(DAC),采用5V±10%单电源供电。
AD5541采用多功能三线式接口,并且与SPI、QSPI™、MICROWIRE™、DSP接口标准兼容。
这些DAC可提供16位性能,无需进行任何调整。
DAC输出不经过缓冲,可降低功耗,并减少输出缓冲所造成的失调误差。
3.3基准电压源模块3.3.1LM4050芯片LM4050/是精密的二端、并联模式、带隙电压基准,具有多种固定反向击穿电压:1.225V、2.048V、2.500V、3.000V、3.3V、4.096V和5.000V。
LM4050/LM4051采用超小型、3引脚SC70表贴封装1和5空脚3.4AD8320型高速100kHz仅为SPI/SSI);采用8A/D至±18V于25pA,10kHz高350pF的容性负载,并可提供最低15mA的输出电流。
因此,该放大器能够处理各种负载情况。
AD820在A/D转换电路中有电压跟随器的作用。
3.5485通信模块3.5.1max485芯片MAX485是用于RS-485与RS-422通信的低功耗收发器。
MAX485的驱动器摆率不受限制,可以实现最高2.5Mbps的传输速率。
这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120μA至500μA之间。
所有器件都工作在5V单电源下。
驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态。
接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。
具有较高的抗干扰性能。
MAX485是市面上最为常见的RS422芯片,亦是用量最大的RS422芯片,性价比高,优质,供货稳定是大部分厂家采用MAX485接口芯片是Maxim公司的一种RS-MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A 的电平低于B端时,代表发送的数据为0。
在与单片机连接时接线非常简单。
只需要一个信号控制MAX485的接收和发送即可。
同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。
MAX引脚(管脚)图及工作电路3.5.2MAX232芯片第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS 数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
3.5.3485串口通信电路串口电路3.6显示模块显示电路采用12864液晶屏,该点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。
液晶屏连线方式4、系统调试仪器名称型号数量双通道示波器RIG—OL 1数字万用表UT52 1首先,把DA和AD的基准电压源调到两伏,然后满量程输出的值就应该是2伏,而实际上我们得器,利用它的输入阻抗高,输出阻抗低的特点,同时通过减法器使实测电压缓慢的接近输入电压值,通过验证,AD采回的数值偏高,这样我们又加入ua741电压跟随器来调整基准电压的输出,最后调整到输入电压值和实测电压值偏差接近0.2毫伏之内,最后把基准电压确定在2.0伏,然后通过万用表和示波器测量出AD样值和AD的输出值通过LCD12864液晶屏将输入电压和实测电压显示出来,误差接近0.1毫伏,通过按键调整波特率,同时使输入电压步进0.1毫伏,这样反复通过AD820减法器使实测电压值接近输入值,这样就达到了本实验的要求和目的。
4.3误差分析造成误差的原因有(1)零点漂移:由于运算放大器的零点漂移,温度漂移等带来的误差,可以通过温度补偿措施来解决此误差。
(2)A/D,D/A转换误差:受AD转换器精度及基准源稳定程度的限制,不可避免地带来一定的误(3(45、(1、(2(36、LM4050芯片一片AD820芯片二片ADS8320芯片一片UA741芯片一片MAX485芯片一片MAX232芯片一片胆电容一个开关四个三端稳压器7805,AS2830各一片电阻,电容,导线若干[1]全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛训练教程[M].北京电子工业出版社,2005年[2]全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛获奖作品汇编(第一届~第五届)[M].北京理工大学出版社,2004年[3]模拟电子技术基础.童诗白,华成英主编[4]现代电力电子器件原理与应用.机械工业出版社[5]TMS320x28xxx原理与开发.苏奎峰编8、程序清单//BUSLCD#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile//unsignedcharbaud_disp4[8]={'5','6','0','0','0','','\0'};unsignedcharbaud_disp5[8]={'5','7','6','0','0','','\0'};unsignedcharbaud_disp6[8]={'1','1','5','2','0','0','\0'};unsignedcharnumber_tab[]={'0','1','2','3','4','5','6','7','8','9'};//***********************************************//***********************************************//波特率设定首位高字节,二位低字节//SCI_PRD[14]={4800,9600,19200,38400,56000,57600,115200};unsignedcharSCI_PRD[14]={0x03,0xCF,0x01,0xE7,0x00,0xF3,0x00,0x79,0x00,0x52,0x00,0x50,0x00,0 x27};voidsendDAT(chardat);//写显示数据;也可以写一个单字节字符voiddisplay(charx_add,chardat,chardat1);//写汉字到LCD屏指定位置voiddelay(unsignedintt);//****************************************************//SCI函数声明FIFO模式interruptvoidscibTxFifoIsr(void);interruptvoidscibRxFifoIsr(void);interruptvoidcpu_timer0_isr(void);voidscib_fifo_init(void);voiddelay_ad(void);//****************************************************//{}{for(i=0;i<8;i++){delay(1000);if((dat&0x80)!=0)elsedat=dat<<1;}}//****************************************************//如果需要改变半字地址,也是用此程序.只需输入地址就可以. voidsendCMD(chardat)//写控制指令sendBYTE(0xf8);sendBYTE(dat&0xf0);sendBYTE((dat<<4)&0xf0);}//**************************************************** voidsendDAT(chardat)//写显示数据;也可以写一个单字节字符{sendBYTE(0xfa);sendBYTE(dat&0xf0);sendBYTE((dat<<4)&0xf0);}//****************************************************//{}{}//{unsignedcharn;if((x_add>=GM12232_MINADD_L1)&&(x_add<GM12232_MAXADD_L1)) {sendCMD(x_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elseif((x_add>=GM12232_MINADD_L2)&&(x_add<GM12232_MAXADD_L2)) {sendCMD(x_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}elseif((x_add>=GM12232_MINADD_L3)&&(x_add<GM12232_MAXADD_L3)) {sendCMD(x_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elseif((x_add>=GM12232_MINADD_L4)&&(x_add<GM12232_MAXADD_L4)) {sendCMD(x_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elsereturn;}//}//}//{sdataB[1]=ADVAL[0]=number_tab[intdata/10000];a=intdata%10000;sdataB[2]=ADVAL[2]=number_tab[a/1000];b=a%1000;sdataB[3]=ADVAL[3]=number_tab[b/100];c=b%100;sdataB[4]=ADVAL[4]=number_tab[c/10];d=c%10;sdataB[5]=ADVAL[5]=number_tab[d/1];sdataB[6]=0x30;sdataB[7]=0x30;pc[1]='.';pc[2]=ADVAL[2];pc[3]=ADVAL[3];pc[4]=ADVAL[4];pc[5]=ADVAL[5];pc[6]='\0';}if(0x01==set_or_ad){sdataB[8]=0x42;sdataB[9]=ADVAL[0]=number_tab[intdata/10000]; a=intdata%10000;}{ADVAL[4]=number_tab[c/10];d=c%10;ADVAL[5]=number_tab[d/1];pc[0]=ADVAL[0];pc[1]='.';pc[2]=ADVAL[2];pc[3]=ADVAL[3];pc[4]=ADVAL[4];pc[5]=ADVAL[5];pc[6]='\0';//**************************************************** unsignedintDA_OUT(void){floatvol_const=3.27675;floatkey_voltage;unsignedintkey_vol;key_voltage=(float)key;key_voltage*=vol_const;spi_data=key_voltage;}voiddelay_ad(void){unsignedinti,j;{}}{{}{}delay_ad();return(da);}voidAD_SUM_AVG(void){unsignedinti=0;floataF=0.9;staticfloatSample_AVG_fst=0.0;Sample=0;for(i=0;i<AVG;i++){SampleTable[i]=ads8320();Sample=Sample+SampleTable[i];}Sample_AVG=Sample/AVG;Sample_AVG=(1-aF)*Sample_AVG+aF*Sample_AVG_fst;Sample_AD=Sample_AVG*0.327675;Sample_AVG_fst=Sample_AVG;}voidmain(void){InitSysCtrl(); //初始化系统//初始化系统时钟,系统时钟150M,低俗时钟37.5M,打开外设时钟SPI控制37.5M//init();//初始化液晶显示//****************************************************EALLOW; //ThisisneededtowritetoEALLOWprotectedregistersPieVectTable.RXBINT=&scibRxFifoIsr;PieVectTable.TXBINT=&scibTxFifoIsr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters//****************************************************scib_fifo_init();//InitSCI-Bspi_fifo_init(); //InitializetheSpiFIFOspi_init(); //initSPI//****************************************************//Enableinterruptsrequiredforthisexample//****************************************************EINT;//****************************************************EALLOW;EDIS;//****************************************************EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;//将CPU定时器0的中断服务程序入口地址写到PIE向量表中EDIS;InitCpuTimers();ConfigCpuTimer(&CpuTimer0,150,250000);for(i=0;i<500;i++){delay(5000);}}}interruptvoidcpu_timer0_isr(void){staticcharkey4=0x00;if((key_value&BIT3)==BIT3){key4=key4^0x01;}if(((key_value&BIT0)==BIT0)&&(key4==0x01))//输入减1 {if(key==0x0000){key=0x0000;}elsekey--;}if(((key_value&BIT1)==BIT1)&&(key4==0x01))//输入加1 {if(key==0x4E20){key=0x4E20;}else{{case3:char_string(baud_disp3,LCD_L36);ScibRegs.SCIHBAUD=SCI_PRD[6];ScibRegs.SCILBAUD=SCI_PRD[7];break;//显示波特率38400case4:ScibRegs.SCIHBAUD=SCI_PRD[8];ScibRegs.SCILBAUD=SCI_PRD[9];char_string(baud_disp4,LCD_L36);break;//显示波特率56000case5:ScibRegs.SCIHBAUD=SCI_PRD[10];ScibRegs.SCILBAUD=SCI_PRD[11];char_string(baud_disp5,LCD_L36);break;//显示波特率57600case6:ScibRegs.SCIHBAUD=SCI_PRD[12]; ScibRegs.SCILBAUD=SCI_PRD[13];char_string(baud_disp6,LCD_L36);break;//显示波特率115200}}}interruptvoidscibTxFifoIsr(void){{}{}}{}{//asyncmode,idle-lineprotocol//DisableRXERR,SLEEP,TXWAKE ScibRegs.SCIHBAUD=SCI_PRD[0]; ScibRegs.SCILBAUD=SCI_PRD[1];}voidspi_init(){000F; //Reseton,risingedge,16-bitcharbits //enabletalk,andSPIintdisabled. EALLOW;EDIS;SpiaRegs.SPIBRR=0x007F;009F; //RelinquishSPIfromReset}voidspi_xmit(Uint16 a){SpiaRegs.SPITXBUF=a;}voidspi_fifo_init(){//InitializeSPIFIFOregisters204f;}//===========================================================================。