欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    智能仪器设计基础课程设计_单片机原理及应用课程设计(19页).docx

    • 资源ID:38792669       资源大小:169.62KB        全文页数:19页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    智能仪器设计基础课程设计_单片机原理及应用课程设计(19页).docx

    -智能仪器设计基础课程设计_单片机原理及应用课程设计-第 19 页智能仪器设计基础课程设计目录摘要-3题目-3整体设计及系统原理-3主要硬件介绍-4 STC89C51单片机特点-4STC89C51引脚说明-4硬件设计-6单片机最小系统-6数码管显示电路-7键盘电路-8AD转换电路-9 信号调理电路-924C02电路-10报警电路-11加热电路-11电源电路-12软件设计-12数码管显示程序-1224C02读写程序-14AD转换程序-18算数平均滤波程序-18热电阻非线性校正算法-19按键子程序-20报警子程序-23PID子程序-23主程序-23课程设计总结-27参考文献-27附录: 系统原理图 系统PCB图摘要:随着电子技术的飞速发展,单片机在国民经济生产各行业发挥了重要的作用。它因为集成度高、体积小、运行可靠、应用灵活、价格低、面向控制等特点得到了广大工程技术人员和客户的好评。在温度控制方面,单片机能够代替常规的模拟调节器。本文主要设计了单片机炉温控制系统硬件电路和软件程序。系统具有工作可靠、实时性强等特点,满足控制精度的要求。本着在满足系统性能要求的前提下,尽可能的减少硬件成本。本文主要涉及到控制系统的硬件设计和单片机的控制软件编程。本系统选用热电阻Cu50对炉温进行检测,在AD0804完成模数转换之后,STC89C51单片机对数据进行处理。人机接口电路部分能实现温度设定、温度显示、超温报警等功能。题目:20. 试设计智能仪表实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警,蜂鸣器报警。适配Cu50热电阻,测温范围为0130。采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。整体设计及系统原理:电源在系统中,利用热电阻测得电阻炉实际温度并转换成毫伏级电压信号。该电压信号经过温度检测电路转换成与炉温相对应的数字信号进入单片机,单片机进行数据处理后,通过LED数码管显示温度并判断是否报警,同时将温度与设定温度比较,根据设定的P算法计算出控制量,根据控制量通过控制双向晶闸管的导通和关闭从而控制电阻丝的导通时间,以实现对炉温的控制。该系统中的时钟电路可以根据要求进行准确计时。数码管键盘STC89C51单片机信号调理电路AD080424C02晶闸管主要硬件介绍:STC89C51是改进型的51内核单片机,它比人们常用的AT89S51单片机编程更简单。STC89C51单片机特点:12时钟/6时钟机器周期的8051CPU;工作电压3.4-5.5V;工作频率0-40MHz;程序存储器容量4KB;RAM容量512B;I/O端口与AT89S51相同;通过串口(P3.0 P3.1)直接下载用户程序到代码存储器中(ISP功能),可下载10万次以上;具有EEPROM;具有看门狗,冷启动后未关闭状态,一旦启动无法关闭;3个定时计数器;2个外部中断,掉电模式可由外部中断低电平触发唤醒;一个异步串行口;温度范围0-75(商业),-40-85(工业);具有PDIP-40、PLCC-44、PQFP-44封装。STC89C51引脚说明:VCC:供电电压。  GND:接地。   P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。    P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。     P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。    P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口) P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。  /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。    /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。硬件设计:单片机最小系统:时钟电路采用12MHz的晶振和两个30pF的电容连接而成,是单片机的机器周期为1us左右,在使用定时器时便于计算和设置定时器的初始值。复位电路:由于机器周期为2us,所以RESET引脚上产生一个2us以上的高电平脉冲,即可产生复位动作。电源接上瞬间,电容上没有电荷,相当于短路,所以复位引脚直接连到VCC,单片机复位,随时间增加,电容上电压逐渐变大,RESET引脚上电压逐渐降低至低电平时,单片机恢复正常状态,在此使用10k电阻,10uF电容,时间常数远大于2us,高电平能保持2us以上,足以使系统复位。串口可以用来向单片机里下载程序,以及和计算机通讯等。数码管显示电路:此电路采用8个数码管和一个74LS245,一个74LS138和一个排阻组成。74LS245是一个8双向总线接收器,与单片机的P0口相接,控制数码管的段选端。由于P0口内部没有上拉电阻,所以做输出口时,必须外接上拉电阻。74LS138是一个3-8译码器,与P2口的高三位相接,经过译码控制数码管的位选端,数码管都是共阳数码管。键盘电路: 4个按键分别与单片机的P3.3、P2.2、P2.3、P2.4相接,功能分别为功能选择、数码管选择,加数字、减数字,都是低电平有效,都接上拉电阻是保证没有键按下时,均为高电平,其中功能键按下时会触发外部中断。AD转换电路:ADC0804是一个CMOS的逐步逼近式AD转换器,具有8为分辨率,转换时间为100us,而最大误差为1个LSB值,差动式模拟电压输入、三态数字输出,模拟输入电压为0-5V。信号调理电路:Cu50在0130时电阻变化为50.00077.833,左上方电路为提供1mA电流的恒流源,因此Cu50输出的电压为0.005-0.077833V的电压,通过信号调理电路将其转化为04.2V的电压送入AD。可列方程组 0.005m+b=0与 0.077833m+b=4.2解得 m=151 b=-7.55 由电路图可得Vout=1+R23R24Vin- R23R24 Vref 可令R23=150K,R24=1K, Vref=0.05V右下方为参考电压电路Vref=(1+R22/R21)*V, 可令V=0.03V R22=2K R21=3K. 0.03V可由稳压管TL431经分压可得。此电路中,放大器选择满摆幅运放TLV2472。24C02电路:24C02是一种由I2C接口的EEPROM存储芯片,存储容量为256B,100万次的编程/擦除周期,数据保存可达100年。在此电路中使用此芯片是要保存仪表中某些已设定好的数据,当掉电后,数据不会丢失。由于I2C总线是开漏结构,因此时钟线SCL和数据线SDA用10k电阻上拉到高电平。报警电路: 该报警电路由蜂鸣器和发光二极管、PNP三极管组成,当单片机的P2.0口输出低电平时三极管基极为低电平,三极管导通,蜂鸣器工作发出响声,同时发光二极管也导通,发光。三极管在此处是为了驱动蜂鸣器和发光二极管工作。在软件设计中可设置当温度超过上限或下限时,报警电路工作。加热电路:单片机驱动移相型驱动器、具有点阻性负载的电路如上图所示。移相型驱动器可以在单片机控制驱动器的瞬间使驱动器MOC3022触发双向晶闸管BTA12,因此可以按照单片机发出的控制信号控制双向晶闸管导通角。其中R9=(5V-VOL-VF)/IFT=2V/10mA=200,电阻R11用于限制MOC3022的输出电流ITSM,计算公式如下:R11=Vpeak/ITSM=(2202)V/1A=311.第二个电路为电压过零检测电路,当电压过零时,向单片机发一个中断,单片机可以按照此信号控制双向晶闸管的导通角。电源电路:这是仪表的供电电路可以通过外接直流电源,然后通过该电源电路给仪表供电。电路图中的二极管桥式电路是滤波电路。接入电源后通过稳压模块7805稳压最终获得+5V的电压。最左面的发光二极管是检测电源是否接通。通电时,二极管亮。软件设计:数码管显示程序:#define uchar unsigned char#define uint unsigned intvoid delay(uint x) /延时函数大约延时5msuchar m,n;for(m=x;m-;m>0)for(n=60;n-;n>0);void display1(uchar a,uchar b,uchar c,uchar d)/设定值显示P2=0x8f&P2; /送第一个数码管的位码P0=a; /送第一个数码管的段码 delay(10); /短暂延时P2=0x9f&P2;/送第二个数码管的位码P0=b; /送第二个数码管的段码delay(10);P2=0xaf&P2;/送第三个数码管的位码P0=c;/送第三个数码管的段码delay(10);P2=0xbf&P2;/送第四个数码管的位码P0=d;/送第四个数码管的段码delay(10);void display2(uchar a,uchar b,uchar c,uchar d)/测量值显示P2=0xcf&P2;/送第一个数码管的位码P0=a;/送第一个数码管的段码delay(10);P2=0xdf&P2;/送第二个数码管的位码P0=b;/送第二个数码管的段码delay(10);P2=0xef&P2;/送第三个数码管的位码P0=c;/送第三个数码管的段码delay(10);P2=0xff&P2;/送第四个数码管的位码P0=d;/送第四个数码管的段码delay(10);24C02读写程序:#define uchar unsigned char#define uint unsigned intuchar a;sbit sda=P34;sbit scl=P35;void delay()void start() /启用总线sda=1;delay();scl=1;delay();sda=0;delay();void stop()/停用总线sda=0;delay();scl=1;delay();sda=1;delay();void reply()/应答信号uchar i;scl=1;delay();while(sda=1)&&(i<250)i+;scl=0;delay();void first()/24C02初始化程序sda=1;delay();scl=1;delay();void write(uchar date)/写一个字节的程序uchar k,temp;temp=date;for(k=0;k<8;k+)temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();scl=0;delay();sda=1;delay();uchar read()/读一个字节的程序uchar i,m;scl=0;delay();sda=1;delay();for(i=0;i<8;i+)scl=1;delay();m=(m<<1)|sda;scl=0;delay();return m;void delay1(int x)/延时程序uchar a,b;for(x=a;a>0;a-)for(b=100;b>0;b-);void write_add(uchar address,uchar date)/写程序start();write(0xa0);reply();write(address);reply();write(date);reply();stop();uchar read_add(uchar address)/读程序uchar dat;start();write(0xa0);reply();write(address);reply();start();write(0xa1);reply();dat=read();stop();return dat;AD转换程序:sbit wr=P36;sbit rd=P37;#define uint unsigned int#define uchar unsigned charuint AD() /AD转换函数 uchar AD; wr=0; delay(2); wr=1; delay(20); rd=0; delay(2); P1=0xff; AD=P1; rd=1; return AD; 算数平均滤波子程序: #define N 8/定义采样次数uchar value_bufN;uchar lvbo()/滤波函数uchar i;uchar count;int sum=0;value_bufi+=AD; /获取AD转换结果,并计算累加和if(i=N)i=0;for(count=0;count<N;count+)sum+=value_bufcount;return (uchar)(sum/N);热电阻的非线性校正算法:热电阻Cu50的阻值与温度的关系,并非是绝对的线性关系,因此为了使仪表误差较小应该对热电阻进行非线性校正。在1mA的恒定电流下,热电阻的电压与温度变化的关系如下表所示:T/0102030405060U/mA50.00052.14454.28556.42658.56560.70464.842T/708090100110120130U/mA64.98167.11969.25971.40073.54275.68777.833程序:uint var;uint code Rtable=50000 52144 54285 56426 58565 60704 64842 64981 67119 69259 71400 73542 75687 77833/热电阻的电压值,每隔10度对应一个电压/值void tab()/查表子函数uint v1=0,max,min,min,mid,j;v1=AD*1000; /AD采样值扩大1000倍,因为表中电压值扩大/了1000倍min=0;max=13;/给出表格的初始元素序号与最后元素的序号while(1)/开始查表mid=(max+min)/2;/中心元素位置if(Rtablemid=v1) var=mid*10;break;/中心元素等于查表得元素/计算相应温度if(Rtablemid>v1) max=mid;else min=mid;if(max-min)<=1)/多次循环后,获得v1值对应的下限值元素序/号与上限元素序号 j=( Rtablemax-Rtablemin)/10;/表中相邻两值对应温度相差/10度j=(v1-Rtablemin)/j; /得到max-min之间的电压/度var=10*min+j; /获得总温度break;按键子程序:uchar ba,sh,ge,sf,m;sbit set=P33;sbit xuan=P22;sbit jia=P23;sbit jian=P24;void key()/按键函数uchar i;if(xuan=0) /按下数码管选择键delay(10); /延时消抖if(xuan=0) /再次确认是否按下i=i+0x10; /位选值加1if(i=0xcf)i=0x8f;P2=P2&i;/送入位选while(!xuan);/等待松手while(jia!=0)&&(jian!=0)&&(set!=0)&&(xuan!=0)/数码管闪烁P0=0xff;delay(20);P0=0x00;delay(20);if(jia=0)/加数子程序delay(10);if(jia=0)switch (i) /选择要加数的数码管case 0x8f:ba+;if(ba=10)ba=0;P0=tableba;while(!jia);break;case 0x9f:sh+;if(sh=10)ba=0;P0=tablesh;while(!jia); break;case 0xaf:ge+;if(ge=10)ge=0;P0=table1ge;while(!jia);break;case 0xbf:sf+;if(sf=10)sf=0;P0=tablesf;while(!jia); break;if(jian=0)/减数子程序 delay(10); if(jian=0)switch (i)/选择要减数的数码管case 0x8f:ba-;if(ba=0)ba=9;P0=tableba;while(!jian);break;case 0x9f:sh-;if(sh=0)sh=9;P0=tablesh;while(!jian);break;case 0xaf:ge-;if(ge=0)ge=9;P0=table1ge;while(!jian);break;case 0xbf:sf-;if(sf=0)sf=9;P0=tablesf;while(!jian);break;void anjian(uint hial,uint loal,uint p,uint sv)/按键程序if(m=1)/设定设定值key();sv=ba*1000+sh*100+ge*10+sf;display2(0x00,0x6d,0x1c,0x00);if(m=2)/设定上限值key();hial=ba*1000+sh*100+ge*10+sf;display2(0x76,0x06,0x77,0x38);if(m=3)/设定下限值key();loal=ba*1000+sh*100+ge*10+sf;display2(0x38,0x5c,0x77,0x38);if(m=4)/设定比例带key();p=ba*1000+sh*100+ge*10+sf;display2(0x00,0x73,0x00,0x00);if(m=5)/设定退出m=0;void setjian() interrupt 2 /按下功能选择键触发中断通过记录中断/次数改变要设定的功能delay(10);while(!set);m+;报警子程序:sbit fengmingqi=P20;sbit led1=P31;sbit led2=P30;void baojing()if(var>hial)fengmingqi=0;led1=0;if(var<loal)fengmingqi=0;led2=0;PID子程序:uint e,out,outm,k;void pid()e=var-sv;k=1/p;out=k*e+outm;if(out>outm) out=outm;if(out<0) out=0;主程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,;uint code Rtable=50000 52144 54285 56426 58565 60704 64842 64981 67119 69259 71400 73542 75687 77833;uchar displaytime, sampletime,controltime, ba,sh,ge,sf,m;uint var,e,out,out0,outm,k,ci;sbit sda=P34;sbit scl=P35;sbit wr=P36;sbit rd=P37;sbit set=P33;sbit xuan=P22;sbit jia=P23;sbit jian=P24;sbit fengmingqi=P20;sbit jiare=P21;sbit led1=P31;sbit led2=P30;void main() uchar gao,di;TMOD=0x22;TH0=156;TL0=156;TH1=200;TL1=200;EA=1;ET0=1;ET1=1;TR0=1;gao=uchar read_add(1);di=uchar read_add(2);sv=gao*100+di;gao=uchar read_add(3);di=uchar read_add(4);hial=gao*100+di;gao=uchar read_add(5);di=uchar read_add(6);loal=gao*100+di;gao=uchar read_add(7);di=uchar read_add(8);p=gao*100+di;while(1) anjian(hial,loal,p,sv); write_add(0x01,sv/100); write_add(0x02,sv%100); write_add(0x03,hial/100);write_add(0x04,hial%100);write_add(0x05,loal/100);write_add(0x06,loal%100);write_add(0x07,p100);write_add(0x08,p%100);ba=sv/1000;sh=sv%1000/100;ge=sv%100/10;sf=sv%10display1(tsbleba,tablesh,table1ge,tablesf);if(displaytime=1) ba=var/1000;sh=var%1000/100;ge=var%100/10;sf=var%10display2(tsbleba,tablesh,table1ge,tablesf); displaytime=0;if(sampletime=1) uint AD();uchar lvbo(); tab();sampletime=0;If(controltime=1) pid(); baojing(); controltime=0; void timer0() interrupt 1 static uint n,m,k;n+;m+;k+;h+;if(n=100) n=0;displaytime=1;if(m=5000) m=0;displaytime=1;if(k=5000) k=0;controltime=1;void intr0 interrupt 0TR1=1;jiare=1;void setjian() interrupt 2 delay(10);while(!set);m+;void tim1 interrupt 3 ci+; if(ci=180-(180*out/outm) ci=0; jiare=0;课程设计总结: 通过这次课程设计,我不只是仅仅简单的设计出电阻炉温度控制系统,我还加深了对单片机硬件系统和微型计算机控制系统的理解,此外我对C语言有了更深刻的理解,更进一步了解了如何用C语言编写程序,以及如何用Altium designer绘制电路原理图和系统的PCB图。 在这次课程设计的过程中,我遇到过许多次失败的考验,比如说对温度控制系统的不太了解等,这些都增加了课程设计的难度。这次课程设计更锻炼了我发现问题,解决问题的能力。我在这次课程设计上的收获不仅仅对于单片机这一门课有帮助,这些对于其他专业课乃至以后的学习、生活、工作都有极大的帮助。 总之这次课程设计不是简简单单的一次课程设计,它也是我的一次学习过程,对我起到了非常积极的影响。附录:PCB图

    注意事项

    本文(智能仪器设计基础课程设计_单片机原理及应用课程设计(19页).docx)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开