收藏 分享(赏)

智能控制系统.doc

上传人:jinchen 文档编号:7898499 上传时间:2019-05-29 格式:DOC 页数:20 大小:470.55KB
下载 相关 举报
智能控制系统.doc_第1页
第1页 / 共20页
智能控制系统.doc_第2页
第2页 / 共20页
智能控制系统.doc_第3页
第3页 / 共20页
智能控制系统.doc_第4页
第4页 / 共20页
智能控制系统.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、智能控制系统设计与实现目录一、 构图: 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):控制脉冲方向脉冲使能控制脉冲方向脉冲使能控制脉冲方向脉冲

2、使能图(1)上位机TQ2440电机驱动器电机驱动器电机驱动器X 轴电机Y 轴电机Z 轴电机2、各部分的实现:这个控制系统,一共有三部分组成。但是要我们设计的主要是在上位机 TQ2440 上设计,电机驱动,和电机这些都是现成的,不需要我们来设计, 只要通过接线就可以了。3.1、上位机 TQ2440的控制程序设计。3.1.1、上位机 TQ2440 的控制程序设计构图: 如图(2)如图(2)3.1.2、TQ2440 开发交叉编译环境的搭建。1、安装虚拟机 Vmware ,安装 fedora9,就是在 fedora9 上来搭建 TQ2440 的开发环境。1)TQ2440的光盘上的 交叉编译工具按照 指

3、导书上减压即可 ;sudo tar vxjf EABI-4.3.3_EmbedSky_20091210.tar.bz2 -C /2)接着解压 linux 源代码;sudo tar xvfj linux-2.6.30.4.tar.bz2 -C /opt/EmbedSky/3) 修改环境变量,把交叉编译器的路径加入到 PATH;sudo gedit /etc/environmentTQ2440搭建交叉编译环境人机界面设计插补算法 与电机驱动器接口编写直线插补 圆,圆弧插补 不规则插补在最后加上::/opt/EmbedSky/4.3.3/bin4)立即使新的环境变量生效,不用重启电脑;source

4、/etc/environment5)检查是否将路径加入到 PATHecho $ PATH显示的内容中有/opt/EmbedSky/4.3.3/bin,说明已经将交叉编译器的路径加 入 PATH 。至此,交叉编译环境安装完成。6)测试是否安装成功arm-linux-gcc -v7)make menuconfig(详细过程参照 TQ2440手册)2、 建立 qt4的开发平台。1)在 TQ2440配套光盘中找到 arm_qt4.5_build 的安装包.#./ arm_qt4.5_build2)在 TQ2440配套光盘中找到 Qtcreator-1,3,0 的安装包 qt-creator-linux

5、-x86-opensourece-1.3.0.bin#./qt-creator-linux-x86-opensourece-1.3.0.binQtcreator-1.3.0的配置详细过程参照 tq2440手册3.1.3、人机界面。3.1.4、插补算法。1、直线插补(逐点比较法)(1) 、 逐点比较法的基本原理是,在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较 刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀 具向减小偏差的方向进给(始终只有一个方向) 。一般地,逐点比较法插补过程有四个处理节拍,如图(3)所示:图(3)1)偏差判别。判别刀具当前位置相对于给定轮廓

6、的偏差状况;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+1Fi+1=XeYiYe(Xi

7、+1)=FiYe若 Fi0,表示加工点位于圆外;若 Fi= 0 Thenx 动点 = x 动点 - 1:Line -Step(0, -x 步长), vbRedElsez 动点 = z 动点 + 1:Line -Step(z 步长, 0), vbRedEnd If偏差计算动点象限判别If 象限标志 = 0 Thenz 动点 = z 动点 - 1:Line -Step(-z 步长, 0), vbRedElsex 动点 = x 动点 + 1:Line -Step(0, x 步长), vbRedEnd IfDoEvents偏差计算动点象限判别If 象限标志 = 0 Thenz 动点 = z 动点 -

8、1:Line -Step(-z 步长, 0), vbRedElsex 动点 = x 动点 - 1:Line -Step(0, -x 步长), vbRedEnd If偏差计算动点象限判别If 象限标志 = 0 Thenx 动点 = x 动点 + 1:Line -Step(0, x 步长), vbRedElsez 动点 = z 动点 + 1:Line -Step(z 步长, 0), vbRedEnd If偏差计算动点象限判别If 象限标志 = 0 Thenx 动点 = x 动点 + 1:Line -Step(0, x 步长), vbRedElsez 动点 = z 动点 - 1:Line -Step

