APP下载

基于STM32步进电机细分控制的误差时间研究

2018-11-02符涛涛王法明

关键词:差值个数脉冲

符涛涛, 王法明

(中国电子科技集团第四十一研究所, 安徽 蚌埠 233010)

某机器人控制项目中要求高精度控制步进电机运行,以此搭建实验平台,采用STM32F407作为控制器[1][2],通过自行设计电机运动轨迹,研究对电机运动轨迹细分后的误差时间进而确保高精度控制步进电机运行。众所周知,设计成型的步进电机,其结构本身就决定了其运行距离精度高低,因此,在此基础上软件的设计好坏就进一步决定了其是否能运行在较高的精度上,对步进电机的控制中,频率决定了其运行的速度,与在该速度下的运行时间共同决定了其运行的距离或转动的步数,在对步进电机运行距离要求达到较高精度的情况下,某一频率下步进电机的运行时间就具有非常重要的意义,这里假定设计的频率是理想的,因此,每个设计的频率对应的运行时间间隔与理想时间间隔之间的误差越小,步进电机运行距离精度越高。

一、控制原理

STM32F407作为控制器,内部资源丰富,本设计中负责构造步进电机运动轨迹曲线,并将其离散化,得到一系列离散频率,最终以PWM(Pulse Width Modulation,脉宽调制)脉冲的形式输出控制步进电机按照设计的运动轨迹运行。

PWM脉冲输出主要使用到STM32F407内部功能模块DMA(Direct Memory Access,直接内存存取)和 TIM (定时器)[3][4],其中 DMA包含 DMA1和DMA2,本设计使用的是DMA1,TIM使用的是TIM2和TIM3,采用闭环控制 TIM2和 TIM3,TIM2对TIM3输出的PWM脉冲信号计数,当TIM2内部计数器计数到和TIM2的周期数一样时产生更新事件,触发DMA1实时更改TIM3的频率和TIM2的周期,最终输出可变周期和可变频率的PWM脉冲信号。图1为控制原理框图。

图1 控制原理图

TIM3_Prescaler Table和TIM2_Period Table是在软件中预定义的两数组,容量均为n,分别存放着TIM2的周期和TIM3的预分频,TIM2的周期和TIM3的预分频是由步进电机运动轨迹曲线f(n)计算推导得到,该数组为可变数组,因此可以根据所设计运动轨迹曲线f(n)实时更改这两个数组的内容。

TIM3为16位定时器,TIM2为32位定时器,TIM2和TIM3设置互为主从模式,在内部进行触发连接,具体的连接方式见表1。

表1 TIM2和TIM3内部级联配置

当TIM3设置为主模式,TIM2设置为从模式时,TIM2通过内部ITR2连接到TIM3,TIM3的主模式的功能是将更新事件作为输出触发(TRGO),即TIM3每产生一个周期的PWM脉冲都对应产生一次更新事件,对于TIM3来说每次更新事件都会产生一次触发信号(TRGO)通过ITR2输出到TIM2,TIM2的从模式使用的是外部时钟1模式(SlaveMode_External1),将TIM3的触发输出(TRGO)作为TIM2的时钟输入,即TIM3每发出一个周期的PWM脉冲,TIM3就会伴随着产生一次更新事件,TIM2内部计数器便会计数一次,因此只要实时更改TIM2的周期就可以达到对TIM3发出的PWM脉冲进行精确计数。在此过程中,TIM3会频繁的产生更新事件,该更新事件未设置产生DMA请求,因此更新事件不会触发DMA1。

当TIM2设置为主模式,TIM3设置为从模式时,TIM3通过内部ITR1连接到TIM2,TIM2主模式使用的功能类似与TIM3主模式的功能,都是采用更新事件作为触发输出(TRGO),TIM2的时钟源来源于TIM3,周期可变,TIM2内部计数器采用的是递增计数,当计数器发生上溢时产生一次相对于TIM2的更新事件,对应产生一次触发输出(TRGO),通过ITR1连接到TIM3,对于TIM3来说发生了一次触发输入(TRGI),TIM3从模式使用的是复位模式,即当TIM3检测到有效触发输入(TRGI)上升沿时,TIM3重新初始化内部计数器并产生一次更新事件,TIM2和TIM3均产生了一次更新事件,分别向各自的DMA1发出DMA请求,此时,DMA1按照预设的方式将数组TIM2_Period Table中存放的TIM2周期数据传送到TIM2内部的自动重载寄存器中,将数组TIM3_Prescaler Table中存放的TIM3预分频数据传送到TIM3内部的预分频器中,设置两个定时器在发生更新事件时立即更新寄存器,这样每次更新事件发生时都会实时更改TIM2的周期和TIM3的预分频,当将两数组TIM3_Prescaler Table和TIM2_Period Table中的数据都传送完成后,系统进入TIM2的更新中断中关闭TIM2和TIM3,由此实现可变周期和可变频率PWM脉冲的输出。在此过程中,TIM2和TIM3均产生了更新事件,并设置了由更新事件触发DMA,以此实时更新TIM2的周期和TIM3的预分频。

