牛 甲 熊 刚 郭东平
(杨凌职业技术学院 陕西 杨凌 712100)
摘 要: 研究基于单片机的步进电机控制系统及仿真实现问题,采用单片机ATC51、步进电机和液晶模块等作为主要硬件,在PROTEUS软件环境下实现一种电机控制系统的设计。
关键词: 单片机;电机;仿真;PROTEUS
中图分类号:TP391 文献标识码:A 文章编号:1671-7597(2011)1020071-01
0 引言
步进电机具有价格低廉、易于控制、无积累误差和计算机接口方便等优点,在电动阀门、电动窗帘、旋转灯具、医疗设备等方面有着广泛的应用,因此设计一款可控性能好、精度高的电机控制系统是非常有意义的。本文介绍的步进电机控制系统,由单片机代替控制器,在按键的操作下控制电机的转动,同时对工作状态进行显示,最后通过单片机动态仿真软件PROTEUS仿真实现。
1 硬件电路设计
本设计中,通过按键对电机的正向、反向(即顺时针、逆时针)进行控制,控制器对控制台的参数进行采集,通过对采集的数据分析处理产生相应的信号输入到驱动器中,再通过驱动器控制电机进行正转、反转、加速、减速、停止等动作。
本系统以单片机ATC51为控制核心,通过控制台按键来控制电机转速和方向,同时通过液晶及LED实时的显示电机工作状态。该步进电机控制系统包括单片机系统电路、按键电路、状态显示电路、驱动电路及电机等,系统选用P1口低五位作为按键控制口,P2口和P3口用做输出显示控制口,P0口低四位经反相后连接步进电机驱动芯片,高四位用做电机状态指示灯,整个系统结构图如图1所示。
由于步进电机的驱动电流较大,一般的脉冲分配器输出的驱动能力有限,所以需要专门的驱动电路。本设计选用单极性功率驱动芯片ULN2003A,ULN2003是高耐压、大电流达林顿系列,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
2 软件设计
系统主程序如图2所示,单片机上电后开始中断初始化,并且设定寄存器及电机控制模型初值,此时电机不转动,指示灯全部熄灭;若有键按下,则执行中断服务程序判别键值,根据键值来执行相应的子程序,通过改变控制模型及寄存器值来控制步进电机的方向和速度,同时LCD以及指示灯显示电机的工作状态。
图1 系统硬件结构图
1.1 控制电路设计
按键采用式键盘,5个按键分别连接到单片机的P1.0~P1.5口,作为控制信号的输入。K0为停止键,K1、K2键电机方向控制键,K3、K4键电机速度控制键。按下K1后,电机开始正转,通过K3、K4对电机进行加速减速控制。
1.2 LCD显示电路设计
显示部分采用的是TS128液晶,液晶的数据端D0-D7与单片机P2口相连,实现数据的传输与显示;使能信号端E用来完成液晶的读/写操作时序,与P3.5连接;R/W信号端上的电平状态用来判断是读操作还是写操作,与P3.4连接;RS信号端用于识别数据线的数据是指令代码还是用来显示数据,与P3.2连接。液晶屏的作用就是实时显示电机的工作状态,使工作人员能够直观的看到电机的处于何种工况。
1.3 驱动电路设计
图2 主程序流程图
键值判断采用中断的工作方式,这种工作方式平时CPU不必对按键进行扫描,只要有键闭合,立即产生中断信号使CPU转入中断处理程序,对按键的进行处理,进入中断程序后,先延时10ms去抖动,然后根据P1口的值转入相应的分支程序,在分支程序中控制步进电机的转动方向和转速,同时更新LCD存储器中内容以显示电机工作状态。
3 仿真实现
PROTEUS是英国Labcenter electronics公司开发的EDA工具软件,涉及PCB制版、Spice电路仿真、单片机仿真以及对ARM7/LPC2000的仿真[2~4]。
本文设计的电路硬件主要由单片机、LCD、晶振、电阻电容、驱动电路、电机等元器件组成,在Proteus中绘制电路原理图。仿真过程如下:
(下转第22页)
171perf内核新增加的特征。Perf是在RHEL6中才有,RHEL5中没有Perf。Oprofile和perf都使用现代CPU中具有的硬件计数器进行统计工作,但perf还可以使用内核中定义的“software counter”及“trace points”,所以能做更多的工作。Oprofile的抽样工作利用CPU的NMI中断来进行,而perf既可以利用NMI中断也可利用硬件计数器提供的周期性中断。用户能很容易用perf来oprofile一个进程或系统的执行时间分布,如:
#> perf top -f 1000 -p 还可以利用系统定义的 “software counter”和各子系统的“trace points”对子系统进行分析。 5 用kdump工具定位内核故障实例 5.1 部署Kdump 部署kdump收集故障信息的步骤如下:5.1.1 设置好相关的内核启动参数 在/boot/grub/menu.lst中加入如下内容crashkernel=128M@16M nmi_watchdog=1 其中crashkernel参数是用来为kdump的内核预留内存的;nmi_watchdog=1是用来激活NMI中断的,我们在未确定故障是否关闭了中断的情况下,需要部署NMI watchdog才能确保触发panic,重启系统确保设置生效。 5.1.2 设置好相关的sysctl内核参数在/etc/sysctl.conf中最后加入一行kernel.softlookup_panic = 1 该设置确保softlock发生时会调用panic,从而触发kdump行为执行#>sysctl -p确保设置生效5.1.3 配置/etc/kdump.conf 在/etc/kdump.conf中加入如下几行内容ext3/dev/sdb1 core-collector makedumpfile -c message-level 7 -d 31 -i /mnt/vmcoreinfo path /var/crashDefault reboot 其中/dev/sdb1是用于放置dumpfile的文件系统,dumpfile文件放置在/var/crash下,要事先在/dev/sdb1分区下创建/var/crash目录。“?”敝付ǘ詃内容的过滤级别,这参数对于dump分区放不下全部内存内容或用户不想让dumping中断业务太长时间时很重要。vmcoreinfo文件放置在/dev/sdb1 分区的/目录下,需要使用如下命令产生: #>makedumpfile -g //vmcoreinfo -x /usr/lib/debug/lib/modules/2.6.18-128.el5.x86_/vmlinux “Vmlinux”文件是由kernel-debuginfo包提供的,在运行makedumpfile之前需要安装相应内核的kernel-debuginfo和kernel-debuginfo-common两个 包,该两个包需从http://ftp.redhat.com下载。“default reboot”用来告诉kdump,收集完dump信息后重启系统。 5.2 激活kdump 运行#>service kdump start命令,你会看到,在成功完成的情况下会在/boot/目录下生成一个initrd-2.6.18-128.el5.x86_kdump.img文件,该文件就是kdump加载的内核的initrd文件,收集dump信息的工作就是在该initrd的启动环境下进行的。查看/etc/init.d/kdump脚本的代码,你可看到其中会调用mkdumprd命令创建用于dump的initrd文件。 5.2.1 测试Kdump部署的有效性 为了测试kdump部署的有效性,本人写了如下一个内核模块,通过insmod加载该内核模块,就能产生一个内核线程,在10秒左右后,占据100%的CPU,在20秒左右后触发kdump。系统重启后,检查/oracle分区/var/crash目录下的内容,就能确认vmcore文件是否生成。 5.2.2 用crash工具分析vmcore文件 用crash命令分析vmcore的命令行格式如下所示。用crash打开vmcore后,主要是用dmesg及bt命令打印出问题的执行路径的call trace,用dis反汇编出代码,最终确认call trace对应的C源码中的位置,再进行逻辑分析。 6 使用kprobe来观察内核函数的执行实例 Kprobe是SystemTap对内核函数进行probing的功能在内核中的实现,由于内核中提供了正式的API来使用kprobe,所以对很多内核程序员来说,也许直接使用kprobe比使用SystemTap更方便。内核中提供了三种类型的kprobe处理函数,分别是jprobe,kprobe,kretprobe,下面的代码用这三个probe观察在TCP/IP的arp_process函数执行中对ip_route_input()调用的返回结果。这个代码还展示了在同一个函数probe的Entry handler和Ret handler之间共享参数的方法。 参考文献: [1]#>man kdump.conf,#>man makedumpfile,#>man crash.[2]#>apropos systemtap. [3]http://en.wikipedia.org/wiki/SystemTap.[4]http://lwn.net/Articles/322666/. [5]kernel-source/Documentation/trace/tracepoints.txt.[6]kernel-source/tools/perf/Documentation. 作者简介: 马庆胜(1969-),男,山东省济南人,学历:大学本科,现职称:工程师,单位:山东联大集团,研究方向:管理信息;张前锋 (1975-)男,北京人,学历:研究生,现职称:工程师,工作单位:山东联大集团,研究方向:信息管理。 (上接第71页) 1)在仿真开始后,在控制台按下K1/正转键,此时电机正转,蓝色指示灯亮,同时LCD显示汉字“正转”字样;在电机运行的任何时刻按下K2/反转键,可以使电机反向转动,同时LCD显示汉字“反转”字样。K1、K2可以使电机在正反转动之间切换。 2)在电机运行的任何时刻按下K0/停止键,此时电机将停止运行,同时LCD显示汉字“停止”字样。再次按下K1/正转键,步进电机将以停止前的状态继续运行。 3)在电机运行的任何时刻按下K3/加速键,此时电机加速运行。每按一次K3/速加速键后,电机的速度将提高一次,直到寄存器B的值减为1,此时速度不在提高,同时LCD显示汉字“加速运行”字样;在电机运行的任何时刻按下K4/减速键,此时电机减速运行。每按一次K4/减速键后,电机的速度将减慢一次,直到寄存器B的值加为255,此时速度为最慢,同时LCD显示汉字“减速运行”字样。 4 结束语 本文结合单片机技术和PROTEUS仿真软件设计实现一种电机控制系统,较详细的论述了其总体框架、硬件和软件的设计方案。该系统经仿真 运行,测试结果表明,该系统可以满足在功能键的操作下控制电机的正反向转动、停止及加减速,状态指示灯及LCD能够正确显示电机的工作状态。 参考文献: [1]徐爱华,单片机应用技术教程[M].北京:机械工业出版社,2003. [2]林志琦等,基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006. [3]郑宝瑞,基于单片机的步进电机控制系统的研制[J].齐齐哈尔大学学报,2010,26(4):46-49. [4]李东勋泉,基于Proteus的液晶模块仿真[J].微计算机信息,2009,25(13):119-121. 作者简介: 牛甲(1984-),男,汉族,陕西杨凌人,杨凌职业技术学院助教,主要从事自动化技术教学和研究工作。 222 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务