1.6.2 误差与结果分析
(1)周期测量误差与结果分析 考虑到实验箱信号本身的精确程度,我们也选择了FPGA50MHz有源晶振经锁相环倍频、分频器分频后引出的信号作为测量信号,以作为参考。
有表格一分析可知:EDA试验箱中信号测量数据与实际数据存在较大差异,而FPGA引出的信号测量数据与实际数据完全一致。由于FPGA中有源晶振经PLL倍频锁定后,输出的信号具有和固定基准信号同样的频率稳定性,我们有理由相信是EDA实验箱中先好自身存在误差,本计数器的周期测量功能成功实现。 另外,对EDA中高低频信号的测量误差进行分析可以证实原理中提到的“对于周期测量,高频信号产生的误差比低频信号产生的误差大”的观点。
(3) 频率测量误差与结果分析
与周期测量类似,我们采用两种信号作为测试信号。由表4中的分析数据可知,无论对于方波还是正弦波,频率测量的误差满足设计要求。我们顺利的完成了关于周期的所有基本和发挥的设计要求。对于FPGA内部产生的信号,其精确度近似为100%。高频信号发生器中产生的信号残生较大误差的原因是,高频信号发生器中所示的信号精确度很小,相对于我们所测得的精确到小数点后三围甚至六位而言,误差是不可避免的。
(4) 峰值测量误差与结果分析
AD对此采样,每次采样数据保留最大采样数据,理论上可以采到峰值并且显示。但实际对于高频信号而言,由于信号自身变化速度很快,甚至超过了AD采样的速度,有可能在短时间内采不到峰值点的数据,而使得测量结果偏小。分析表5中数据可得以下结论:对于方波信号,只存在两中采样情况,因此高频或低频多容易猜到峰值电压;对于正弦波、三角波信号,存在多种采样情况,采到峰值的可能性随频率的增高而减小,因此低频时交易测得峰值信号,高频测量误差很大。
1.7 设计总结
经过四天三夜的奋战,我们完成了题目基本要求和发挥要求,但由于时间和硬件资源的限制,个别指标做的不是非常完善。首先,我代表我们小组感谢本次竞赛的主委会和全体评审老师以及我们的辅导老师,谢谢你们给我们一个提高和展现自己的舞台,让我们在以后的人生中更加自信和坚定,另外也要感谢美信公司给我们提供了不少高质量芯片,使我们的电子设计进行得更加顺利。回想这四天三夜紧张生活,短暂而充实,从焊板到编程、从示波器上波形的跳动到稳定,从手动测量到自动测量??当我们看着液晶显示屏上显示出精确的数据时,那种喜悦是无法用语言形容的。有付出,所以有收获,就我们组而言,大家在许多方面都有了明显的进步和收获,无论是拼搏精神还是团队精神都是我们这一辈子的精神财富。所以不管结果如何,我们都会继续发扬这种精神,不断提高和完善自己。坚定不移地在电子设计这条路上努力,奋斗。
1.8参考文献
[1] 谭丙煜. 怎样撰写科学论文. 沈阳:辽宁人民出版社,1982:59 [2] 童诗白 华成英《 模拟电子技术基础》 高等教育出版社,2000:12
[3] 吴继华 王诚 《Verilog HDL 设计与论证》人民邮电出版社,2006:8 [4] 夏雨闻 《数字系统设计教程》 北京航空航天大学出版社,2003:1
[5] 洗 进 《Verilog HDL数字控制系统设计实例》中国水利出版社,2004:7 [6] 袁文波 <
[7] 刘韬, 楼兴华 编著<
附 录
附录一:元件清单 ATmega128最小系统板 FPGA最小系统板 MAX943 2402液晶显示屏 4*4矩阵键盘 智能型640秒语音模块 自制电源 EDA实验箱(ZY11EDA13BE) 高频信号发生器YB1051
表6—元件清单
附录三:电路设计原理图及相关仿真图
附录四:部分源程序代码 AVR部分源代码
/*====================================================== 头文件名:ad.h 功能:AD转换
======================================================*/ uchar volatge[10];
uint adc() //读取AD转换结果的2进制值 {
uint ad_data; DDRF=0X00; PORTF=0X00;
ADMUX=(0X40|BIT(MUX4)); ADCSRA=0x80;
ADCSRA|=BIT(ADSC);
while(!(ADCSRA&BIT(ADIF))); ad_data=ADCL;
ad_data|=(uint)(ADCH<<8); return ad_data; }
convert(uint data) //读取AD转换结果的2进制值 {
voltage[4]=data+'0'; data=data/10;
voltage[3]=data+'0'; data=data/10;
voltage[2]=data+'0'; data=data/10;
voltage[0]=data+'0'; }
//======================================================
/*====================================================== 头文件名:DS18B20.h 功能:DS18B20驱动程序
======================================================*/
//===================================================== // 宏定义部分,如果要使用本头文件,直接修改此部分即可 //=====================================================
#define CLR_DIR DDRC&=~BIT(0) #define SET_DIR DDRC|=BIT(0) #define CLR_OP PORTC&=~BIT(0) #define SET_OP PORTC|=BIT(0) #define CHECK_IP (PINC&0X01)
uchar temperature[10]=\读取温度缓存区
//===================================================== // 延时函数,此延时函数能满足DS18D20的时序要求
//=====================================================
void delay_1us(void) //1us延时函数 {
asm(\}
void delayus(unsigned int n) //N us延时函数 {
unsigned int i=0; for (i=0;i //===================================================== // DS18D20复位函数 //===================================================== void reset() { SET_DIR; SET_OP; CLR_OP; delayus(480); SET_OP;//要先把他置1,DDRNX清0,这样才有上拉,不然是高阻态 CLR_DIR; delayus(20); while(!CHECK_IP); SET_DIR; SET_OP; delayus(140); }