脉冲/方向的控制方式控制步进电机运行,这种控制方式包含两个信息,一是脉冲的频率,二是脉冲的个数。脉冲的频率是通过改变STM32F407内部定时器预分频间接得到的。本文拟构造步进电机运动轨迹曲线为正弦[5][6]函数频率曲线f(n)并进行细分n等份,得到了n个离散的频率点,离散化的每个频率点(简称理想频率)为浮点型数据,但STM32F407内部寄存器为整数型,因此将其整型化后反向计算出预分频(简称理想预分频),再次整型化后才能装载到STM32F407预分频器中,时钟频率与装载到预分频器中的预分频的比值就是最终输出的频率(简称输出频率)如图2,在这个过程中两次进行了非整数型到整数型的变换,因此输出频率与理想频率之间产生了误差1。理想脉冲个数是理想频率与该频率下步进电机运动的有效时间间隔△t的乘积,然而理想频率为离散的浮点型数据,因此实际脉冲个数是对理想脉冲个数整型化后得到的,此刻产生了误差2,然后将得到的实际脉冲个数装载到定时器的自动重载寄存器中,与频率共同作用于步进电机。

图2 理想频率与输出频率、理想脉冲个数与实际脉冲个数的计算

二、误差分析

设置细分数n=100,构造正弦曲线作为步进电机运动轨迹曲线,当输出频率范围增大时,频率越高,曲线平滑度降低,即精度降低,如图3和图4比较了100-10KHz频率段和100-200KHz频率段曲线平滑度。

分析每组输出频率与理想频率,比较两者之间的差值变化,当频率范围较小时,两者之间差值较小,随着频率范围的增加,差值也随之增加,主要集中在高频区。图5-10比较了100-10kHz、100-20kHz、100-30kHz、100-50kHz、100-100kHz 和100-200kHz六个频率范围的输出频率与理想频率差值关系。

图3 100-10KHz频率段细分100等份

图4 100-200KHz频率段细分100等份

图5 100-10kHz输出频率与理想频率差值

图6 100-20kHz输出频率与理想频率差值

图7 100-30kHz输出频率与理想频率差值

图8 100-50kHz输出频率与理想频率差值

图9 100-100kHz输出频率与理想频率差值

图10 100-200kHz输出频率与理想频率差值

当选择细分数n=100时,设定电机运行总持续时间为2s,细分后的每个频率点作用的理想时间等于0.02s,由于实际脉冲个数不可能小于0,故为保证脉冲个数大于0,选择最小频率为100,由此计算出最少脉冲个数为2个,使用STM32F407内部TIM2和TIM3来产生可调频率可调脉冲数的PWM脉冲信号,其中TIM3输出PWM脉冲信号,TIM2用于对脉冲信号进行计数。因此TIM2决定了PWM的脉冲个数,由于TIM2内部自动重载寄存器为32bit,所以PWM的脉冲数可以设置足够大,TIM3内部预分频器和内部自动重载寄存器同为16bit,共同决定了最终PWM的工作频率,当输出PWM脉冲最小频率为100时,为保证TIM3的预分频足够大,最大只能设置65535,这里选择52500。对应TIM3内部重载寄存器固定设置为16,当PWM频率由低变高时,对应的预分频之间的跨度会越来越小,如图11所示,这是造成上述实际频率与理想频率误差增大的根源。假设定时器的预分频可以设置足够大最大为时钟频率84000000,定时器的自动重载寄存器便可以设置尽量小,最小为1,以此可以提高PWM频率变换的精度,预分频之间的跨度会增大,同样最大输出频率也会提高。然而STM32F407内部所有定时器,预分频都是16bit,因此硬件本身决定了预分频无法被设置足够大,但是可以通过增加细分数的方法缩小这种输出频率和理想频率之间的差值。这种方法同样带来了新的问题,细分数增加,每个离散频率点对应的有效作用时间间隔也同比例缩小,受到最小脉冲个数要大于1的限制,最小输出频率也会同比例增加,如果最小输出频率过大,对于电机则启动速度会很大。因此细分数目很重要,细分过多或过少都会对最终效果造成极大影响。

图11 六频率段计算的预分频值

电机运行总持续时间为2s,细分100等份后,实际脉冲个数与输出频率的比值实际上是单个频率作用的有效时间,理想状态下每个频率作用的有效时间均为2/100=0.02s,但是实际脉冲个数与理想脉冲个数之间存在误差,输出频率与理想频率之间也存在误差,故不同的频率与各自的脉冲个数作用的有效时间便不可能都是0.02s,均在0.02s附近波动,具体差异见图12,频率范围越大,差异越明显。

三、结果

图12 每个频率段对应的有效时间

理想情况下电机运行总持续时间为2s,由于实际输出频率和理想频率之间差值会随着选用频率范围的增大而增大,脉冲个数也同样存在着误差,因此电机实际运行总持续时间必定存在一定的误差,如图13所示,采用STM32F407作为主控制器,依次对频 率 100-10KHz、100-20KHz、100-30KHz、100-50KHz、100-100KHz和 100-200KHz细分 100 等份后控制电机运行,实验得到的实际总持续时间与理想总持续时间比较,误差在0.003s范围内,因此可以通过选用性能更加强劲的处理器来减小这种误差时间,进一步提高电机运动距离精度。

图13 六频率段直线电机实际运行总持续时间

猜你喜欢

差值个数脉冲
数字日照计和暗筒式日照计资料对比分析
怎样数出小正方体的个数
红细胞压积与白蛋白差值在继发性腹腔感染患者病程中的变化
脉冲工况氧气缓冲罐裂纹修复实践
怎样数出小木块的个数
最强大脑
怎样数出小正方体的个数
关注
小型化Ka波段65W脉冲功放模块
超音频复合脉冲GMAW电源设计