基于STM32的伺服压力机控制系统设计

2020-02-14来源: elecfans关键字:STM32  伺服压力机  控制系统

1 引言

随着制造业朝着生产规模化、产品个性化的方向发展,产品型号变化加快,生产批量相对变小,多种型号共线生产、覆盖件大型化,一体化的趋势日益明显,要求压力机不仅能够高速度、高精度、大负载的运转,而且应具有更大的柔性,能迅速、方便地改变输出运动规律。以上这些不断提高的加工工艺和生产条件的多样化都促进了锻压设备行业的重大变革。在需求的推动下,目前,世界上出现伺服电机直接驱动的伺服压力机,能够满足塑性加工、难成形材料成形、复杂形状零件成形、复合成形以及高精度成形等成形工艺的要求。伺服压力机采用交流伺服电机代替普通交流电机,去除传统曲柄压力机上的飞轮和离合器,使得压力机机械结构得以简化,可靠性增强。所以研制适合不同材料加工要求的压力机数字控制系统, 对提高材料加工技术的水平和加工装备的数字化能力具有十分重要的现实意义[1]。

伺服压力机的基本结构及对控制系统的要求与传统压力机比较,伺服压力机取消了原有压力机的飞轮和离合器,保留了曲柄滑块驱动机构,其传动系统采用一级齿轮减速系统,将其运动和动力传递给压力机的曲轴,由曲轴的转动实现压力机的往返运动。

同时,伺服压力机对控制系统有更高的要求,一般要求控制系统满足:可编程的滑块运动曲线,适应不同的加工对象、不同材质的加工工艺;滑块位置和速度的精确控制;快速的响应[2]。

2 控制系统总体方案设计

根据上述伺服压力机的功能要求,本系统选用了“工控机+ARM运动控制卡"的硬件设计方案。工控机负责系统的非实时部分的工作,完成运动曲线的读取和设置,工艺的优化以及运行状态参数的显示,ARM运动

控制卡负责系统的实时部分,完成伺服压力机的实时运动控制和数据逻辑的处理。ARM运动控制卡与工控机之间、采用成熟的串行通信进行通信。采用stm32系列的ARM芯片,STM32是意法半导体推出的一款32位的微控制器,该控制器所用微处理器是ARM 公司开发的Cortex2M3内核。CortexM3进行了多项技术改进,使得代码执行速度更快,同时能耗更低。在外设方面,该型号包含有两个12位逐次逼近型的模拟/数字转换器,转换时间最高为1ms ; 3个USART通讯接口,支持全双工的数据交换,提供宽范围波特率的选择,最高可达到415Mbps; 两个SPI通讯口,支持18MHz的主从控制模式;两个I2C总线接口,支持芯片间的通讯与传输;3个16位的通用定时器,每个定时器都有4路通道,每个通道有3种工作模式选择,即输入捕获模式、输出比较模式、PWM控制模式;一个16位的高级定时器专门用于电机向量驱动,其中有6个功能通道,并且能设置死区时间。此外还有常用的USB和CAN总线接口以及7个DMA通道,用于数据的自动传输[3]。基于STM32的伺服电机控制系统的系统框图如图1所示。
 

图1 控制系统框图


根据系统的工作原理,该控制系统可以分为PWM产生,脉冲计数,IO控制和串口通信四个部分。由于本系统采用伺服驱动器控制伺服电机,控制信号包括PWM脉冲信号,电机方向信号和伺服使能信号等,PWM脉冲信号由STM32专用的定时器产生,STM32支持PWM脉冲的频率和占空比在线调整,其预装在寄存器可以将新设定值在计数溢出后自动装载影子寄存器,同时更新周期计数器和预分频器。方向和使能信号由普通IO口产生,STM32产生的数字信号经过光耦隔离输出,一方面防止了电气干扰,同时完成电平转换,提高了IO口的驱动能力[4];

增量式脉冲编码器输出A、B、Z三路差分信号,经过光电隔离送入STM32的定时器,本系统中通过对一定时间内的产生的反馈脉冲计数,获取电机的位置和速度,完实现速度和位置的闭环控制;
IO控制模块包括输入IO和输出IO,输入输出IO经过继电器将信号送入stm32的普通IO口,输入IO主要包括电机的使能和失能,伺服激磁等信号,输出IO用作电机运行异常的报警信号,异常信号经继电器送入IO口产生中断信号,主控制器根据相应的中断信号,转入中断子程序执行;
STM32有3个USART通讯接口,支持全双工的数据交换,提供宽范围波特率的选择,可以满足此处的通信要求,采用串口与上位机通信,获取上位机的指令和运动参数,并返回滑块的运动状态。

3 控制系统的软件实现