9、(-z 步长, 0), vbRedEnd IfDoEvents偏差计算动点象限判别If 象限标志 = 0 Thenz 动点 = z 动点 + 1:Line -Step(z 步长, 0), vbRedElsex 动点 = x 动点 - 1:Line -Step(0, -x 步长), vbRedEnd If偏差计算动点象限判别If 象限标志 = 0 Thenz 动点 = z 动点 + 1:Line -Step(z 步长, 0), vbRedElsex 动点 = x 动点 + 1:Line -Step(0, x 步长), vbRedEnd If偏差计算动点象限判别If 象限标志 = 0 Thenx

10、动点 = x 动点 - 1:Line -Step(0, -x 步长), vbRedElsez 动点 = z 动点 - 1:Line -Step(-z 步长, 0), vbRedEnd If偏差计算动点象限判别If 象限标志 4 ThenGoTo xxEnd IfLoopEnd IfEnd SelectEnd Sub3、不规则曲线插补。3.1.5、接口驱动编写。接口驱动的编写实际是 TQ2440,GPIO 驱动接口的编写。下面主要是在分析连接电机驱动器接口的 GPIO 的驱动编写。由于一共有三台步进电机,一台步进电机要3个接口,所以要开通9个 GPIO 的接口。TQ2440 GPIO 接口的如图

11、(9 )图(9)写实际的驱动,就必须了解相关硬件资源。比如:用到的寄存器、物理地址、中断等。在这个驱动中,它用到如下硬件资源。如表1所示。表1 电机驱动器及 TQ2440开发板引脚对应表。步进电机驱动器引脚 S3C2440引脚 TQ2440寄存器名称 所需电压X 轴的步进电机脉冲信号输入 nLED1 GPB5X 轴的步进电机方向信号输入 EINT3 GPG0X 轴的步进电机使能信号输入 EINT13 GPB7 0v(共阳极)Y 轴的步进电机脉冲信号输入 nLED2 GPB6Y 轴的步进电机方向信号输入 nLED4 GPF3Y 轴的步进电机使能信号输入 EINT14 GPF4 0v(共阳极)Z

12、轴的步进电机脉冲信号输入 nLED3 GPB8Z 轴的步进电机方向信号输入 EINT4 GPG5Z 轴的步进电机使能信号输入 EINT8 GPG6 0v(共阳极)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 /*主设备号 */*应用程序执行 i

13、octl(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_tabl

14、e =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 *f

15、ile)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 等函数,*最终会调用这个结构中指

16、定的对应函数*/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

17、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, if (ret 0)printk(DEVICE

18、_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, DEVI

19、CE_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, M

20、KDEV(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(“http:/“); /驱动程序的作者MODULE_DEION(“TQ2440/SKY2440 LED Driver“); /

21、一些描述信息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_GPB5 ioctl(fd,1,0) (ioctl(

22、fd,0,0) ) 低电平(高电平)S3C2410_GPB6 ioctl(fd,1,1) (ioctl(fd,0,1) ) 低电平(高电平)S3C2410_GPB7 ioctl(fd,1,2) (ioctl(fd,0,2) ) 低电平(高电平)S3C2410_GPB8 ioctl(fd,1,3) (ioctl(fd,0,3) ) 低电平(高电平)S3C2410_GPF3 ioctl(fd,1,4) (ioctl(fd,0,4) ) 低电平(高电平)S3C2410_GPF4 ioctl(fd,1,5) (ioctl(fd,0,5) ) 低电平(高电平)S3C2410_GPG0 ioctl(fd,

23、1,6) (ioctl(fd,0,6) ) 低电平(高电平)S3C2410_GPG5 ioctl(fd,1,7) (ioctl(fd,0,7) ) 低电平(高电平)S3C2410_GPG6 ioctl(fd,1,8) (ioctl(fd,0,8) ) 低电平(高电平)3.3V转5V电路3.2、上位机 TQ2440 与电机驱动器的连接。由于上位机 TQ2440 的 GPIO 口输出的电压为 3,3 伏,而电机驱动器的电压为 5V。所以要把 GPIO 的输出电压升为 5V 后才可以连接到电机上。上位机与电机驱动器采用共阳级法。上位机、升压电路和 X 轴的电机驱动器连接图。如图(11)所示。GPB5 PU GPB6 DUGPB7 EN GPB8 DUGPF3 PU GPF4 ENGPG0 PU GPG5 DUGPG6 EN 图(11)3.3V 转5V 的电路如图(12)所示:5V1K GPIO 口的输出 1K 输出8050GND图(12)上位机TQ2440X 轴三相电机驱动器Y 轴三相电机驱动器Z 轴三相电机驱动器3.3、电机驱动器与电机的连接。U 相V 相W 相电机驱动器W电机

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报