三维伺服数控平台设计毕业设计论文(编辑修改稿)内容摘要:

次毕 设的程序编译部分,图 的流程图进行编译,首先进行头文件调用include,定义需要使用的各种编码 table[]={0x3f,0x06..0x79,0x71},随后各定义全局变量 u11,u12,key1 等,定义变量输入 sbit PWM1=P3^4。 定义延迟函数 void delay(uint x),定义初始化函数 void init(),定义共阴极数码管显示函数void display(uchar segNo,uchar num),定义键盘扫描函数 void keyScan(),定义主沈阳航空航天大 学毕业设计 9 函数 void main(void)。 在主函数中分别调用初始化函数,键盘扫描函数,在显示函数中显示。 最后编写中断函数,控制输出波形。 下图图 为指导本次编程的流程图: 图 编程流程图 在编程中,最为重要的便是键盘扫描函数,在键盘扫描函数中使用 switch函数,分别对矩阵键盘的每一行进行询问,待相应之后分别对每一个回应,对应的每一个键位进行定义,以实现矩阵键盘的各种功能。 沈阳航空航天大 学毕业设计 10 Proteus 中电子电路建立及仿真模拟 proteus 仿真软件的介绍 PROTEUS 软件是由英国 Labcenter Electronics 公司开发的 EDA 工具软件。 它从 1989 年问世至今,经过了近 20 的使用、发展和完善,功能越来越强大,性能越来越好。 PROTEUS 安装以后,主要由两个程序组成: ARES 和 ISIS。 前者主要用于 PCB 自动或人工布线及其电路仿真,后者主要采用原理布图的方法绘制电路并进行相应的仿真。 除了上述基本应用之外, PROTEUS 革命性的功能在于它的电路仿真是互动的,针对微处理器的应用,可以直接在基于原理图的虚拟原型上编程,并实现软件源代码级的调试,还可以直接实时动态地模拟按键、键盘的输入, LED、液晶 显示的输出,同时配合虚拟工具如示波器、逻辑分析仪等进行相应的测量和观测 仿真电路实现过程 以前学习 proteus 只是做了一些简单的如跑马灯,定时器,静态数字显示等模拟,虽然知道这款软件功能十分强大,但很少编写大程序。 这次毕设一开始虽然在心底构思了一些方案,有简单的流程设计,但一动手开始写程序,就给了笔者迎头一棒 —— 将电路图设计出来之后(如图 ),根本不知道从哪下手写程序,老师说这个毕设并不困难,只需要一两百行的程序就可以了。 可是笔者闭关三天,才苦苦写出了二三十行程序,更让笔者心凉的是,笔者的数码 管根本不显示任何数字,连乱码都没有。 更别说控制伺服电机了,不好的时候电机根本不动,就算问了同学,调试了一下程序,电机居然很不给面子的直接转到了头。 这要是实际工程应用,笔者的程序恐怕会谋杀很大一批数控铣床。 痛定思痛之下,笔者不得不认清现实,从头开始。 先图书馆借了许多 proteus 相关的书籍,又从网上下载了一些编程视频观看学习。 沈阳航空航天大 学毕业设计 11 图 ,原电路图 从最简单的程序入手,将本次毕设的程序分三段调试,这里边需要提一句,北京航空航天大学出版的《 proteus 辅助的单片机原理实践》这本书对笔者帮助很大。 笔者按照书上 的教程,简单练习了几个小程序热手,之后将这次的毕设题目分解成三个小题目。 分别是: 8 位共阴极数码管显示,矩阵键盘输入,伺服电机控制。 首先是 8 位共阴极数码管显示,笔者更改之前图 1 中使用的 PG12864F 显示器,改用编码为 7SEGMPX8CCBLUE 的 8 位共阴极数码管。 八位共阴极数码管的显示并不困难,从 0 至 F 的十六位数字都有各自的代码显示,只要在主程序中调用显示程序,并在对应的位上输入数值编码,便可以完成显示,程序简简单单的十数行,笔者便完成了生日的输出,如图 所示。 沈阳航空航天大 学毕业设计 12 图 ,生日截图 这里边 还有一个小插曲,为了连线方便,笔者将数码管的数字接口接到了AT89C51 单片机的 P0 口,将位选接口接到了单片机的 P2 口,可是屏幕根本不亮。 当时简直要疯了,砸电脑的心思都有,心说连一个显示程序都写不出来,还能不能毕业了。 后来按照书上的电路图,将位选接口接到了单片机的 P1 口。 模拟开始之后,屏幕居然显示了笔者的生日,当时成就感立刻就来了。 位选接口必须接到 P1 口,就好像外部中断控制最好接到 P3^2 到 P3^5 口一样。 然后是矩阵键盘输入,最开始笔者学习书上使用 for 循环,调用 16 位矩阵键盘编码实现矩阵键盘输入,可是悲 剧的发现,笔者对 for 循环并没有天赋,尤其是矩阵键盘要实现数字,正反转,复位,启停等不同功能。 很快笔者就改用 if 循环,在 if 循环中嵌套 switch 语句,虽然不如 for 循环简单明了,需要对矩阵键盘的四个横行询问,并对每一个纵行代码进行编译,但恰好满足笔者对每个键值的定义。 如图 3 所示,笔者定义了一个矩阵键盘,并将矩阵键盘每一个对应值都显示在数码管中。 沈阳航空航天大 学毕业设计 13 图 ,矩阵键盘 伺服电机的控制算是三个分题目中最困难的,如图 所示笔者选用了编号为 MOTORPWMSERVO 的伺服电机,要控制伺服电机的速度与偏转 角度(铣刀的位置),需要对 PWM 端口输入不同频率的方形波,这就涉及到中断控制的定时器与计数器了。 Proteus 的编程书籍中介绍了很多中断方面的知识,但说实话,笔者到现在也并没有完全学明白,很多中断都是凭着感觉,一点一点将程序调试出来的。 定时器 /计数器控制寄存器 TCON 的中断请求标志格式为: TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 其中关于中断的就有 6 位,中断方式又有数种,对于书上的初始化函数中,ET0=1, TR0=1, 与 EX0=1, IT0=1,有什么具体区别根本搞不懂。 按照书上将伺服电机的控制电路连接出来,程序也抄写在 KEIL 软件中,编译运行后伺服电机也如愿控制,但只要进行微调,比如说书上的程序电机每一次沈阳航空航天大 学毕业设计 14 转动 15 度,但要控制铣床,就算对自己的要求再低,怎么也要把精度保持在 1mm一下,如果电机每一步都转动 15 度,那需要使用的电传和齿轮系统笔者根本无法想象。 足足花了数天时间,笔者在调试伺服电机的程序,逐行理解程序的含义,对每一行的程序都进行标注,逐行改变程序赋值,希望能有奇迹出现。 最后经由老师点 拨,笔者更改了定时器初值,每 1um 便进行一次中断,又调节了频率与占空比,终于输出了比较满意的方形波,让伺服电机每一次转动的范围下降到了 3度,比原来足足放大了 5 倍,节省了许多齿轮。 但这又导致后来合成程序中出现了一个问题,笔者的延迟函数也只能延迟更少的时间,如果延迟时间过长,数码管的屏幕会不断闪烁,甚至出现乱码。 图 ,伺服电机 前后用了数周的时间,终于做出了零零碎碎将近 10 个仿真电路及其对应的程序,眼看着其他同学已经开始调试大程序,但笔者心中却颇有成就,因为笔者的大程序中,大部分语句都是亲手编译调试 ,笔者知道每一行语句的意义,编译出现错误笔者能够很快的更改,数码管显示出现不合心意的时候,笔者也能定位到相应的语句。 沈阳航空航天大 学毕业设计 15 终于,笔者带着将近一个月的积累,开始合成大程序,笔者将更改之后的三个子程序嵌入到大程序中,并用主函数分别调用初始化函数,键盘扫描函数,显示函数,笔者以为准备工作做得充足,主函数只要区区数行就可以完成这次毕设,结果仿真出来的结果让笔者哭笑不得。 第一次仿真, 8 位数码管只亮了 6 个,调试之后,正转( E)反转( F)的显示代码随时改变,位移显示部分更是奇葩,输入数字之后,只显示 11, 22, 33,44 等 数字,根本无法输入正常的数值,更别说舵机了,舵机也跟着乱转,就连现在,笔者调出来的程序,复位键还无法让舵机复位。 图 最终电路实现 程序实现简述及其源程序 全部源程序及其说明 include //调用头文件 define uchar unsigned char //简化定义语句 def。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。