收藏 分销(赏)

PCF8591DA模拟小信号.doc

上传人:s4****5z 文档编号:8660732 上传时间:2025-02-24 格式:DOC 页数:21 大小:950KB 下载积分:10 金币
下载 相关 举报
PCF8591DA模拟小信号.doc_第1页
第1页 / 共21页
PCF8591DA模拟小信号.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
课程设计报告 课程名称: 课程设计 题 目: PCF8591产生小信号 摘要 本文主要介绍利用PCF8591芯片DA转换产生小信号(100毫伏以内),然后经LM358放大滤波,最后再用ADC0809芯片AD转换将放大后信号用单片机显示。 DA产生的小信号可用来模拟霍尔线性传感器产生的小信号。即本设计可用来模拟磁场检测 关键词:PCF8591、小信号、放大滤波、ADC0809。 目录 一、绪论 4 1.1 课题概述 4 1.2 磁场检测系统发展概况 4 1.3 课题研究的目的和意义 4 二、系统设计 5 2.1 设计任务 5 2.2 系统设计思路 5 2.3 系统设计框图 5 三、硬件设计 6 3.1 DA模块 6 3.2 信号放大滤波模块 7 3.3 AD模块 7 3.4 主单片机STC89C52部分 8 3.5 按键模块 8 3.6 显示模块 9 3.7 报警模块 9 3.8 整体电路 10 四、软件设计 11 五、系统仿真与调试 12 5.1 Proteus仿真 12 5.2 硬件调试 13 六、设计总结与心得体会 14 七、参考文献 15 附录一 源程序 16 一、绪论 1.2 磁场检测系统发展概况 最早的磁场探测器已有2000多年的历史,通过感应地球磁场辨识方向或为舰船导航。随着现代科技的进步,磁场传感器的应用越来越广泛,磁场传感技术向着高灵敏度、高分辨率、小型化以及和电子设备兼容的方向发展。文献[1~4]等传感器专著对各类传感器进行了论述,但关于磁场传感器的篇幅不多,介绍不全面。本文在广泛查阅国内外文献的基础上,对磁场传感器进行了系统总结。从应用的观点出发,根据磁场感应范围将磁场传感器分为三类:低强度磁场、中强度磁场及高强度磁场传感器[5]。 低强度磁场传感器通常检测1μG以下的磁场;中强度磁场传感器通常检测1μG~10G磁场;高强度磁场传感器检测范围通常在10G以上。 1.3 课题研究的目的和意义 磁场强度是工业检测的重要手段,利用检测磁场强度检测转速,利用磁场处理水研究,利用检测磁场降低人类血液黏度等。磁场已经应用于各行各业中,所以其强度的检测也显得很有市场。本设计原理可将微弱的磁场变化信号放大,并让显示发生变化,变化的电压对应磁场强度的变化值。 通过制作本课程设计,也让自己更加灵活的运用单片机以及信号处理方面的知识,理论与实际紧密结合,增强对理论的分析能力。 本课题基于单片机的磁场强度检测系统设计,系统维护简单,工作应用简单。因此,本课题是非常有意义的。 二、系统设计 2.1 设计任务 1、用DXP软件画出系统原理图; 2、将原理图导入PCB,制作PCB板 3、编写简单程序,对焊完的板子进行简单调试,检查数码管、蜂鸣器等处是否有问题,以及检查整体电路是否缺失、短接; 4、编写程序,实现模拟信号的产生,信号滤波,信号放大,信号AD转换处理等功能。 5、将程序烧进单片机,对实物进行调试,最后完善功能。 2.2 系统设计思路 充分设计利用STC89C52的40个引脚,节省其他硬件的使用,主要实现以下功能: 1. 当系统上电时,数码管显示的是模拟信号经放大后的电压值。 2. 通过按键可改变(增加或减少)产生模拟信号的大小。 3. 长按按键1可显示增加的磁场强度单位个数。 4. 长按按键2可让模拟信号产生变化的锯齿波。 5. 对模拟信号进行放大,数码管实时显示。 2.3 系统设计框图 图1 系统设计框图 三、硬件设计 系统硬件分为7个模块: 1、主单片机STC89C52部分,主控制芯片。 2、DA转换部分采用的是PCF8591芯片,输出信号为小信号(单个变化6MV多一点,整体变化60MV)变化。 3、信号放大模块采用LM358运放芯片。 4、AD转换采用ADC0809芯片。 5、按键采用四脚轻触开关。 6、显示模块采用四位共阴数码管。 7、报警模块采用5V有源蜂鸣器。 3.1 DA模块 此模块采用的是PCF8591芯片来实现,原理如下图2所示: 图2 DA转换模块 PCF8591是具有I2C总线接口的8位A/D及D/A转换器。有4路A/D转换输入,1路D/A模拟输出。这就是说,它既可以作A/D转换也可以作D/A转换。A/D转换为逐次比较型。引脚图如图2所示。电源电压典型值为5V。 AIN0~AIN3:模拟信号输入端。 A0~A3:引脚地址端。 VDD、VSS:电源端。(2.5~6V) SDA、SCL:I2C总线的数据线、时钟线。 OSC:外部时钟输入端,内部时钟输出端。 EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。 AGND:模拟信号地。 AOUT:D/A转换输出端。 VREF:基准电源端。 此模块需要说明的是在PCF8591的VREF引脚接了一个10K的滑动变阻器,其目的是用来改变其基准电压,从而提高其DA输出的信号的最小分辨率。其中AOUT引脚输出产生的模拟信号,接一了一个10UF电容用来滤除其中的噪声信号,电容容值的选取根据信号频率的大小,本设计产生连续自动变化的模拟小信号时其频率大约为10HZ,因此,其叠加在上面的噪声会比10HZ要高,根据经验因此选用了10UF电容。 3.2 信号放大滤波模块 此模块采用LM358芯片构成二阶低通滤波电路实现,其原理如下图3所示: 图3 信号放大滤波模块 此二阶低通滤波电路中的电阻与电容值根据信号频率选取,具体内容此处不详述。下面三个排针引出的分别为模拟的最初小信号输出,一级放大后的输出,二级放大后的输出。第一级放大倍数为2.5倍,这是因为考虑到二阶低通滤波器增益在2.5倍效果较好,一般不能超过3倍,第二级放大电路放大41倍,所以总的放大倍数为2.5*41=102倍。 其中OUT2输出端接了一个电阻和发光二极管,当DA输出自动变化的小信号经放大后,其灯将闪烁。 3.3 AD模块 此模块采用的是ADC0809芯片实现,具体原理如下图4所示: 图4 AD转换模块 3.4 主单片机STC89C52部分 单片机晶振:12MHZ,STC89C52;电源:VCC=5V,接地GND及复位电路。如图5所示: 图5 单片机最小系统 RST引脚是复位信号输入端,高电平有效。采用上电加按钮复位,因为本系统设计考虑到该系统比较重要,所以除了采用上电复位的方式外,应该还有按钮复位备用复位方式以防止系统死机时能。 3.5 按键模块 图6 按键模块 本模块有两个按键,其中K1表示信号增加,当按下该键时,发出相应控制信号,使信号发生器信号输出增加,增加的一个幅度与VREF的基准电压有关,此处经测量增加大约3.5mv,经放大102倍,显示将增加0.35V。 3.6 显示模块 在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前三位显示电压的整数位,最后一位显示转速的小数位。 4-LED显示器引脚如图7所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。 图7 四位共阴数码管 在本设计中,数码显示的为小信号经二级放大后的电压值,前三位为有效数值,最后一位显示的是字符“V”。当然按键切换模式时,显示也会发生相应的变化。 3.7 报警模块 该电路中蜂鸣器用的是有源蜂鸣器,如图8蜂鸣器驱动模块: 图8 蜂鸣器连接图 3.8 整体电路 图9 整体电路图 此原理图采用Altium Designer软件设计,在保准正确性的前提尽量使布局合理,美观。其中大部分分连线采用的都网络标号的形式来连接,这样省空间,有时也更一目了然。 四、软件设计 根据上述硬件及框图设计,设计出软件流程图,如图6所示: 图10 模式1和模式2软件流程图 其中长按住K2键即可实现模式的切换,在模式2下,自动变化的小信号经放大后到驱动的LED灯会闪烁,因为数值在不断变化,所以数码管显示也是在变化。 再按住K2键软件将又切换回模式1,在模式1下,其信号的增加或者减少只能通过按键来实现。 软件设计中还有一个中断程序,其主要是为了给ADC0809的CLK引脚提供时钟脉冲。 五、系统仿真与调试 5.1 Proteus仿真 调试与仿真图如图11、图12所示: 图11 整体仿真 图12 仿真示波器显示 从仿真上示波器的显示来看,最后经放大后的波形上端有一点被截止了,但实际板子测得的波形没有失真,所以程度调整为适合实际情况。 5.2 硬件调试 实物图做的是PCB板,PCB图和实物图如下图所示 图13 实物图正面、反面 由于一开始画PCB时有个封装弄错了,导致线路有些地方有点小错误,然后加上ADC0809的引脚本身就很不好连线,所以从实物图的背面可以看到有几根飞线,在设计PCB是我也尽量避免飞线的出现,但板子较小,只有7CM*9CM,所以最终还是有了几根飞线。 在正面图中,下面左边的按键为K1键,右边按键为K2键。 图14 PCB设计图 六、设计总结与心得体会 本次设计从选定方案到最终实施花了较长时间,因为涉及到的内容较多。包括DA模拟,信号放大,信号滤波,AD转换等。其中在滤波器的设计中花的时间最多,因为以前对这一块接触得较少,但通过这次课程设计后感觉自己收获不少,学会了怎样对模拟电路进行分析,也更加熟悉了仿真软件的作用,其实仿真如果用得好对学电路知识是有很大的帮助的。比如,在滤波电路中,对电容的选取不太懂,这时可以利用仿真改变电容容值大小,然后观察对波形有什么影响,我觉得这一点对实际分析电路是很有帮助的,因为有时理论计算出电容,电阻值,但有时在实际电路中包含了各种噪声,这时滤波器中的电阻电容可能还得根据实际情况来调整。 本次课设虽然圆满完成,但这之中的过程还是很值得自己去思考,在设计PCB时,有些问题考虑得不周全,以至于后面实际板子做出来后才发现有东西要改,这样就造成了很多的麻烦,因此也就要浪费更多的调试时间。所以在花原理图时对一些细节就要求考虑全面,要做到先发现错误,先改正错误。并且做电路板是一件烦琐的事情,对这整个过程不能嫌麻烦,一旦有这种排斥心情是很难将这些事情做好的。 通过这次设计,我对数字电路设计中的逻辑关系等有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故知新,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分的内容。在这次设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法我们更好的理解知识,所以在这里非常感谢帮助我的同学。 七、参考文献 【1】彭伟 单片机C语言程序设计实训100例 电子工业出版设 2009 【2】阎石 数字电子技术基础 高等教育出版社2006 【3】李朝青 单片机原理及接口技术 北京航空航天大学出版 2006 【4】张国雄 测控电路-第4版 机械工业出版社 2011 附录一 源程序 #include<reg52.h> #define uint unsigned int #define uchar unsigned char #define SCL_SET SCL=1 //DA #define SCL_CLR SCL=0 //DA #define SDA_SET SDA=1 //DA #define SDA_CLR SDA=0 //DA #define AddWr 0x90 //写数据地址 sbit K1=P1^4; //按键增加送入DA的数字量 sbit K2=P1^5; //按键减少送入DA的数字量 sbit SCL=P1^0; //DA时钟脉冲 sbit SDA=P1^1; //DA双向输入输出数据端 sbit ST=P1^2; //ADC0809各引脚 sbit EOC=P1^3; sbit OE=P1^7; sbit CLK=P2^0; sbit beep=P1^6; //蜂鸣器 sbit P07=P0^7; //数码管小数点 bit model=0; //波形发生模式,通过K2来改变,为0时按键增加光强,为1时锯齿波变化 uchar juchi_data=0; //锯齿波自动增加,减少数字量 uchar KEY_Data; //送给DA的数字量 uchar delaytime; //按键长延时时间 uint num[1]; //用来存AD转换后小数点后第3,4位的数值,精确四舍五入 uchar weima[4]; //存储数码管四位数,送显示的只有0,1,2,最后一个3用来判断四舍五入 uchar code duanma[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e}; //数码管段码显示 0 1 2 3 4 5 6 7 8 9 V void delayus(uint cnt) //延时1US { while(--cnt); } void delayMS(uint z) //延时1MS { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void DA_start() { SDA_SET; delayus(1); SCL_SET; delayus(5); SDA_CLR; } /* void DA_stop() //本程序没用到此函数 { SDA_CLR; delayus(1); SCL_SET; delayus(5); SDA_SET; } */ void DA_ack() { SDA_CLR; SCL_SET; delayus(1); SCL_CLR; } void DA_send(uchar Data) { uchar i=0; uchar temp=0; temp=Data; for(i=0; i<8; i++) { SCL_CLR; delayus(1); if(temp&0x80) SDA_SET; else SDA_CLR; delayus(1); SCL_SET; delayus(1); temp<<=1; } SCL_CLR; } void DAC(uchar light) { DA_start(); DA_send(AddWr); DA_ack(); DA_send(0x40); //写入控制位,使能DAC输出 DA_ack(); DA_send(light); DA_ack(); // DA_stop(); } uchar ADC() { uchar value; ST=0; OE=0; ST=1; delayus(1); ST=0; //启动转换 delayus(2); while(EOC==0); //等待转换结束 OE=1; //允许输出 delayus(1); value=P3; OE=0; return value; } void display() { uchar delaytime=8; uint AD_value; AD_value = (ADC()*1.0/255)*500-13; weima[0] = AD_value%10; //因此可以认为小数后面第二位是AD的个位数(第三位数) weima[1] = AD_value/10%10; //小数点后面的第一位是adc的十位(第二位数) weima[2] = AD_value/100; //个位为adc的百位(第一位数) P2 =0xef; //送第一位 P0=duanma[weima[2]]; P07=1; //显示小数点 delayMS(delaytime); P2 = 0xdf; //第二位 P0 = duanma[weima[1]]; delayMS(delaytime); P2 = 0xbf; //第三位 P0=duanma[weima[0]]; delayMS(delaytime); P2 = 0x7f; //第四位 P0=duanma[10]; delayMS(delaytime); } void KEY() { delaytime=0; if(K1==0) { delayMS(5); while(K1==0) //这里进行长延时,实现长按时出现另一功能 { delaytime++; delayMS(10); if(delaytime>=200) //长按超过2S { while(K1==0) { P2=0Xef; P0=duanma[KEY_Data]; } } } KEY_Data++; //让送进去的数加1 } if(K2==0) { delayMS(5); KEY_Data--; //让送进去的数减1 } } void BEEP() { uchar i=3; if((weima[2]>=3)) while(i--) { beep=~beep; delayMS(5); } beep=1; } void Init_interrupt() { TMOD=0X01; TH0=(65536-100)/256; TL0=(65536-100)%256; IE=0X82; TR0=1; } void Amplitude() //锯齿波产生函数 { DA_send(juchi_data); //取地址 DA_ack(); juchi_data++; if(juchi_data == 12 ) juchi_data = 0; } void main() { Init_interrupt(); DAC(0); P07=1; while(1) { while(model==0) { DA_send(KEY_Data); //发送数字量 DA_ack(); KEY(); while(K2==0) //这里进行长延时,实现长按时出现另一功能 { delayMS(10); delaytime++; if(delaytime>=200) //长按超过2S { model=!model; while(K2==0) delayMS(10); } } BEEP(); display(); } while(model==1) { Amplitude(); while(K2==0) //这里进行长延时,实现长按时出现另一功能 { delayMS(10); delaytime++; if(delaytime>=200) //长按超过2S { model=!model; while(K2==0); } } display(); } } } void Timer0_INT() interrupt 1 { TH0=(65536-100)/256; TL0=(65536-100)%256; CLK=~CLK; } 20
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服