




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能控制系统设计与实现目录一、 构图:1二、 各部分的实现:23.1、上位机TQ2440的控制程序设计。23.1.1、上位机TQ2440的控制程序设计构图23.1.2、TQ2440开发交叉编译环境的搭建。23.1.3、人机界面。33.1.4、插补算法。33.1.5、接口驱动编写。133.2、上位机TQ2440与电机驱动器的连接。193.3、电机驱动器与电机的连接。21一、设计课题:在三维空间内通过控制三台电机联动,来驱动机床画直线,圆,圆弧,不规则的曲线。1、 构图: 智能控制系统各部分组成为如下图(1):X轴电机上位机TQ2440电机驱动器 控制脉冲 方向脉冲 使能Y轴电机电机驱动器 控制脉冲 方向脉冲 使能Z轴电机电机驱动器 控制脉冲 方向脉冲 使能 图(1)2、 各部分的实现:这个控制系统,一共有三部分组成。但是要我们设计的主要是在上位机 TQ2440上设计,电机驱动,和电机这些都是现成的,不需要我们来设计, 只要通过接线就可以了。3.1、上位机TQ2440的控制程序设计。3.1.1、上位机TQ2440的控制程序设计构图: 如图(2) TQ2440不规则插补直线插补圆,圆弧插补与电机驱动器接口编写搭建交叉编译环境插补算法人机界面设计如图(2)3.1.2、TQ2440开发交叉编译环境的搭建。1、安装虚拟机Vmware ,安装fedora9,就是在fedora9上来搭建TQ2440的开发环境。 1)TQ2440的光盘上的 交叉编译工具按照 指导书上减压即可 ; sudo tar vxjf EABI-4.3.3_EmbedSky_20091210.tar.bz2 -C / 2)接着解压linux源代码; sudo tar xvfj linux-.tar.bz2 -C /opt/EmbedSky/ 3)修改环境变量,把交叉编译器的路径加入到 PATH; sudo gedit /etc/environment 在最后加上: :/opt/EmbedSky/4.3.3/bin 4)立即使新的环境变量生效,不用重启电脑; source /etc/environment 5)检查是否将路径加入到 PATH echo $ PATH 显示的内容中有/opt/EmbedSky/4.3.3/bin,说明已经将交叉编译器的路径加 入 PATH 。至此,交叉编译环境安装完成。 6)测试是否安装成功 arm-linux-gcc -v 7)make menuconfig(详细过程参照TQ2440手册) 2、建立qt4的开发平台。 1)在TQ2440配套光盘中找到arm_qt4.5_build 的安装包. #./ arm_qt4.5_build 2)在TQ2440配套光盘中找到Qtcreator-1,3,0 的安装包 qt-creator-linux-x86-opensourece-1.3.0.bin #./qt-creator-linux-x86-opensourece-1.3.0.bin Qtcreator-1.3.0的配置详细过程参照tq2440手册 3.1.3、人机界面。3.1.4、插补算法。 1、直线插补(逐点比较法) (1)、逐点比较法的基本原理是,在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较 刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀 具向减小偏差的方向进给(始终只有一个方向)。一般地,逐点比较法插补过程有四个处理节拍,如图(3)所示:图(3)1)偏差判别。判别刀具当前位置相对于给定轮廓的偏差状况;2)坐标进给。根据偏差状况,控制相应坐标轴进给一步,使加工点向被加工轮廓靠拢;3)重新计算偏差。刀具进给一步后,坐标点位置发生了变化,应按偏差计算公式计算新位 置的偏差值;4) 终点判别。若已经插补到终点,则返回监控,否则重复以上过程。(2) 分析第一象限直线如图(4)。 1)偏差函数构造 图(4)对于第一象限直线OA上任一点(X,Y):X/Y= Xe/Ye 若刀具加工点为Pi(Xi,Yi),则该点的偏差函数Fi可表示为 若Fi= 0,表示加工点位于直线上;若Fi 0,表示加工点位于直线上方;若Fi=0,规定向 +X 方向走一步 Xi+1=Xi+1 Fi+1=XeYiYe(Xi+1)=FiYe 若Fi0,表示加工点位于圆外;若Fi0,表示加工点位于圆内(2)偏差函数的递推计算 1) 逆圆插补 若F0,规定向-X方向走一步 若Fi0,规定向+Y方向走一步2) 顺圆插补 若Fi0,规定向-Y方向走一步 若Fi= 0 Then x动点 = x动点 - 1: Line -Step(0, -x步长), vbRed Else z动点 = z动点 + 1: Line -Step(z步长, 0), vbRed End If 偏差计算 动点象限判别 If象限标志 1 Then GoTo xx End If 单步连续判断 Loop ElseIf顺逆标志 = 逆 Then Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then z动点 = z动点 - 1: Line -Step(-z步长, 0), vbRed Else x动点 = x动点 + 1: Line -Step(0, x步长), vbRed End If DoEvents 偏差计算 动点象限判别 If象限标志 1 Then GoTo xx End If Loop End If Case 2:单步连续判断 If顺逆标志 = 顺 Then 第二象限插补 Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then z动点 = z动点 - 1: Line -Step(-z步长, 0), vbRed Else x动点 = x动点 - 1: Line -Step(0, -x步长), vbRed End If 偏差计算 动点象限判别 If象限标志 2 Then GoTo xx End If Loop ElseIf顺逆标志 = 逆 Then Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then x动点 = x动点 + 1: Line -Step(0, x步长), vbRed Else z动点 = z动点 + 1: Line -Step(z步长, 0), vbRed End If 偏差计算 动点象限判别 If象限标志 2 Then GoTo xx End If Loop End If Case 3:单步连续判断 If顺逆标志 = 顺 Then 第三象限插补 Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then x动点 = x动点 + 1: Line -Step(0, x步长), vbRed Else z动点 = z动点 - 1: Line -Step(-z步长, 0), vbRed End If DoEvents 偏差计算 动点象限判别 If象限标志 3 Then GoTo xx End If Loop ElseIf顺逆标志 = 逆 Then Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then z动点 = z动点 + 1: Line -Step(z步长, 0), vbRed Else x动点 = x动点 - 1: Line -Step(0, -x步长), vbRed End If 偏差计算 动点象限判别 If象限标志 3 Then GoTo xx End If Loop End If Case 4:单步连续判断 If顺逆标志 = 顺 Then 第三象限插补 Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then z动点 = z动点 + 1: Line -Step(z步长, 0), vbRed Else x动点 = x动点 + 1: Line -Step(0, x步长), vbRed End If 偏差计算 动点象限判别 If象限标志 4 Then GoTo xx End If Loop ElseIf顺逆标志 = 逆 Then Do Until (x动点 - x终点) = 0 And (z动点 - z终点) = 0 If偏差 = 0 Then x动点 = x动点 - 1: Line -Step(0, -x步长), vbRed Else z动点 = z动点 - 1: Line -Step(-z步长, 0), vbRed End If 偏差计算 动点象限判别 If象限标志 4 Then GoTo xx End If Loop End If End SelectEnd Sub3、 不规则曲线插补。3.1.5、接口驱动编写。接口驱动的编写实际是TQ2440,GPIO驱动接口的编写。下面主要是在分析连接电机驱动器接口的GPIO的驱动编写。由于一共有三台步进电机,一台步进电机要3个接口,所以要开通9个GPIO的接口。TQ2440 GPIO接口的如图(9)图(9) 写实际的驱动,就必须了解相关硬件资源。比如:用到的寄存器、物理地址、中断等。在这个驱动中,它用到如下硬件资源。如表1所示。 表1 电机驱动器及TQ2440开发板引脚对应表。步进电机驱动器引脚S3C2440引脚TQ2440寄存器名称所需电压X轴的步进电机脉冲信号输入nLED1GPB5X轴的步进电机方向信号输入EINT3GPG0X轴的步进电机使能信号输入EINT13GPB70v(共阳极)Y轴的步进电机脉冲信号输入nLED2GPB6Y轴的步进电机方向信号输入nLED4GPF3Y轴的步进电机使能信号输入EINT14GPF40v(共阳极)Z轴的步进电机脉冲信号输入nLED3GPB8Z轴的步进电机方向信号输入EINT4GPG5Z轴的步进电机使能信号输入EINT8GPG60v(共阳极)3台电机公共端5V(共阳极)驱动源程序:i nclude i nclude i nclude i nclude i nclude i nclude i nclude i nclude i nclude #define DEVICE_NAME EmbedSky-motor /*加载模式后,执行”cat /proc/devices”命令看到的设备名称*/#define LED_MAJOR 231 /*主设备号*/*应用程序执行ioctl(fd,cmd,arm)时的第2 个参数*/#define IOCTL_LED_ON 1#define IOCTL_LED_OFF 0/*用来指定motor所用的GPIO引脚*/static unsigned long led_table =S3C2410_GPB5,S3C2410_GPG0,S3C2410_GPB7,S3C2410_GPB6,S3C2410_GPF3,S3C2410_GPF4,S3C2410_GPB8,S3C2410_GPG5,S3C2410_GPG6,;/*用来指定GPIO引脚功能:输出*/static unsigned int led_cfg_table =S3C2410_GPB5_OUTP,S3C2410_GPG0_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPF3_OUTP,S3C2410_GPF4_OUTP,S3C2410_GPB8_OUTP,S3C2410_GPG5_OUTP,S3C2410_GPG6_OUTP,;/*应用程序寻设备文件/dev/EmbedSky-motor执行opne()时就会调用EmbedSky_leds_open函数*/static int EmbedSky_leds_open(struct inode *inode, struct file *file)int i; for (i = 0; i 4)return -EINVAL;switch(cmd)case IOCTL_LED_ON:s3c2410_gpio_setpin(led_tablearg, 0);/设置指定引脚的输出电平为0return 0;case IOCTL_LED_OFF:s3c2410_gpio_setpin(led_tablearg, 1);/设置指定引脚的输出电平为1return 0; default:return -EINVAL;/*这个结构是字符设备驱动程序的核心*当应用程序操作设备文件时所调用的open、read、write等函数,*最终会调用这个结构中指定的对应函数*/static struct file_operations EmbedSky_leds_fops =.owner = THIS_MODULE, /*这是一个宏,推向编译模块时自动创建的_this_module变量*/.open = EmbedSky_leds_open,.ioctl = EmbedSky_leds_ioctl,;static char _initdata banner = TQ2440MOTOR;static struct class *led_class;/*执行“insmod EmbedSky_leds.ko”命令时就会调用这个函数*/static int _init EmbedSky_leds_init(void)int ret;printk(banner);/*注册字符设备驱动程序*参数为主设备号、设备名字、file_operations结构;*这样,主设备号就和具体的file_operations结构联系起来了,*操作主设备为LED_MAJOR的设备文件时,就会调用EmbedSky_leds_fops中的相关成员函数* LED_MAJOR可以设为0,表示由内核自动分配主设备号*/ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &EmbedSky_leds_fops);if (ret 0)printk(DEVICE_NAME cant register major numbern);return ret;/注册一个类,使mdev可以在/dev/目录下面建立设备节点led_class = class_create(THIS_MODULE, DEVICE_NAME);if(IS_ERR(led_class)printk(Err: failed in EmbedSky-leds class. n);return -1;/创建一个设备节点,节点名为DEVICE_NAMEdevice_create(led_class, NULL, MKDEV(LED_MAJOR, 0), NULL, DEVICE_NAME);/官方文档为class_device_create(led_class, NULL, MKDEV(LED_MAJOR, 0), NULL, DEVICE_NAME);printk(DEVICE_NAME initializedn);return 0;/*执行”rmmod EmbedSky_leds.ko”命令时就会调用这个函数*/static void _exit EmbedSky_leds_exit(void)/*卸载驱动程序*/unregister_chrdev(LED_MAJOR, DEVICE_NAME);device_destroy(led_class, MKDEV(LED_MAJOR, 0);/删掉设备节点官方文档为class_device_destroy(led_class, MKDEV(LED_MAJOR, 0);class_destroy(led_class); /注销类/*这两行指定驱动程序的初始化函数和卸载函数*/module_init(EmbedSky_leds_init);module_exit(EmbedSky_leds_exit);/*描述驱动程序的一些信息,不是必须的*/MODULE_AUTHOR(); /驱动程序的作者MODULE_DEION(TQ2440/SKY2440 LED Driver); /一些描述信息MODULE_LICENSE(GPL); /遵循的协议编译好了源文件,然后就烧写到TQ2440的开发板上。通过如下图(10)的方法来加载进去。图(10) 把驱动模块加载好,就可以通过 open来打开fd=open(/dev/Embedsky-leds,0);然后现通过ioctl(fd,cmd,arg); 函数就可以来控制str对应GPIO的接口的电平。如表2表2 ioctl(fd,cmd,arg)与控制GPIO接口电平关系。GPIO接口名ioctl(fd,cmd,arg)写法电平高低S3C2410_GPB5ioctl(fd,1,0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保洁开荒协议书
- 合股开店协议书
- 债务重组协议书
- 安全协议书离婚
- 充电桩物业四方协议书
- 一年级语文上册 汉语拼音 10 ɑo ou iu说课稿 新人教版
- 股东一致行动协议书
- 协议书套餐过户
- 七年级语文下册 第三单元 第11课《台阶》说课稿2 新人教版
- 安全知识培训化工厂课件
- 保安安检培训课件
- 2025年肝素行业研究报告及未来行业发展趋势预测
- 2025年脚手架租赁合同3篇
- 医院工作纪律培训课件
- 营房装修施工方案(3篇)
- 品牌基础知识培训内容课件
- 2025年知识竞赛-监理知识竞赛历年参考题库含答案解析(5套典型题)
- DG-TJ08-2120-2025 集体土地所有权调查技术标准
- 脑梗死健康宣教及指导
- 遵守安全生产法 当好第一责任人
- 创伤性气胸护理查房
评论
0/150
提交评论