上海理工大学方案设计报告项目名称课程名称备注:¥设计报告¥一、主要内容:设计一个电梯自动控制系统,由电机驱动控制系统、1路A/D输入、12个按键、4个8段的LED显示器、8个LED指示灯以及1路报警系统组成。4个8段的LED显示器,8个LED指示灯及12个键盘作为控制系统的控制台设计,提供人机交互,控制电机的停启。1路模拟输入主要对电梯中人员重量进行控制,若超重,电梯停止运行,并提示报警。电梯运行按电梯运行规则实现。二、设计方案:将电机运行轨迹分成8等分,模拟8个层面,由控制台按键决定电机运行。键盘有12个按键。其中8个为数字键,表示1~8个层面;4个为控制键定义为开门键,关门键,报警键,清除键。1、键盘控制:数字键:按下数字键,相应的LED指示灯点亮,按照电梯运行规则(在关门的情况下,按前进方向,向最接近当前位置的楼层停靠)停靠,在某个楼层停靠则相应的指示灯熄灭。控制键:开门键:当电梯处于停靠状态时,按下此键,电梯处于开门状态。释放此键3秒后电梯门自动关闭。电梯运行过程中此键无效。关门键:当电梯到达停靠楼层时自动开门,按关门键可以将电梯门关闭。在任何时候都可以使用关门键。开门状态达到3秒没有按下关门键,电梯门自动关闭。只有在电梯门关闭,并且有楼层停靠要求是电梯才能运行。报警键:模拟电梯故障,按下此键表示电梯出现故障,提示警告。故障警告状态可以通过清除键清除。清除键:清除告警信号和所有层面的停靠请求信号。2、显示控制:4个8段LED显示器显示:开门状态显示OPEN;按下报警键或检测出超重显示Err;当电梯在运行过程中,则自动显示到达楼层号,如在某个楼面停靠,电梯自动处于开门状态,显示的内容不变。显示楼层号的格式为noX,其中X为楼层号。8个LED指示当前楼层有否请求,亮表示有请求。3、控制规则:在无故障情况下,如果有楼层停靠请求,则在关门后,能按电梯运行规则选择相应的楼面停靠,停靠后电梯自动处于开门状态。显示器实时显示电梯走过的楼面,如要接受下一次请求,则需关门后。楼层请求要有记忆功能,停靠的次序和按键的次序无关,和电梯运行规则有关,如2次以上按同一层停靠,只做一次处理。电梯在运行过程中,不符合运行原则的楼层请求不予响应。如电梯在上行中,低于本层的停靠请求不予响应。电梯在某楼层停靠时,再按下此楼层数字键,相当于按下开门键。按下关门键或自动关门过程中,需要检测电梯是否在正常负荷下运行(A/D值检测大于4.5V为超重),如超重或按报警键表示电梯有故障,电梯停止运行,并报警,通过减小A/D或按清除键清除故障状态。硬件设计:使用2块8255芯片实现对电机、8段LED显示器、LED指示灯以及键盘的控制。用74LS138芯片译码。8255(1)的pb0、pb1、pb2接入138芯片的A、B、C端,Y0-Y3选择4个8段LED显示器的,Pc0-pc6控制LED显示器显示,pa0-pa7控制键盘输入。8255(2)的pb0-pb7控制LED指示灯状态,pa0-pa3控制电机的运转。软件设计:1、初始化程序:初始化程序一般只走一次,在程序的最开始,初始化的工作主要是像电机归0,8255初始化,变量设置等。2、键盘处理子程序:键盘处理是对控制台命令进行监听,所以是程序的主要核心。该程序包含2部分:一个是键盘扫描子程序,主要完成扫描键盘上是否有键按下;另一个是键处理程序,用于完成对各个按键的处理,键盘分为数字键和功能键。键处理程序仅记忆一个状态,真正执行在相关的执行程序里完成。3、显示子程序:主要功能是把显示缓存的内容送显示器。由于使用动态扫描,所以显示程序需要不断刷新,如果软件处理上有时延,会影响显示,所以有延时的地方,都可以用显示子程序来替代。按键处理中或者执行需要更新显示内容,只要更新显示缓存就可以,本系统用到4个7段显示器,所以只要开辟4个显缓(显示子程序中XH),显示缓存的内容即为要显示内容的序号。4、LED指示子程序:控制台上有8个LED指示灯,用来指示当前那个楼层有请求的需要,在内存中开辟8个单元为NUM1~NUM8,每个单元表示对应的楼层的请求情况,当该单元的值为0,表示该楼层没有请求,当该单元的值为0FFH,表示该楼层有请求,LED指示子程序仅仅根据NUM1~NUM8完成指示,而NUM1~NUM8的修改则是由键盘,或其他执行程序完成。5、电机控制子程序:电机控制子程序主要的功能是启动一次电机运行。启动电机运行的条件:电机未在走拍程序,电梯未出现故障电梯在关门状态,有楼层停靠的请求。电机每次启动只走一个层面,启动后,由电机走拍子程序完成控制电机运行。6、电机走拍子程序:电机走拍程序控制电机运转,步进电机的走步程序非常讲究,特别是在停启的时候,从停止到启动,需要的扭矩非常大,往往要加大电流,增加走拍的时间,而从走拍到停止,也需要降低步进电机的速度,防止过冲。走拍子程序根据方向按拍表的内容走步,由既定的步数走到相应的楼层,根据请求表,做相关的处理。7、重量检测子程序通过对ADC08090号通道的模拟量检测,滤波(采集8次求平均值)判断是否超重(模拟量的大于4.5V),如超重,则ALARM置成0FFH,显示缓存送ERR,电机状态STATUS置成开门状态。三、源程序代码:DATASEGMENTXH1DB0XH2DB0XH3DB0XH4DB0DMDB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FH,77H,7CH,39HDB5EH,79H,71H,73H,00H,40HNUM1DB0NUM2DB0NUM3DB0NUM4DB0NUM5DB0NUM6DB0NUM7DB0NUM8DB0STATUSDB0ALARMDB0NUMDB0DIREDB0STEPDB?STEPNUMDB?pa55equ218hpb55equ219hpc55equ21ahp55ctlequ21bhPA255EQU208HPB255EQU209HPC255EQU20AHP255CTLEQU20BHFLAGDB?DATAENDSSTACKSEGMENTSTACK‘STACK’STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATASMOVDS,AXMOVDX,P55CTL;8255(1)初始化MOVAL,10010000BOUTDX,ALMOVDX,P255CTL;8255(2)初始化MOVAL,10000000BOUTDX,ALMOVDX,PA255MOVAL,0OUTDX,ALMOVDX,PB255OUTDX,ALMOVBX,0LOOP:CALLKEYCMPFLAG,0JNZLOOPMOVAH,4CHINT21Hdispprocnear;显示子程序pushbxmovsi,offsetxhmovcl,03hhh:moval,clmovdx,pb55outdx,almoval,[si]leabx,dmxlatmovdx,pc55outdx,alpushcxmovbx,0008hee:movcx,0cfffhcc:noploopccdecbxjnzee;延时popcxincsicmpcl,00hjebbdeccljmphhbb:popbxretdispendpR2db?R4db?keyprocnear;键盘扫描子程序wait3:movr2,00h;选择行wait1:moval,r2movdx,pb55outdx,almovdx,pa55inal,dxcmpal,0ffhjnewait2;有键按下incr2;选择下一行cmpr2,02h;只扫描2行jzkeyend;扫描结束jmpwait1;扫描下一行wait2:calldispcalldispcalldisp;延时,防键抖动moval,r2movdx,pb55outdx,almovdx,pa55inal,dxcmpal,0ffh;在判该行有键按下jewait3;无键按下,从新扫描lk3:movr4,00;有键按下rcral,1jnclk4incr4jmplk3lk4:moval,r2cmpal,01hjnzlk5moval,08haddal,r4movr4,al;第2行有键按下lk5:calldispcalldispcalldispmovdx,pb55;键处理inal,dxcmpal,00hjnzlpmovdx,pa55inal,dxmovdx,pb255outal,dxcalldispledlp:movdx,pa55inal,dxcmpal,fbhjzlp1cmpal,f7hjzlp2calldisplp1:movdx,pb255moval,ffhoutdx,almovnum1,0movnum2,0movnum3,0movnum4,0movnum5,0movnum6,0movnum7,0movnum8,0jmpkeyendlp2:calldispkeyend:retkeyendpDISPLEDPROCMOVAL,0MOVCX,8MOVBX,OFFSETNUM1DISPLED3:MOVAH,[BX]CMPAH,0JZDISPLED1CLC;进位位清0JMPDISPLED2DISPLED1:STC;进位位置1DISPLED2:RCRAL,1INCBXDECCXJNZDISPLED3MOVDX,PB255;8255B口的地址OUTDX,ALRETDISPLEDENDPA_DPROCMOVBX,0MOVCL,8BB:MOVDX,CSADOUTDX,AL;启动A/DPUSHDXPUSHCXCALLDISP;调用显示POPDXPOPCXINAL,DXMOVAH,0ADCBX,AXLOOPBBMOVAX,BXRCRAX,1RCRAX,1RCRAX,1;/8超重检测RETA_DENDPCODEENDSENDSTART:四.后感实时系统中尽量少软件延时,本系统中键处理中防抖动,步进电机拍与拍之间间隔都用了软件延时,用此方法因为系统实时性并不高,只有控制台键盘输入,但软件延时会影响显示,所以延时的地方用调用显示来完成,这样延时的精度会受影响,改进的方法就是用定时中断,可使用8253,8259来完成,特别是步进电机的走步程序,如按此方案,走步程序就在中断服务程序里完成,同时可根据步进电机的特性,走出升降曲线,使电机控制在更佳状态。通过学习有关知识,实践相关的具体问题,收获了新的经验,对接口技术的应用有了更深的体会。薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆螅羅膁蒈蚁羅芄蚄罿羄莆蒇袅羃蒈蚂螁羂膈蒅蚇肁芀蚁薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆螅羅膁蒈蚁羅芄蚄罿羄莆蒇袅羃蒈蚂螁羂膈蒅蚇肁芀蚁薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节芀薅羂羂蒅蒁羁肄芈螀羀膆蒃蚆肀芈芆薂聿羈蒂蒈肈肀芅袆肇芃薀螂肆莅莃蚈肅肅薈薄蚂膇莁蒀蚁艿薇蝿螀罿荿蚅蝿肁薅薁螈膄莈薇螈莆膀袆螇肆蒆螁螆膈艿蚇螅芀蒄薃螄羀芇葿袃肂蒃螈袂膄芅蚄袂芇蒁蚀袁肆芄薆袀腿蕿蒂衿芁莂螁袈羁薇蚇袇肃莀薃羆膅薆葿羆芈荿螇羅羇膁螃羄膀莇虿羃节