基于STM32的二维滑台不规则轨迹精密控制

发布者:点亮未来最新更新时间:2015-10-15 来源: 21ic关键字:STM32  二维滑台  不规则轨迹  精密控制 手机看文章 扫描二维码
随时随地手机看文章
在现代工业控制中步进电机的控制是滑台控制的执行机构。区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机转速由脉冲信号的频率决定。

在很多情况下需要让步进电机控制滑台运动非常精确的距离,且运行轨迹是不规则的,运行时速度需可调。本文首先介绍系统的硬件电路原理;分析了控制滑台运行不规则轨迹的计算方法;在此基础上提出了用定时器中断的方法精确控制PWM数量;介绍了具体的软件实现方法并分析了系统测试结果。

1 系统硬件设计

本论文基于机车牵引梁数控磨削设备的电控设计,此设备用来磨削一个带弧线的六边形物体,因此要求设计两维滑台的电控部分,以精密控制磨削头的运行轨迹,经分析此轨迹呈不规则路线。系统硬件框图如图1所示,本系统的主控芯片是STM32F407,该芯片主频高达168 MHz,PWM定时器的频率同样可以达到168 MHz,在频率要求较高的设计中有较显著的优势。同时对于定时器中断控制PWM数量可以防止中断嵌套,且可以显著减少中断现场保护的开销,且该芯片支持SPI、CAN、I2C等多种协议。

a.jpg

主机和从机分别用两台两相步进电机来带动X轴和Y轴滑台,步进电机用M860驱动器来驱动。STM32主控板给驱动器发送PWM信号、方向和使能信号,驱动器经过光耦隔离并细分后来驱动步进电机。本系统主机和从机之间用CAN总线来进行通信,CAN总线具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点。主机和从机可以单独运行,只有当需要的时候采用CAN总线来进行同步。主机设置PWM的频率、滑台位置等数据以及发送开始运行、停止运行等信号,从机通过CAN总线接收相关数据和指令。当从机结束运行就会发送结束信号给主机。主机和从机之间通过CAN总线进行同步。

2 系统软件设计

2.1 二维滑台的运行模式

以二维滑台为研究对象,滑台由步进电机带动,滑台的运行模式中包含了二维滑台的单独运行和同时运行,假设滑台的齿距为10 mm(步进电机转动一圈,滑台前进10 mm)。

假设目标滑台前进距离为L。驱动器细分倍数为、步进电机总步数、PWM脉冲总个数为别为n、N、P。则

b.jpg

为了便于计算,此次设计将驱动器细分倍数设为5,则

P=N=100L                                                      (2)

即当滑台需要前进距离为Lmm时,则步进电机总步数以及PWM脉冲总个数也应该为100 L。

如图2所示是二维滑台的不规则运动轨迹,轨迹由直线、斜线、圆弧组成。各种轨迹实现方法如下:

c.jpg

1)斜线轨迹

由图2可知,二维滑台有同时运动和结束的过程,对于斜线部分X轴滑台运距离为n1的过程中Y轴滑台同时运行距离为n2。有公式2可知X轴滑台和Y轴滑台运行n1和n2的距离所需要的PWM的脉冲个数分别为P1、P2则有P1=100n1,P2=100n2,以X轴为基准,则

n2=n1·cosα (3)

P2=P1cosα (4)

STM32定时器产生的PWM频率由系统时钟f、预分频值M、计数周期T决定,系统时钟f和和预分频值M不变,以改变计数周期T来改变PWM的频率。

以X轴滑台为基准,Tx、Ty分别为X和Y轴定时器计数周期,Vx、Vy分别为X轴和Y轴定时器频率,则有

d.jpg

2)单滑台运动轨迹

如图2所示,对于距离为n3的部分,由于只需要在X轴方向上运动,由公式2可知需要的PWM数量为100n3,因此只需要设置X轴定时器的PWM频率为固定值。并且计数100n3个PWM数量然后停止,轨迹在X轴方向上运动的距离就为n3。
 

而对于距离为n4的部分,和n3部分唯一不同的地方就是此时只需在Y轴方向运动。因此只需要设置Y轴定时器的PWM频率为固定值,并且计数100n4个PWM然后停止。[page]

3)圆弧轨迹

而圆弧部分是以直线切割的方式实现的,圆弧角度为90度,D点是圆弧的中心点,圆弧半径为55 mm。

D点以上以X轴为基准,假设X轴定时器产生的PWM频率为,每输出100个PWM时Y轴定时器频率变换一次。假设A点变换了n-1次PWM,而B点变换了n次PWM,则A点坐标为(100(n-1),Ya),B点坐标为(100n,Yb),圆弧半径为R,则有

e.jpg

但是由于圆弧中点对应的X轴的PWM数量往往不是100的倍数,所以假设C点是离中点D最近的点,C点变换了m次PWM,则C点X轴坐标为100m,D点X和Y轴的坐标e1.jpg都为,则有