3.1 软件的总体结构

软件部分采用Real2View MDK(Microcon-troller Development Kit)进行程序代码编写 ,采用模块化的编程思想,独立完成系统设置模块,编码器反馈模块,定时器模块,通信模块和PID闭环控制模块的程序设置,程序的整体结构如图2所示:
 

图2 软件结构图

图3 主程序流程


3.2 主程序流程

在电机的运动部分,由于采用串口通信传递电机的控制参数,因而需要定义串口通信的数据格式,在此处的程序设计中,把数据帧划分为命令控制字、状态查询字(需下位机返回数据)和电机参数字。以上位机传递运动参数为例,上位机发送位置指令,控制器检测是否收到数据,根据收到的数据给驱动器发送信号,控制电机精确的运行到指定位置,如果出现误差,则进行误差补偿,系统程序的流程如图3所示。

3.3 转子位置、角速度检测

脉冲编码器模块主要完成位置和速度的计算,实现位移和速度的闭环控制。增量式编码器其输出信号为脉冲信号,其脉冲个数与相对旋转位移有关,而与旋转的绝对位置无关,其精度较高,而且其成本相对较低。如果预先设定一个基准位置,则可以利用增量式编码器实现绝对式编码器的功能,即可以测出旋转的绝对位置。而速度的计算有两种方法,一种是采用f/v转换电路,将频率转换为电压信号实现测速,另一种是在给定的时间内对脉冲计数直接完成速度的计算,考虑到实现的复杂性,本处采用后一种方法实现。

3.4 定时器模块

在整个控制程序中,PWM脉冲的产生和控制是最关键的环节,能否可靠的产生实时可调的PWM脉冲关系到整个系统的灵活性和精确度。在STM32中有2种定时器:通用定时器和高级定时器,其中T1M1为高级定时器,TI M2、TI M3和TIM4为通用定时器。通用定时器由一个16位自动装载计数器构成,该计数器可以通过可编程预分频器进行驱动。通用定时器可设置成16位向上、向下、中心3种自动装载的计数模式。通用定时器最高可以配置72MHz的系统时钟,每个通用定时器有4个16位高精度的捕获/比较通道,可以配置输出6路互补的PWM脉冲。

该控制系统采用向上计数的PWM模式脉冲驱动电机。脉冲宽度调制是一种对脉冲信号的电平宽度进行数字编码的方法。通过高精度定时器的应用,脉冲周期中的高电平和低电平的持续时间皆可由基础高精度定时器的是高频率的整数倍数表示出来。在确定输出电压的条件下,单段完整的PWM脉冲信号包含3个参数: 脉冲频率、脉冲占空比、脉冲个数。前2个参数决定脉冲的形状,后1个参数确定脉冲维持的时间。PWM产生部分程序流程图如图4所示。
 

图4 脉冲产生流程图


3.4.1 脉冲信号的端口配置

脉冲信号的端口配置包括3路定时器PWM的输出、3路使能信号,3路方向信号,定时器的PWM脉冲信号的输出口配置成复用推挽输出模式,方向信号和能使信号的输出口配置成推挽输出模式,而编码器的捕获输入口配置成浮空输入模式。GPIO根据连接速度的需要可以配置成2MHz、10MHz和50MHz3种类型。

3.4.2 脉冲频率和占空比的设置

在STM32控制芯片中,与定时器相关的寄存器有计数器寄存器(TMCNT)、预分频器寄存器(TMPSC)、捕获/比较寄存器(TMCCR)、自动装载寄存器(TMARR)。要产生指定参数的PWM脉冲, 主要就是对这些寄存器进行配置。下面介绍PWM信号配置步骤:

(1) 基频的设置。在STM32中TIM1高级定时器的时钟基频由ABP1桥时钟确定,而通用定时器的时钟基频由ABP2桥时钟确定。在系统模块中ABP1桥和ABP2桥时钟都配置成最高的72MHz系统时钟。由于16位的定时器表示的脉冲频率范围有限,为了扩大其输出脉冲的频率范围,需要通过设置预分频器寄存器,降低输入时的频率,配置成72MHz/TMPSC的基频。这样设置后,计数器寄存器和自动装载寄存器皆以分频后的基频为单位进行比较和计数。

(2) 基频的设置。在向上计数模式中,计数器寄存器从0开始计数到自动装载寄存器设置的值,然后重新从0开始计数同时产生一个计数器溢出中断。通过设置自动装载寄存器,调整溢出中断产生的时间,溢出中断产生后,系统会自动实现一次电平转换,开启下一个脉冲周期。因此由72MHz/TMARR可以确定了PWM信号的频率。

