目 录
1、实验内容及要求 ……………………………………………………………3
2、实验目的 ……………………………………………………………3
3、系统环境要求 ……………………………………………………………3
4、硬件电路原理图 ……………………………………………………………4
5、程序设计框图 ………………………………………………………………5
6、实验调试步骤及说明………………………………………………………8
7、实验总结 ………………………………………………………………………10
参考资料 …………………………………………………………………………10
附录…………………………………………………………………………………11
一 实验题设计内容、目的和要求 利用Proteus仿真工具,设计一个基于51单片机的控制系统,要求:键盘输入给定值,控制电机正/反转的速度,并将电机当前速度用数码管或液晶显示出来,并通过PID控制算法编程实现电机闭环控制
二、实验目的
学习在单片机系统扩展简单I/O接口的方法。 进一步学习编制数据输出程序的设计方法。 学习直流电机的控制的方法。 学习二极管的使用。 学习proteus的使用(画原理图和写程序调试)。 学习keil c的编程和调试。
三、系统环境要求 1. 软件环境 伟福6000单片机仿真软件,proteus环境。 2.硬件环境 PC机一台(基本电脑配置,能安装有所要的运行软件)。
硬件电路原理图
说明:使用了AT89C51和7段显示LED管,其余部分由模拟电路组成。 1、电路基本功能及使用说明 按钮POSITIVE,NEGATIATE可以控制电机正/反转,按下SET按钮后,再按按钮0、1、2、3,可以改变速度,速度分四档,数码管可以显示当前速度档位。
2、单元电路设计与分析 单片计算机选择AT89C51,使用P1、P、P3口,p1.0~p1.3接数码管,P2.0、P2.1、P2.6、P2.7接四个档位,P2.2、P2.3作为数字信号输出给模拟量。通过控制脉宽来控制速度。 程序设计框图(程序清单见附录Ⅰ)
主体框图
PSPEED0子程序框图 NSPEED0子程序框图 DELY子程序框图 六、实验调试步骤及说明 Keil c μVision2 (1)运行keil c Vision2
(2)点击Project 菜单,选择弹出的下拉式菜单中的New Project,弹出一个标准Windows 文件对话窗口,在“文件名”中输入第一个程序项目名称。只要符合 Windows 文件规则的文件名都行。“保存”后的文件扩展名为 uv2,这是 KEIL c uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
选择所要的单片机,这里选择常用的 Ateml 公司的 AT89C51
鼠标在屏幕左边的 Source Group1 文件夹图标上右击,弹出菜单,在这里可以做在项目中增加减少文件等操作。选“Add File to Group ‘SourceGroup 1’”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。
编译程序,在options for target 'target'的output中设置HEX文件输出。 Proteus (1)选择所要的原件。 (2)所要求的目的连线。 (3)在单片机芯片中读取程序。
七、实验总结 此次实验自主性很高,要求自己根据以往实验获取的成果再查阅资料,最终完成实验设计。但因为水平有限,对单片机的认识还不够深入,很多设计环节都没有透彻的理解,没能很好的完成。PID等诸多控制功能均未能很好的实现,以后当多在自己的电脑上实践,而不是仅仅停留在实验室的浅尝辄止。
参考文献
[1]凌玉华,单片机原理及应用系统设计,长沙:中南大学出版社,2006 [2]李广弟,单片机基础,北京:北京航空航天大学出版社,2001 [3]张洪润,单片机应用技术教程,北京:清华大学出版社,1999
附录: ORG 0000h LJMP START ORG 0100H START: CLR EA JNB P3.0,POSITIVE JNB P3.1,NEGATIATE LJMP START POSITIVE: LCALL PSPEED0 JNB P3.4,L2 L4: JNB P3.4,L2 JB P2.0,L3 LCALL PSPEED0 LJMP L4 L3: JB P2.1,L5 LCALL PSPEED1 JNB P3.4,L2 LJMP L4 L5: JB P2.6,L6 LCALL PSPEED2 JNB P3.4,L2 LJMP L4 L6: JB P2.7,L4 LCALL PSPEED3 JNB P3.4,L2 LJMP L4 L2: LJMP START NEGATIATE: LCALL NSPEED0 JNB P3.4,L19 L21: JNB P3.4,L19 JB P2.0,L20 LCALL NSPEED0 JNB P3.4,L19 LJMP L21 L20: JB P2.1,L22 LCALL NSPEED1 JNB P3.4,L19 LJMP L21 L22: JB P2.6,L23 LCALL NSPEED2 JNB P3.4,L19 LJMP L21 L23: JB P2.7,L21 LCALL NSPEED3 JNB P3.4,L19 LJMP L21 L19: LJMP START PSPEED0: MOV P1,#00H MOV R2,#10H MOV R3,#0FFH CLR P2.2 SETB P2.3 LCALL DELY CLR P2.3 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L7 JNB P3.2,L7 LJMP PSPEED0 L7: NOP RET PSPEED1: MOV P1,#01H MOV R2,#20H MOV R3,#0FFH CLR P2.2 SETB P2.3 LCALL DELY CLR P2.3 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L8 JNB P3.2,L8 LJMP PSPEED1 L8: NOP RET PSPEED2: MOV P1,#02H MOV R2,#40H MOV R3,#0FFH CLR P2.2 SETB P2.3 LCALL DELY CLR P2.3 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L9 JNB P3.2,L9 LJMP PSPEED2 L9: RET PSPEED3: MOV P1,#03H MOV R2,#80H MOV R3,#0FFH CLR P2.2 SETB P2.3 LCALL DELY CLR P2.3 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L10 JNB P3.2,L10 LJMP PSPEED3 L10: RET NSPEED0: MOV P1,#00H MOV R2,#10H MOV R3,#0FFH CLR P2.3 SETB P2.2 LCALL DELY CLR P2.2 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L11 JNB P3.2,L11 LJMP NSPEED0 L11: RET NSPEED1: MOV P1,#01H MOV R2,#20H MOV R3,#0FFH CLR P2.3 SETB P2.2 LCALL DELY CLR P2.2 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L12 JNB P3.2,L12 LJMP NSPEED1 L12: RET NSPEED2: MOV P1,#02H MOV R2,#40H MOV R3,#0FFH CLR P2.3 SETB P2.2 LCALL DELY CLR P2.2 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L12 JNB P3.2,L12 LJMP NSPEED2 L13: RET NSPEED3: MOV P1,#03H MOV R2,#80H MOV R3,#0FFH CLR P2.3 SETB P2.2 LCALL DELY CLR P2.2 MOV R2,#10H MOV R3,#0FFH LCALL DELY JNB P3.4,L14 JNB P3.2,L14 LJMP NSPEED3 L14: RET DELY: MOV A,R3 L15: MOV R3,A L16: DJNZ R3,L16 DJNZ R2,L15 mov a,#00h RET END