f.jpg

在D点以下以Y轴为基准,假设Y轴定时器产生的PWM频率为Vy固定不变,每输出100个PWM时X轴定时器频率变换一次。假设E点变换了i-1次 PWM,而F点变换了i次PWM,则E点坐标为(Xe,Yd-100(i-1)),F点坐标为(Xf,Yd-100i),圆弧半径为R,则有

g.jpg

通过式(8)、(11)、(19),在程序的每一步中设置Tx、Ty的值来实现X、Y轴滑台以所要求的轨迹运动。

2.2 统软件流程图

如图3所示是系统软件的流程图,系统在初始化时为了防止意外的碰撞,需要寻找零点,寻找零点结束后进行滑台转速、轨迹中每一步PWM数量的设置,并通过 CAN总线将设置的数据发送给从机。设置完成后,当主机检测到物件过来的信号后,将开始运行的信号通过CAN总线发送给从机,使主机与从机同时开始运行,当从机运行完成后发送反馈信号给从机,主从机同时停止运行。当一次运行完成以后看情况确定是否需要重新设置参数,如果需要重新设置则进入滑台运行轨迹参数设置狂态,否则进入等待运行状态。

h.jpg

在主从机运行过程中,由滑台运行模式可知,滑台是以不规则的轨迹运行的。因此根据滑台的运行模式,在每一步运行之前需要计算滑台运行的距离及两个滑台的PWM频率。

3 系统测试

将该系统运用到实际的环境中,以垂直于地面放置的二维滑台为研究对象,使滑台以图2中的轨迹运行。在设备运行的起始点做标记,设置滑台运行在90秒/圈,45秒/圈30秒/圈三种速度下,并且分别运行10圈,15圈,20圈,25圈得到运行结束时与起始点的距离,如表1所示,同样转速时转动圈数越多误差越大;转动相同圈数的情况下,滑台转速越高误差也是越大。

i.jpg

经过实际分析得出,这些误差是由两方面造成的。一方面,由于滑台是垂直于地面放置,滑台在下降过程中难免会因为重力的作用而下降。另一方面,在定时器输出 PWM数量固定的情况下,由于在系统运动过程中需要改变经常需要改变PWM的频率,而改变一次PWM的频率会有1个CLOCK的延迟。

4 结束语

本文介绍了用STM32控制滑台运行不规则轨迹的计算方法,在此基础上提出了用定时器中断的方法精确控制PWM数量。通过精密控制X轴和Y轴的滑台,使磨削头能以直线、斜线和弧线的轨迹精确运动,达到成功磨削工件的目的。经过实际的测试表明该系统工作稳定,精确度较高。

本次设计是二维的滑台,但设计的思想和方法也可推广到三维滑台的控制设计。要想获得更精确的步进电机控制,可考虑使用DSP作为主控芯片,从而可以有更高的运算速度和控制精度。本论文精确控制两维滑台运行轨迹的方法可推广应用到许多步进电机控制的项目中,比如本实验室另一个项目——显微镜电动载物台的精密控制。

关键字:STM32  二维滑台  不规则轨迹  精密控制 引用地址:基于STM32的二维滑台不规则轨迹精密控制

上一篇:基于ARM与FPGA的电力电源一体化监控装置
下一篇:ARM核心板在电气火灾监控系统中的应用

推荐阅读最新更新时间:2024-03-16 14:36

