下位机与CAN总线接口部分的硬件设计—毕业设计.doc_第1页
下位机与CAN总线接口部分的硬件设计—毕业设计.doc_第2页
下位机与CAN总线接口部分的硬件设计—毕业设计.doc_第3页
下位机与CAN总线接口部分的硬件设计—毕业设计.doc_第4页
下位机与CAN总线接口部分的硬件设计—毕业设计.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附 录4.2.3 下位机与can总线接口部分的硬件设计下位机与can总线接口部分的硬件设计如图4-4所示。图 4-4 下位机与can总线接口部分硬件设计图中,can总线系统智能节点采用at89c51作为节点的微处理器,在can总线通信接口中,采用philips公司的sja 1000和pca 82c250芯片,sja 1000是独立can通信控制器:pca82c250为高性能can总线收发器;6n137为高速光电耦合器。微处理器89c51负责sja1000的初始化,并将从上位机接收到的数据转发给sja1000,通过can总线发给其它can节点。cpu通过地址/数据复用方式对sja1000执行相应的读写操作,sja1000的,wr,ale分别与89c51的对应引脚相连,sja1000的ad0-ad7连接到89c51的p0口。直接接地,一直选中sja 1000,只要cpu进行外部数据读写,也即是对sja1000进行读写。89c51通过中断方式访问 sja1000, sja1000的接89c51的int0 ,sja1000 mode引脚一直接高电平,使其一直选中intel模式。sja1000外接上电硬件复位电路,使其一上电内部ram初始化;sja1000与pca82c250之间的通讯不是直接相连而成,而是通过6n137进行光电隔离,这样就很好的实现了总线上各can节点间的电气隔离,可以大大增强can总线节点的抗干扰能力。值得一提的是:光耦部分电路所采用的两个电源vcc和vdd必须完全隔离,否则采用光耦也就失去了意义。pca82c250与can总线的接口部分也采用了一定的安全和抗干扰措施,pca 82c250的canh和canl引脚各自通过一个5欧姆的电阻与can总线相连,电阻可起到一定的限流作用,保护pca82c250免受过流的冲击。pca82c250的rs脚上接有一个斜率电阻,电阻大小可根据总线通讯速度适当调整,一般在16k-140k之间。4.2.4 下位机与can接口硬件工作原理发送过程:下位机89c51微处理串口接收后的数据,通过地址擞据复用的方式将数据并行发送给sja1000。89c51微处理器发送来的数据存储在sja1000的发送缓冲区,当发送完数据后,再发送一发送命令字,sja1000接收到发送命令字后,将接收缓冲区中的数据通过pca82c50发送到can总线上,总线上若无其它can节点,则发送得不到应答,将导致此can节点总线关闭,此后就不再发送数据了。若总线上有其它can节点,且数据发送正确,发送完数据后,状态寄存器的内容为0ch,表示最近一次数据发送成功,且可以向发送缓冲区再次写入数据;若数据发送不正确,发送完数据后,状态寄存器的内容为04h,表示最近一次数据发送未成功,但仍可以向发送缓冲区再次写入数据。若数据连续发送不正确,导致发送错误计数器寄存器的值达到或超过报警限额寄存器的值,则状态寄存器将指示“总线错误状态”;若发送错误计数器寄存器的值达到或超过256次,则状态寄存器将指示“总线关闭状态”,总线关闭后即使执行发送命令后仍无数据发送。接收过程:数据通过can总线,经过pca82c250传到sja1000,接收到的数据存入接收缓冲区。若接收的数据正确,则状态寄存器为01h,表示rxfifo中存在完整有效的报文,同时使引脚变低,触发cpu的一次中断,cpu则以中断方式读取数据,读完数据后执行释放接收缓冲区命令,则释放出当前呈现的报文存储空间。cpu将接收到的数据再以串行的方式发给下位机。本系统中,关键设计的是下位机的自动控制系统和sja1000的通讯。4.3 软件设计4.3.1 系统功能及原理系统利用单片机进行现场控制,自动巡回检查液位,实现现场可控。同时利用can总线进行上下位机的通讯,从而实现智能控制。4.3.2 功能设计本系统具有模块化、开放性特点,根据实际要求可以增加智能节点;通过对计算机程序的进一步开发,可实现控制网络对因特网的连接。由于控制算法固化于现场功能执行模块,所以本系统真正实现了“现场控制”,大大提高了自动控制的智能化。4.3.3 下位机方案设计利用压力传感器实现对液位的采集,然后信号通过运算放、保持器和a/d转换器将模拟量变为数字量送入单片机进行处理。我们预先从键盘输入一个控制量,由数字显示电路显示出实际的高度。当高度高于上限值时,系统将停止进水设备,开启排水设备,把液位高度降下来;当高度低于上限复位值时,才关闭全部的设备,继续检测。当液位高度低于下限值时,与高于上限值的控制方法类似。当液位高度高于或低于报警的上下限值时,报警器发声,提醒工作人员此时液位太高或太低,以做出相应的处理措施。4.3.4 系统程序设计思想模块化程序设计是把整个程序分成若干个小的程序或模块,分别进行独立设计、编程、测试和查错,最后装配在一起。它的优点是单个模块要比完整程序易于编写、查错、测试和维护,便于修改、更新和扩充,而且程序具有一定的灵活性和通用性,当控制系统结构相同或相类似时,程序可以移植。模块化程序设计的关键,是如何把程序分成逻辑上相互独立的模块以及如何把模块装配在一起。根据这种设计思想结合系统要完成的功能,将整个程序划分为五个模块,它们的主要功能及包括的子程序如下: 主程序模块完成内存单元和器件的初始化、中断资源的分配及优先级的设置等; 过程监视模块完成数据的采样、显示; 控制程序模块完成控制算法的运算及工艺过程的控制; 数据处理模块将输入计算机的数据或计算机输出的控制量进行处理或变换。包括数字化滤波、线性化处理、工程量转换等; 通用子程序模块完成加、减、乘、除运算及数据不同进制之间的转换等。4.3.5 中断控制cpu对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器ie控制。每个中断源优先级的设定则由中断优先几寄存器ip控制。 中断的开放和关闭通过中断寄存器ie进行两级控制。两级控制是指有一个中断允许总控制器ea,配合各中断源的中断允许控制位共同实现对中断请求的控制。这些中断允许控制位集成在中断允许寄存器ie中。如图4-5所示。ie的各位的作用如下:ea为cpu中断允许位。ea=0时,cpu关中断,禁止一切中断;ea=1时,cpu开放中断,而每个中断源是开放还是屏蔽,则由各自的允许位确定;保留位;et2为定时器2中断允许位。仅用于52系列中;es为串行口中断允许位。es=1时,允许串行口的接收与发送;es=0时,禁止串行口中断;et1定时器1中断允许位。et=1时,允许t1中断,否则禁止;ex1外部中断1的中断允许位。ex1=1时,允许外部中断1;否则禁止;et0定时器0的中断允许位,et0=1时允许中断;否则禁止;ex1外部中断0的中断允许位,et0=1时允许中断;否则禁止。ea x et2 es et1 ex1 et0 ex0d7 d6 d5 d4 d3 d2 d1 d0图4-5 中断允许寄存器ie 中断优先级别的设定:x x pt2 ps pt1 px1 pt0 px0d7 d6 d5 d4 d3 d2 d1 d051系列的两个中断级别,可用软件设计为高低级别,并可实现嵌套。中断寄存器ip如图4-6所示。图4-6 中断优先级寄存器ipip的各位的作用如下:pt2定时器2的优先级设定。仅用于52系列中;ps为串行口中断设定位。es=1时,设定串行口的接收与发送为高;es=0时,设定串行口中断为低;pt1定时器1中断设定位。et=1时,设定t1中断为高,否则为低;px1外部中断1的中断设定位。ex1=1时,设定外部中断1为高;否则为低;pt0外部中断1的中断设定位。ex1=1时,设定外部中断1为高;否则为低;px0外部中断0的中断设定位,et0=1时设定中断为高;否则为低。4.3.6 部分流程图 系统程序主要由主程序、显示子程序、a/d转换子程序、键盘中断服务子程序、sja1000通讯子程序等组成。主程序框图主程序简要流程图,如图4-7所示。开始初始化各芯片键盘输入(a)送显示采样值(b)a=b?关排水开给水报警ynynab?关给水开排水报警送显示到上限?到下限?ynny图4-7 主程序流程图sja1000初始化子程序sja1000的初始化只有在复位模式下才可以进行。初始化主要包括工作方式的设置、接收滤波方式的设置、接收屏蔽寄存器(amr)和接收代码寄存器(acr)的设置、波特率参数设置和中断允许寄存器(ier)的设置等。在完成sja1000的初始化设置以后,sja1000就可以回到工作状态,进行正常的通信任务。其初始化流程图,如图4-8所示。 推出软件复位,进入正常模式设置中断触发方式,开中断设置接收缓冲器首址设置接收、发送错误计数器初值设置输出模式进入软件复位方式设置can模式设置中断使能寄存器设置屏蔽寄存器设置验收代码寄存器设置波特率开始初始化结束图4-8 sja1000的初始化流程图 sja1000通讯子程序 sja10ynnyynysr.3=1?sr.2=1?发送完毕?cpu的数据写入sja1000的数据缓冲区启动发送命令读状态寄存器srsr.4=1?n发送程序入口返回00发送子程序简要程序流程图,如图4-9所示。图4-9 sja1000发送流程图 sja1000接收子程序简要流程图,如图4-10所示。yn读中断存储器ir读一祯报文释放接受缓冲器ir.0=1?中断服务程序入口返回图4-10 sja1000接收流程图 键盘程序流程图,如图4-11所示。开始读列线有按键否读行线有按键否延时消抖动等待闭合键释放行线列线值转换未按键编码保存返回nnyy图4-11 键盘程序流程图部分程序如下:ccm0 equ 5fh ;设定液位 (16进制)ccm1 equ 5eh ;设定液位(个位bcd码)ccm2 equ 5dh ;设定液位(十位bcd码)knd equ 5bh ;设定液位(输入位数)t10 equ 5ah ;50ms计时周期bcd0 equ 59h ;显示液位标志位bcd1 equ 58h ;显示液位个位数(bcd码)bcd2 equ 57h ;显示液位十位数(bcd码)dh equ 56h;dl equ 55h;定义入口地址 org 0000h; ajmp main org 001bh ajmp ctprogorg 0030h;主程序及键盘扫描程序main: mov sp,#60h mov p2, #0 mov p0,#0ffh setb p2.6 ;关闭流量阀门 clr p2.6 setb p2.7 clr p2.7 mov p,#06hmov p2,#0eh ;显示000000mov p2,#0mov ccm0,#0 ;液位初始设定mov ccm1, #0mov ccm2, #010mov knd,#0mov tmod,#15h ;t1为16位内定时,t0为16位外计数mov dptr,#15536 ;t1定时50msmov th1,dphmov tl1,dplmov th0,#0mov tl0, #0mov t10,#10 ;每50ms10=0.5s测一次main: setb tr0 setb tr1 seb et1 ;开定时器中断 setb eaaskkb:mov knd,#0 mov p0,#0feh ;扫描第一行07数字键 setb p2.0 clr p2.0 orl p1,#0ffh mov a,p1 cpl a cjne a, #0,skey ;有键闭合,转skeyaskkb1:mov p0,#0fdh ;无键闭合,扫描第2行 setb p2.0 clr p2.0 orl p1,#0ffh mov a,p1 cpl a cjne a,#0,skey10main2: mov r3, #0ffh ;无键闭合,延时待定时器1中断main3: mov r2,#0ffhmain4: nop djnz r2, main4 djnz r3,main3 ajmp askkb11skey: mov y11, #0 ;获取数字键号07 mov r4, #8skey1: clr c rrc a jc skey2 inc y11 djnz r4, skey2 ajmp askkb1skey2: clr tr0 ;有数字键按下时,关闭定时计数器 clr tr1 clr ea mov p0, #0ffh setb p2.6 clr p2.6 setb p2.7 clr p2.7skey3: acall delay ;延时10ms orl p1, #0ffh mov a,p1 cjne a, #0ffh,skey3 ;闭合数字键未松开,继续等待 ajmp numpr ;转数字键处理skey10: cjne a, #01,skey11 mov y11, #8 ;确定为数字键8 ajmp skey2skey11: cjne a,#02,skey12 mov y11,#9 ;确定为数字键9 ajmp skey2skey12: cjne a, #03,skey14 mov bcd0, #0fh ;为设定显示键时,显示设定液位f mov bcd1, ccm1 mov bcd2, ccm2 mov tr0 ;关闭测液位,显示停留2s左右11 clr tr1 clr ea acall display1 acall delay2 ;2s延时skey12: cjne a, #04,skey14 mov bcd3, #0dh ;为”设定显示”键时,显示设定温度”d” mov bcd4,ccm4 mov bcd5,ccm5 skey14: ajmp main1numpr: inc knd mov a, knd cjne a, #1,numpr2 mov bcd2, #0 ;输入只有1位数字时,显示0f或; 0d mov bcd1,y11 cjne bcd0, #0fh, display1 acall display ajmp askkb ;等待第二位数字键输入numpr2:cjne a, #2 mov bcd2,bcd1 mov bcd1,y11 cjne bcd0, #0fh, display1 acall display2 mov ccm1,bcd1 mov ccm2,bcd2 acall delay2numpr3:ajmp main1bcd: mov r0, #bcd0 mov r1, #crt0 mov r7, #3 mov dptr,#dotbcd1: mov a,r012 mov a,a+dptr mov r1,a dec r0 dec r1 djnz r7, bcd1 retdot: db 03h 9fh 25h 0dh 99h db 49h 41h 1fh 01h 09hdisplay1: mov p0,crt0 setb p2.0 clr p2.0 mov p0,crt1 setb p2.1 clr p2.1 mov p0,crt2 setb p2.2 clr p2.2 retdisplay2: mov p0, crt3 setb p2.3 clr p2.3 mov p0,crt4 setb p2.4 clr p2.4 mov p0,crt5 setb p2.5 clr p2.5 retdelay: mov tmod, #00h ;10ms延时 mov th0, #0c7h mov tl0, #08h setb tr012loop: jbc ret sjmp loopretdelay2: mov tmod, #01h ; 2s延时 mov th0, #3ch mov tl0, #b0h setb tr0loop: jbc ret sjmp loopysjy: mov r7,#20 dec r7 djnz r7,#0ret ;定时器1中断服务程序ywkz:mov dptr,#15536 ;重载50ms mov th1,dph mov tl1,dpl djnz t10,ywkz1 ajmp ywkz2ywkz1:reti ;0.5s未到,中断返回ywkz2:clr tr0 clr tr1 clr ea mov t10, #10 ;重载时间初值 push a mov dh,th0 ;读液位测量数据到dh,dl mov dl,tl0 acall bcd mov bcd0,#0d ;为测量显示键时,显示测量液位f mov bcd1, 32h ;保存液位个位 mov bcd2, 31h ;保存液位十位 acall display ;显示实测液位值32 mov a, bcd2 ;十位和个位合并转为16进制 swap a add a, bcd1 mov b, #16 div ab swap a add a, b mov b, a subb a, ccm0 jc ywkz ;小于设定液位,打开流量阀门 mov p0, #0ffh ajmp wdkzywkz: mov p0, #0feh ;开流量阀门 ajmp ywkz2wdkz: mov dptr, #15536 ;重载50ms mov th1, dph mov tl1, dpl djnz t10, wdkz1 ajmp wdkz2wdkz1: reti ;0.5s未到,中断返回wdkz2: clr tr0 clr tr1 clr ea mov t10, #10 ;重载时间初值 push a mov a, bcd5 ;十位和个位合并转为16进制 swap a add a, bcd4 mov b, #16 div ab swap a add a, b mov b, a13 subb ccm3,#05h16 setb tr0 ;重新启动定时计数器 setb tr1 setb ea retisja1000初始化子程序canini: mov dptr,#mode mov a,#09h ;进放复位模式,对;sja1000进行初始化movx dptr,amov dptr,#cdr mov a,#88h ;选择pelican模式,movx dptr,amov dptr,#iermov a,#0dh ;开发发送中断、超载中断和错误警告中断movx dptr,amov dptr,#amr ;接收屏蔽寄存器mov r6,#4mov r0,#dam amr: mov a,r0movx dptr,a inc dptrdjnz r6,amrmov dptr,#acr ;接收代码寄存器mov r6,#4mov r0,#dacr acr: mov a,r0movx dptr,a inc dptrdjnz r6,acrmov dptr,#btr0 ;总线定时寄存器0mov a,#03hmovx dptr,amov dptr,#btr1 ;总线定时寄存器1mov a,#0ffh movx dptr,amov dptr,#ocr ;输出控制寄存器mov a,#0aahmovx dptr,amov dptr,#rbsamov a,#0 ;设置接收缓存器;fifo起始地址为0movx dptr, amov dptr,#txerr mov a,#0 movx dptr,amov dptr,#ecc movx a,dptr mov dptr,#mode mov a,#08h movx dptr,aret发送子程序tdata: mov dptr,#sr movx a,dptr jb acc.4,tdata ;判断是正在接收,正在接收则等待ts0: movx a,dptrjnb acc.3,ts0 ts1: movx a,dptrjnb acc.2,ts1 ts2: mov dptr,#cantxb mov a,#88h ;发送数据长度为8个;字节的扩展帧格式报文movx dptr,ainc dptrmov a,#id0 movx dptr,ainc dptrmov a,#id1movx dptr,ainc dptrmov a,#id2movx dptr,ainc dptrmov a,#id3movx dptr,amov r0,#trdata;cpu发送数据区首;址,数据内容由用户定义mt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论