全国大学生电子设计竞赛设计报告论文编号:参赛题目:简易数字信号传输性能分析仪(E题)参赛学校:中国石油大学(华东)所在学院:队员姓名:联系方式:摘要本次设计采用基于C8051F120和FPGA的数字信号发生器,采用伪随机序列作为通讯信号,利用低通滤波器模拟信号传输信道,设计了一个简易数字信号传输性能分析仪,实现了对数字信号传输性能的测试。
系统主要采用一片FPGA产生M-序列数字信号和钟控信号,并进行曼彻斯特编码,另一片FPGA利用数字锁相环技术对编码信号进行位同步信号的提取,并利用C8051F120单片机控制FPGA实现人机交互。
本分析仪基于完备而可靠的硬件设计,编写了一套稳定高效的软件算法,实现了对简易数字信号传输性能分析仪的设计与操控,完成了全部测试功能并满足各精度要求。
关键词:C8051F120单片机;FPGA;低通滤波器;M-序列;曼彻斯特编码;数字锁相环1.方案论证1.1系统基本方案根据题目要求,可将系统划分为:数字信号发生器模块、低通滤波模块、加法器模块、数字信号分析模块、数字锁相环同步信号提取模块、眼图显示模块。
系统总模块框图如图1.1所示。
1.2 各模块方案选择和论证1.2.1 数字信号发生器模块方案一:采用基于ARM的数字信号发生器。
此信号发生器使用了S3C4510B和MAX038内部的硬件资源,简化了信号发生器的硬件结构,并通过PID控制保证配置简单,功耗小,可靠性高。
但此种方法不经济。
方案二:采用基于C8051F120和FPGA的数字信号发生器。
此法外围电路少,系统调试方便,容易修改, 扩展性强,精度高;FPGA比较灵活、运算速度比较快,能够更好的满足本题输入频率比较高的条件,能够实现本设计电路。
所以我们选用方案二实现数字信号发生模块。
1.2.2 低通滤波器模块方案一:二阶低通滤波器。
二阶滤波器衰减倍数为40dB/十倍频程,而此题要求滤波器带外衰减不少于40dB/十倍频程,如果存在信号干扰衰减倍数可能达不到40dB/十倍频程,因此此方案不可靠。
方案二:三阶低通滤波器。
三阶滤波器衰减倍数约为60dB/十倍频程,其截止频率、通带增益A F完全能满足要求,无需选择更高阶的滤波器。
基于各方面考虑,我们选用方案二实现低通滤波器模块。
1.2.3 运算放大器芯片的选择方案一:使用成熟的大型运算放大集成芯片完成要求。
此方案比较方便且易于实现,但价格昂贵、不经济。
方案二:采用NE5532型运算放大器。
NE5532是典型的双极型输入运算放大器,是一种高性能低噪声运放,具有较好的抑制噪声性能,优良的输出能力及相当高的小信号与电源带宽。
方案三:采用AD811型运算放大器。
AD811是一款宽带电流反馈型运算放大器,具有低差分增益、低相位误差、低失真和宽单位增益带宽等特性。
此外,该放大器还具有低电流、低电压噪声以及出色的直流精度等优点。
同NE5532相比,此芯片能够处理高速信号。
经综合考虑,方案选择如下:截止频率为100kHz、200kHz低通模块选择方案2,即采用NE5532芯片;500kHz低通模块、加法器模块、数字信号分析模块选择方案3,即采用芯片AD811。
1.2.4 位同步信号提取模块方案:通过查阅相关资料,我们发现用数字锁相环法提取位同步信号是一种非常有效的方法。
无论位同步脉冲超前或滞后,锁相环会分别送出超前或滞后脉冲对分频器的输入脉冲进行扣除或附加,达到相位同步的目的。
2.系统的硬件设计与实现2.1 低通滤波器模块图2 三阶有源低通滤波器原理图为了计算简便,假定R 1= R 3= R 4= R ,C 1= C 2=C 3= C ,则对于三阶低通滤波器:截止频率:RC f π210=;通带增益:)1()1(522121R R R R A A A f f F F F +⨯+=⨯=. 根据题目对滤波器的截止频率及通带增益的要求,结合Multism 软件仿真进行相关参数的设置,并通过调节电阻的大小实现要求的截止频率。
2.2 加法器模块图3 加法器模块原理图低通滤波模块产生的V 2与伪随机信号发生器产生的V 3(接一个0.1uF 的电容)作为加法器输入,输出信号V 2a 。
其中通过条调节R11以及R1的阻值,来实现输出信号峰峰值为100mv 的要求;并能够实现发挥部分中“使输出信号V 3 的幅度可调,使它的峰峰值范围为100mV-TTL 电平”的要求。
2.3 滤波模块对于输入的信号V 2a ,设计一个由电阻和电容构成的无源二阶低通滤波器模块,低通滤波的输出信号为V o ,滤掉10MHZ 以上的高频信号,再对剩余的数字信号进行分析。
3.系统的软件设计与实现3.1 线性移位寄存器发生m 序列M-序列可由n 级移位寄存器与若干模二加法器组成的线性反馈逻辑网络和时钟脉冲发生器产生。
逻辑示意图如下:(m序列模块原理图见附件7.2.)3.2 FPGA数字信号发生器模块(1)采用FPGA开发工具对函数信号发生器进行设计,能够产生符合要求的数字、时钟信号。
(模块原理图见附件7.1,模块图中包含曼彻斯特编码电路)(2)曼彻斯特编码是一种同步时钟编码技术,用来编码一个同步位流的时钟和数据。
它提供一个简单的方式给编码简单二进制序列,可以防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。
在此编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从低到高跳变表示"0",从高到低跳变表示"1"。
图5 曼彻斯特编码原理图3.3 数字锁相环同步信号提取模块图6 数字锁相环提取同步信号原理图数字锁相环主要由相位参考提取电路、晶体振荡器、分频器、相位比较器、脉冲补抹门等组成。
分频器输出的信号频率与所需频率十分接近,把它和从信号中提取的相位参考信号同时送入相位比较器,根据比较结果,如果本地频率较高,则通过脉冲加减电路减掉一个输入分频器的脉冲,相当于本地振荡频率降低;相反,如果本地频率较低,则通过脉冲加减电路在分频器输入端的两个输入脉冲间插入一个脉冲,相当于本地振荡频率上升,从而达到信号同步。
(模块原理图见附件7.3)3.4 眼图显示示波器X通道输入经滤波模块产生的信号V o,Y通道输入系统时钟信号或者分析电路所提取的位同步信号。
3.5 主程序流程图7 本次设计的主要流程4.系统调试及结果分析4.1 低通滤波器测试数据记录经计算分析,三个低通滤波器的截止频率误差绝对值为5.51%,2.26%,4.10%,完全符合题目要求。
经检测可得,通带增益A F满足0.2--4的可调范围。
4.2 位同步信号的提取数据记录为了得到合适的时钟信号,使提取的位同步信号与发送数字信号载波同频率,且相位恒定,并满足题目精度要求,需对FPGA产生的50MHz时钟信号进行分频。
因此,选择合适的分频系数比较重要。
选择过程中,根据理论计算,并结合实际观测结果,对分频系数进行了选择,结果如表2所示:信号发生器分频系数同步提取一次分频系数同步提取二次分频系数理论值最佳值实验值实验值最佳值实验值最佳值5000 5000 4999 4 50 1250 1002500 2500 2499 4 50 625 501666.667 1672 1667 4 38 417 44 1250 1260 1251 4 30 313 421000 1000 999 4 20 250 50833.3333 832 831 4 26 208 32714.2857 720 715 4 24 179 30 625 624 623 4 24 156 26555.5556 560 555 4 20 139 28 500 500 499 4 10 125 50表2 位同步信号提取中合适的分频系数5.设计总结经过此次电子设计大赛,我们对电路的设计、调试有了深刻的印象,加深了对数字信号传输技术的理解,我们的动手能力以及处理问题的能力都有了很大的提高。
设计中还有欠缺的方面,今后的学习中会加以注意并改进,扩充自己的知识面。
我们深刻体会到了共同协作和团队精神的重要性,我们团队每个人的收获都很大。
大赛也增加了我们对电子电路的激情,激情创造,精彩无限!6.参考文献[1]康华光,电子技术基础(模拟部分),北京:高等教育出版社,1999。
[2]王志功,VHDL数字电路设计教程,北京:电子工业出版社,2005。
[3]王兴亮,通信系统原理教程,西安:西安电子科技大学出版社,2007。
[4]蒲海、陈自力,基于CPLD的高速m序列码发生器的设计,微计算机信息,21(4):172-173,2005。
7.附件7.1 数字信号发生器模块(1)(其中包含曼彻斯特编码电路)数字信号发生器产生V1和V3原理图:附图1 数字信号发生器原理图(包含曼彻斯特编码)(2)数字信号发生器M-序列仿真附图2 数字信号发生器m序列仿真7.2 线性移位寄存器发生M-序列原理图附图3 线性移位寄存器发生M-序列原理图7.3 数字锁相环提取位同步信号原理图附图4 数字锁相环提取位同步信号原理图如附图4,模型由双相高频时钟源、过零检测电路、鉴相器、控制器和分频器组成。
7.4 单片机主函数程序清单void main() //主函数{ uchar i;sys_int(); //系统初始化oscx_int();pll_int();port_int();lcd_int();pca0_int();lcd_clr();lcd_disword(0,2,word_shu); //欢迎界面lcd_disword(16,2,word_zi);lcd_disword(32,2,word_xin);lcd_disword(48,2,word_hao);lcd_disword(64,2,word_chuan);lcd_disword(80,2,word_shuche);lcd_disword(96,2,word_xing_title);lcd_disword(112,2,word_neng);for(i=0;i<1000;i++)delay1ms();lcd_disletter(8,2,shuzi[1]); //菜单选择lcd_disletter(16,2,point);lcd_disword(24,2,word_shu);lcd_disword(40,2,word_ju);lcd_disword(56,2,word_lv);lcd_disword(72,2,word_she);lcd_disword(88,2,word_zhi);lcd_disletter(8,6,shuzi[2]);lcd_disletter(16,6,point);lcd_disword(24,6,word_bo);lcd_disword(40,6,word_xing);lcd_disword(56,6,word_xian);lcd_disword(72,6,word_shi);IT0=1;EA=1;EX0=1;while(1){ if(keycode==0&&flag){EIE1=0X00;EX0=0;lcd_clr();flag=0;lcd_disletter(8,2,shuzi[1]);lcd_disletter(16,2,point);lcd_disword(24,2,word_shu);lcd_disword(40,2,word_ju);lcd_disword(56,2,word_lv);lcd_disword(72,2,word_she);lcd_disword(88,2,word_zhi);lcd_disletter(8,6,shuzi[2]);lcd_disletter(16,6,point);lcd_disword(24,6,word_bo);lcd_disword(40,6,word_xing);lcd_disword(56,6,word_xian);lcd_disword(72,6,word_shi);EX0=1;}if(keycode==1)datarate_set(); //菜单选项一:数据率步进设置if(keycode==2)showwave(); //菜单选项二:信号提取,眼图显示}}7.5 数据率设置子函数程序清单void datarate_set() //数据率设置子函数{lcd_clr();keycode=16;EX0=0;lcd_disword(24,2,word_shu);lcd_disword(40,2,word_ju);lcd_disword(56,2,word_lv);while(keycode!=0x0F){keycode=scan_key();if(keycode==0x0E){ if(count==0)count=9;elsecount--;}if(keycode==0X0D){count++;if(count==10)count=0;}old_SFRPAGE = SFRPAGE;SFRPAGE=0x0F;switch(count){case 0: P5=0x00;break;case 1: P5=0x01;break;case 2: P5=0x02;break;case 3: P5=0x03;break;case 4: P5=0x04;break;case 5: P5=0x05;break;case 6: P5=0x06;break;case 7: P5=0x07;break;case 8: P5=0x08;break;case 9: P5=0x09;break;default: break;}SFRPAGE = old_SFRPAGE;if(count==0)lcd_disletter(24,4,shuzi[1]);elselcd_disletter(24,4,shuzi[0]);lcd_disletter(32,4,shuzi[count]);lcd_disletter(40,4,shuzi[0]);lcd_disletter(48,4,letter_k);lcd_disletter(56,4,letter_b);lcd_disletter(64,4,letter_p);lcd_disletter(72,4,letter_s);}lcd_clr();lcd_disletter(8,2,shuzi[1]);lcd_disletter(16,2,point);lcd_disword(24,2,word_shu);lcd_disword(40,2,word_ju);lcd_disword(56,2,word_lv);lcd_disword(72,2,word_she);lcd_disword(88,2,word_zhi);lcd_disletter(8,6,shuzi[2]);lcd_disletter(16,6,point);lcd_disword(24,6,word_bo);lcd_disword(40,6,word_xing);lcd_disword(56,6,word_xian);lcd_disword(72,6,word_shi);EX0=1;}7.6 眼图显示启动子函数void showwave() //眼波显示启动子函数{keycode=16;EX0=0;lcd_clr();lcd_disword(24,2,word_tong);lcd_disword(40,2,word_bu);lcd_disword(56,2,word_xin);lcd_disword(72,2,word_hao);lcd_disword(88,2,word_pin);lcd_disword(104,2,word_lv);EX0=1;old_SFRPAGE = SFRPAGE;SFRPAGE=0x0F;switch(count){case 0:P6=0x00;break;case 1:P6=0x11;break;case 2:P6=0x22;break;case 3:P6=0x33;break;case 4:P6=0x44;break;case 5:P6=0x55;break;case 6:P6=0x66;break;case 7:P6=0x77;break;case 8:P6=0x88;break;case 9:P6=0x99;break; default:break;}SFRPAGE = old_SFRPAGE;EIE1=0x08;flag=1;}7.7 C8051F120单片机开发系统附图5 C8051F120单片机开发系统原理图7.8 测试仪器清单。