STM32单片机/I2C通信(上篇)
本文使用STM32FI03RCT6型号的单片机, 基于正点原子的函数库进行总结讲解 复制 想来单片机这块儿除了USART串口通信外,常见的便是I2C通信了,因为I2C通信 硬件连接简单,可扩展性强,但是这种硬件连线的简洁,是以协议的复杂来弥补的。I2C通信是一种半双工通信,也就是可以双向传输数据但不能同时进行。 STM32单片机是可以进行硬件I2C通信或者软件模拟进行I2C通信的,硬件I2C通信只需要对I2C引脚以及通信模式这两个结构体进行初始化即可,但I2C硬件通信由于硬件原因并不稳定(原子哥说的),不过在STM32F4系列有所改善,但我都没试过(寒假在家手头硬件条件不足)。 下面我们基于软件I2C模拟进行说明。 I2C通信
[单片机]
<font color='red'>STM32</font>单片机/I2C通信(上篇)
让汽车ECU开发事半功倍,ST AutoDevKit工具包是何物?
常态下,工程师眼中的汽车 ECU 开发:复杂 1. 需求分析和顶层设计; 2. 元器件选型、硬件模组原理图设计、PCB 打样、PCBA 与单元模组测试; 3. 模组组装; 4. 软件开发与测试; 5. 系统测试、修正与再修正、认证。 用 ST AutoDevKit 后,工程师眼中的汽车 ECU 开发:搭积木 1. 需求分析,定下目标; 2. 模组、技术的选择和订购,也可进行解决方案推荐,硬件式“搭积木”; 3. 下载 AutoDevKit 免费软件开发环境,调用必要软件栈,根据操作指示说明完成应用开发; 4. 资深专家辅助测试与验证。 AutoDevKit 是何物?哪些人可从中受益?
[汽车电子]
让汽车ECU开发事半功倍,ST AutoDevKit工具包是何物?
STM32平衡小车】STM32定时器配置为编码器模式
一、编码器原理 如果两个信号相位差为90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向、根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离、如果再加上定时器的话还可以计算出速度。 二、为什么要用编码器 从上图可以看出,由于TI1,TI2一前一后有个90度的相位差,所以当出现这个相位差时就表示轮子旋转了一个角度。但有人会问了:既然都是脉冲,为什么不用普通IO中断?实际上如果是轮子一直正常旋转当然没有问题。仔细观察上图,如果出现了毛刺呢?这就是需要我们在软件中编写算法进行改正。于是,我们就会想到如果有个硬件能够处理这种情况那不是挺好吗? 对应的硬件的编码器就来
[单片机]
【<font color='red'>STM32</font>平衡小车】<font color='red'>STM32</font>定时器配置为编码器模式
STM32-一文读懂EXTI外部中断/事件系统
STM32的外部中断/事件系统简介 注意这里的外部中断指的是EXTI,是芯片的外部中断,主要是由芯片外部事件触发的中断,不是内核的外部中断!在《STM32-异常与中断》中提到的外部中断均是相对于内核而言的,比如串口中断、定时器中断等等都是(内核的)外部中断。 大部分的STM32外部中断/事件控制器由19个产生事件/中断请求的边沿检测器组成,支持 19 个外部中断/事件请求,这19 个外部分别中断为: (互联型 )产品有20个) 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD 输出。 线 17:连接到 RTC 闹钟事件。 线 18:连接到 USB 唤醒事件。 每个中断设有状态位,每个中断/事件都有独
[单片机]
STM32-一文读懂EXTI外部中断/事件系统
STM32上实现使用DMA+USART3传输数据
串口的配置的文档如下所示 出口3的头文件 #ifndef __USART3_H#define __USART3_H #include sys.h #define USART3_MAX_RECV_LEN 200 //×î´ó½ÓÊÕ»º´æ×Ö½ÚÊý#define USART3_MAX_SEND_LEN 200 //×î´ó·¢ËÍ»º´æ×Ö½ÚÊý#define USART3_RX_EN 1 //0,²»½ÓÊÕ;1,½ÓÊÕ.extern u8 USART3_RX_BUF ; //½ÓÊÕ»º³å,×î´óUSART2_MAX_RECV_LEN×Ö½
[单片机]
利用STM32编码器进行任意位置确定
车轮位置的确定是在制作小车的过程中必不可少的部件,好在STM32中包含了硬件的编码器。但使用的过程中却存在诸多不方便。下面由我一一道来: 1。编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向、根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离、如果再加上定时器的话还可以计算出速度。 2。为什么要用编码器 从上图可以看出,由于TI,T2一前一后有个90度的相位差,所以当出现这个相位差时就表示轮子旋转了一个角度。但有人会问了:既然都是脉冲,为什么不用普通IO中断?实际上如果是轮子一直正常旋转当
[单片机]
利用<font color='red'>STM32</font>编码器进行任意位置确定
STM32——库函数开发小结
基本上所有外设都有以下几类寄存器:【CR/DR/SR】 (1)控制寄存器 xxx_CR(Control/Configuration Register):这类寄存器是用来配置、控制 相应 外 设 的 工 作 方 式 的 。 如 GPIOx_CRL、GPIOx_CRH, AFIO_EXTICR1~AFIO_EXTICR4,串口的 USART_CR1~USART_CR3等。 (2)数据寄存器 xxx_DR(Data Register):这类寄存器主要是存储了外设进行输出输入的数据。如 GPIOx_IDR、GPIOx_ODR、USART_DR 等。 (3)状态寄存器 xxx_SR(Status Register):这类寄存器主
[单片机]
<font color='red'>STM32</font>——库函数开发小结
在单片机上实现动态加载功能
本项目是一个在单片机(如:STM32)上实现动态加载功能的函数库,与Windows中的dll,Linux中的so类似,可以将代码动态地从其他的存储介质,动态加载到RAM中。 软件架构 本项目文件夹有三个,其中common存储了用于生成可重定位的.axf文件的工程与动态加载器工程交互用的函数,src提供动态加载器的源码,rel_axf_project_template提供了一个简单的可重定位的.axf文件的工程示例,example.c是一个简单的使用示例,所有文件的主要功能如下: /common/dl_extern_lib.h 描述了app程序用于调用host程序的函数向量表的基地址,以及相关的一些宏定义 /common/dl_
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved