logo资料库

小型步进电机控制系统设计报告.doc

第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
资料共29页,剩余部分请下载后查看
·小型步进电机控制系统报告· 小型步进电机控制系统 一、 课程设计的目的 课程设计是本科教学全过程中的重要环节。《微机应用系统设计与综合实验 (实践)》课程设计主要培养我们自动化专业学生,运用所学知识解决计算机应用 领域内实际问题能力,进一步提高学生运用计算机编程语言综合编程能力、程序 调试技能和微机系统接口综合应用及电路设计能力。 1、学习在 PC 系统中扩展简单的 I/O 接口的方法。 2、熟练掌握和运用汇编和 C 语言编写程序控制 8255 各口的输入输出,并 正确带动数码管及步进电机;能熟练运用汇编和 C 语言实现 8254 的定时功能, 以确保 8255 输出的脉冲频率稳定。 3、熟练掌握 ISA 总线配置方式下硬件实验的调试,并能独立的排除故障,以 确保实验的顺利进行。 二、 设计的题目名称及要求 设计题目:小型步进电机控制系统设计。 设计要求: 1、编程语言为 C 语言或汇编语言。 2、硬件电路基于 80x86 微机小键盘和数码显示接口。 3、控制性能要求,实现步进电机启动、方向、速度调节和停止功能选择,并且 在计算机屏幕上及数码管上实时显示步进电机当前参数及工作状态。编程语言为 汇编语言或 C 语言。 三、实验设备 PC 机一台(装有 TDPIT 软件)、唐都 AEDK8688ET 实验箱。 四、设计的思想和实施方案 由于本次课程设计控制的对象是步进电机,首先我得通过查阅相关资料对 步进电机有个初步的了解和认识。所谓步进,就是指每给步进电机一个递进脉冲, 步进电机各绕组的通电顺序就改变一次,即电机转动一次(一定的角度),本次 课程设计控制的是四项八拍步进电机。在了解了步进电机的工作原理后,我的初 步想法是用 8255 给步进电机传送脉冲,用 8254 控制传送脉冲的频率,以实现对 2 2008 年 1 月 20 号
·小型步进电机控制系统报告· 步进电机转速的控制。 8255 内部包含 3 个 8 位的输入输出端口 A、B 和 C,端口 A 和端口 B 都可 以用作一个 8 位的输入口或 8 位的输出口,端口 C 既可以作为一个 8 位的输入 口或 8 位的输出口,又可以作为两个 4 位的输入输出口(C 口上半部分和 C 口下 半部分)使用,还可以配合 A 口和 B 口工作,分别用来产生 A 口和 B 口的输出 控制信号和输入 A 口和 B 口的端口状态信号。 本次设计,我对 8255 的使用是这样的:8255 工作于方式 0,A 口低四位接 键盘及数码管显示单元的 X1~X4;C 口低四位接键盘及数码管显示单元的 Y1~Y4; C 口高四位接步进电路的驱动电路,使电机转动起来;B 口接数码管的 A、B、 C、D、E、F、G 和 DP,以使数码管显示电机的转向和转速。8255 的 A 口高四 位本次课程设计没有用到。 3 2008 年 1 月 20 号
·小型步进电机控制系统报告· 8254 内部包含 3 个完全相同的计数器/定时器通道,对 3 个通道的操作完 全是独立的。每个通道都包含一个 8 位的控制字寄存器、一个 16 位的计数初值 寄存器、一个计数器执行部件(实际的计数器)和一个输出锁存器。 8254 的 3 个计数器都各有 3 个引脚,他们是: 4 2008 年 1 月 20 号
·小型步进电机控制系统报告· (1)CLK0~CLK2 计数器 0—2 的输入时钟脉冲从这里输入。 (2)OUT0~OUT2 计数器 0—2 的输出端。 (3)GATE 0~GATE2 计数器 0—2 的门控脉冲输入端。 8254 的每个通道都有 6 中不同的工作方式。 8254 在这次课程设计中主要实现定时功能。起初我的想法是用中断,这样 不光定时准确而且 CPU 的利用效率也更高些。但由于本次设计我用到了小键盘, 而在使用小键盘时很容易死机,且中断要在 DOS 下运行,这给程序的调试带来 很多的不便,加之课程设计的时间有限我放弃了使用中断,但仍用到了 8254 的 计时功能。 在本次设计中,8254 的 0 通道工作在方式 2(比率发生器)——循环计数; 1 通道工作在方式 4(软件触发选通)——仅一次有效。OUT0 接 CLK1,这样在使 用 8254 实现准确延时时,只需要给 1 通道送入不同的计数初值,当其减为零时 退出延时程序即可。 此外,本次设计还用到了实验相中的键盘及数码管显示单元: 5 2008 年 1 月 20 号
·小型步进电机控制系统报告· 五、硬件电路原理图 如上图示:该原理图涉及到系统总线、可编程外围接口芯片 8255、8254、 键盘及数码管显示单元和步进电机及其驱动电路.8255 和 8254 的 D0~D7 依次 接系统总线的 XD0~XD7,A1 和 A0 依次接系统总线的 XA3 和 XA2;WR 和 RD 依 次接系统总线上的 XIOW 和 XIOR;8255 的 CS 接系统总线的 IOY0,8254 的 CS 接系统总线的 IOY1,CLK0 接系统总线的 CLK,OUT0 接 CLK1, GATE0 和 GATE1 接+5V;8255 的 A 口低四位 PA0~PA4 依次接小键盘的 X1~X4(列);C 口低四位 PC0~PC3 分别接小键盘的 Y1~Y4(行); C 口高四位 PC4~PC7 依次接 驱动电路的 A、B、C 和 D;B 口 PB0~PB7 分别接数码管的 A、B、C、D、E、 F、G 和 DP;A 口高四位没用到。 六、典型程序模块及典型编程技巧分析 1.主函数 MAIN 主函数 MAIN 主要是综合调用各子函数,以完成对四项八拍步进电机转速 和转向的控制,并在 PC 机及数码管上实时显示电机的转速和转向。 本次设计的电机转速分为 30 个档次。第一个档次速度最慢,8254 的 C 口高 6 2008 年 1 月 20 号
·小型步进电机控制系统报告· 四位输出的频率为 3HZ,相当于电机没秒钟移动三步,经细致观察发现电机移动 三步正好移动一个大格—— 15 ,所以每给电机传送一个脉冲电机就移动 5 ,第 二个档次是 30 /S,第三个档次是 45 /S,…,依次类推第三十个档次速度最快是 450 /S。  当程序运行时,PC 机屏幕上显示提示菜单,电机不转动且数码管无显示。 当小键盘有键按下且键值是“0”时电机正向转动,PC 机屏幕和数码管同步显示 电机转动的速度和方向“+15”,表示电机正向转动且每秒钟转动 15 (角度);当 小键盘有键按下且键值为“1”时电机转速提高一个档次为:“+30” …… 转速 最高为“+450” ,此后再按“1” 电机不再加速;当小键盘有键按下且键值为 “2”时电机减速,每按一下“2”电机转速降低一个档次即减少 15 /S …… 但 电机的最低转速减为 15 /S 时再按“2”电机速度不会改变;当小键盘按键值为“3” 时电机方向改变一次,且速度置为最低速—— 15 /S,同正向的加速/减速一样, 电机在反方向的运行速度也分 30 个档次,“-15”—“-450” ;当小键盘再有 “0”键按下时程序结束,电机停止转动,数码管无任何显示。 注: 当按下小键盘“1” 不松手时,电机可以一直加速,直到加到最高速“+450” 或“-450”为止; 当按下小键盘“2” 不松手时,电机可以一直减速,直到减到最低速“+15” 或“-15”为止; 当按下小键盘“0”不松手时,电机可以启动(正向最低速)且 PC 机和数 码管可以同步显示“+15” ,电机转动八步后将自动停止,由于电机按最低速转 动时没秒钟只移动三步,走八步需要 2.66S,故此在电机启动时不必担心按“0” 键时间太长而导致电机启动后又停机。 当按下小键盘“3” 不松手时,电机将改变转向,同时速度置为最低速,同 样要在电机转动八步(2.66S)后电机才会再次改变方向,所以不必担心按“3” 键时间太长而导致电机不停的改变转向。 由于按“1” 或“2”键不松时,不会影响电机的正常工作,所以可以一直 按下进而使电机一直的加速或减速,且随着电机的速度越快,电机移动八步的时 间也会随着缩短,这样按“1” 或“2”键不松时电机的加速和减速也会变快。 至于通过什么样的子函数可以实现以上功能,这将在下面的子程序中一一介 绍。 2.ZHUANSU 此子函数主要完成在 PC 上实时显示电机转向和转速的功能。当每按下小键 盘 “1” 、“2”或“3”后调用此函数,PC 机就可以正确显示电机的转向和转 7 2008 年 1 月 20 号
·小型步进电机控制系统报告· 速了。 3. B2TOBCD 此函数主要完成二进制数向十进制数的转换,不将其显示出来,主要供 ZHUANSU 函数调用。 4 .CUNSH 此函数完成在按下小键盘 “1” 、“2”或“3”后,将其相应的电机转向 和转速以及 8254 的 1 通道置数值保存起来,以备其它子程序使用。 5. GETKEY 此子函数是用来扫描小键盘哪行哪列有键按下,当确定某行某列有键按下 时,再把相应的键值保存起来。 小键盘有四行四列共 16 个按键,第一行从左到右依次是 0~3;第二行从 左到右依次是 4~7;第三行从左到右依次是 8~B;第二行从左到右依次是 C~F。 6.CCSCAN 此子函数用来扫描小键盘是否有键按下。通过 8255 的 C 口高四位,使 X1~X4(列)全选通,然后由 8255 的 C 口低四位判断各列所对应的行是否有键安下, 无任何键按下则 C 口低四位读入的全是“1”,若有键按下则 C 口低四位读入的对 应行是“0”,其余全是“1”,经取反(NOT)后扫描小键盘的子程序 CCSCAN 的功 能变为:若小键盘无键按下则 AL 寄存器数据为“0”; 若小键盘有键按下则 AL 寄存器数据为非“0”. 7.DIS 将 CUNSHU 子函数中保存下的电机转向和转速值送到数码管上显示。 8. CLEAR 将 00H 分别送入 A 口(驱动 LED 灯)和 B 口(驱动数码管)便可实验此功能 9.DALLY、DALLY1 和 DALLY2 这是三个延时时间不同的延时子函数,可供别的程序调用以实现较好的显示 和操作效果。 DALLY 延时最短,在判断小键盘是否有键按下时调用,是为了消除外界抖 动对小键盘的干扰。 DALLY1 是根据电机的转速不同,对 8254 的 1 通道置不同的数,而 1 通道 8 2008 年 1 月 20 号
·小型步进电机控制系统报告· 工作在方式 4,置数后当其计数器值减为零后就停止计数,正好可以满足设计的 要求。 DALLY2 是令一种固定的,延时较 DALLY 长的软件延时,当小键盘按键时 间超过 DALLY2 的延时时间后,程序将继续往下运行,以不影响电机的正常转 动。 注:以上是以汇编程序为基准对各子函数进行分析的,C 语言的程序比汇编 的还要简单些,思路和算法也基本相同,就连排版都与汇编的一致。 七、课程设计中遇到的问题及解决方法 1.在使用小键盘时容易死机 出现死机的原因很难说得清楚,有的是同一个程序换台机子运行就会死机, 有的是同一台机子同一个程序运行多次就会死机,不过总的来看死机的出现多少 是和所编写的程序有关,记得我以前用小键盘时就是很容易就死机了,不过在这 次的课程设计中 我把所有的和小键盘有关的程序都用了子函数代替,大大简化 了主程序的结构,这样就基本再也没发生过死机现象了。 2.数码管看不到示数或数码管看上去全亮 调用了数码管显示程序而却看不到数码管有示数,这主要是调用数码管显示 子函数的频率不够高,可以把数码管显示子函数换个位置,或者是多调用几次就 可以解决了。 至于数码管好像是全亮,情况正好相反,是数码管显示子函数调用的频率过 高,把数码管显示子函数换个位置,或者是在关键位置调用一下延时函数就可以 解决了。 还有,DIS 和 CLEAR 成对调用可使数码管有个较好的显示效果。 3.当小键盘按下不松时电机也停止转动 这种情况出现在电机的加速、减速和改变转向中,这主要是在原有的 keyscan 程序中有一段判断按键是否弹起的程序,将此段换成一个合适的软件延时便可以 起到很好的效果(按键不松时可以连续的加速和减速)。 4. 程序调试应遵循的步骤 ①查看各端口地址是否正确; ②根据程序运行中的出现的现象分析出程序出错的位置; ③在 TDDEBUG 中进行单步或设置断点进行调试; ④使程序有少到多有简单到复杂逐一验证其的正确性,以排除错误。 八、实验程序的流程图 9 2008 年 1 月 20 号
分享到:
收藏