(3) 占空比的设置。在计数器寄存器从0增加计数到自动装置寄存器设置值的过中,可以通过设置比较寄存器,改变比较寄存器与计数寄存器之间的大小关系, 实现一次电平跳变,其中因此通过为了扩大可以产生的脉冲范围,可能需要对72MHz的系统时钟进行预分频。所以实际程序中先需要判断是否需要预分频,如若需要配置,那么还需计算最小的预分频系数。

3.4.3 脉冲计数

STM32可以直接设置 PWM脉冲信号的周期和占空比,确定脉冲信号的形状,但需要通过对脉冲计数来确定发送脉冲个数,决定定时器的起停。在生成PWM过程中,当计数寄存器当前数值大于比较寄存器设置值时,将产生比较中断。当计数寄存器值增加到自动装载寄存器设置值时,将产生溢出中断,2个中断皆采用边沿触发,比较中断将在下降沿触发,而溢出中断将在上升沿触发,在中断触发的时刻即可实现脉冲的计数。

4 结束语

本文应用STM32建立了伺服压力机的控制系统,

并提出了伺压力机控制系统的实现模式。控制滑块实现任意的速率和运动曲线,提高材料可成形性,降低噪音,节约能源。从建立的伺服压力机控制系统中可以看出完善伺服电机的控制、计算能量的极小化、获得精确的冲压能量是有待进一步研究的问题。

关键字:STM32  伺服压力机  控制系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488225.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于STM32的家庭服务机器人系统工作原理及设计
下一篇:STM32的串口中断配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S库文件判断指定IO输入引脚电平GPIO_ReadInputPin有问题
/**  * @brief  Reads the specified GPIO input data pin.  * @param  GPIOx : Select the GPIO peripheral number (x = A to I).  * @param  GPIO_Pin : Specifies the pin number.  * @retval BitStatus : GPIO input pin status.  */BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_Ty
发表于 2020-02-08
STM8 GPIO输入输出模式
悬浮输入悬浮输入,也叫浮空输入,顾名思义,即引脚悬空。这种方式的输入阻抗很高。当悬浮输入的引脚上加上信号时,单片机所得到的信号并不确定是高电平或是低电平,是一个不确定的信号。悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。上拉输入上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同。上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低。推挽输出推挽输出(Push-pull output),也称为互补输出,推拉式输出。推挽输出模式导通损耗小,效率高。在此模式下,N-MOS、P-MO
发表于 2020-02-08
STM8 GPIO输入输出模式
STM8L的USART1串口通信详解 含例程
STM8L除了可以进行串口通信,还可支持红外通信,智能卡协议,这些功能后续会开发,发布程序源码。STM8L还可以使用DMA缓存数据,减少CPU负担,为了简单起见,本文没有用到DMA功能。只需要简单的配置发送的字长度,停止位数,波特率,打开发送接收,就可以进行串口数据收发。下图为串口发送数据流程。对于串口发送数据,需要注意的是,打开发送后,数据发送完成,如果不关闭中断,程序会一直进入中断。所以在确保数据发送完成后,需关闭中断,退出发送数据。本文通过周期性(500ms)的向上位机发送一组数据,来演示STM8L的串口通信。串口接收部分程序也已经调试好,只需把while循环中的程序注释掉,设置断点,查看上位机发送来的数据即可
发表于 2020-02-08
使用STM8S105K4T6C 模数转换器的12通道
分享今天遇到的一个stm8s模数转换的小问题~~~这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。stm8s105k4t6c的管脚图其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):[mw_shl_code=c,true]/*---------------------------------包含头文件---------------------------------*/#include "adc.h" #define        ADC     
发表于 2020-02-08
stm8——LED流水灯实现
最近接触并学习了一款STM8系列的芯片。以前学习了的ARM9+Linux后,再来学习单片机就感到上手很快了。 芯片基本信息:Type:STM8L151G68-bit ultralow power MCU, up to 32 KB Flash, 1 KB Data EEPROM RTC, LCD, timers, USART, I2C, SPI, ADC, DAC, comparators具体可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS
发表于 2020-02-08
MCU程序设计之STM8S的optionbytes
今天使用STM8S在程序中修改optionbyte遇到问题一直读取为0,不能进入设置流程,之前的程序今天重新修改东西,使用新的片子,原来程序如下:  AFR_TEMP = (uint16_t)((uint16_t)0x01 << 8);  AFR_TEMP = AFR_TEMP | (uint16_t)0xFE;  AFR_TEMP = (AFR_TEMP >> 8);之所以直接赋值而不调用函数,是因为程序代码空间有限,使用函数调用方法修改没有问题,如下:  AFR_TEMP = FLASH_ReadOptionByte(0X4803);  AFR_TEMP
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved