基于ARM控制器对齿轮减速同步电机的精确控制

2022-09-27 05:53田开坤
关键词:中断齿轮脉冲

李 敏,田开坤

(湖北师范大学 物理与电子科学学院,湖北 黄石 435002)

0 引言

直流电机是一种结构简单、转速高、响应快的电机,在生活中有着非常广泛的应用。但直流电机[1]力矩小、高转速导致的低精度等缺陷,使得它多用于民用领域。相对于传统的直流电机,齿轮减速同步电机[2]主要在普通电机上增加了减速箱,这样不仅降低了转速,还增加了扭力,使得电机在精度控制上能够更加精确。这一优势能够让齿轮减速电机成为工业或军工领域自动化机械设备不可或缺的动力传动设备,特别是智能家居、医疗器械、机器人、航模等领域。所以,对齿轮减速电机的控制[2]算法的研究是十分必要的。

1 齿轮减速电机工作原理

相对于传统电机,齿轮减速电机[3]主要是在普通电机的基础上,增加了减速箱,减速箱的减速原理是利用各级齿轮传动来达到降速的目的。齿轮减速机一般用于低转速大扭矩的传动设备,把电动机、内燃机等高速运转的动力设备,通过减速机的输入轴上齿数少的齿轮啮合输出轴上的大齿轮来达到减速的目的,减速电机上的大小齿轮的齿轮数之比,就是传动比。

2 控制方案选择

2.1 减速电机介绍

以伟盛的WS-32GX365OR减速电机为例,该电机有5个连接线:

红线——电源正极

黑线——电源负极

白线——正反转线

黄线——FG信号线(一圈6个信号)

蓝线——PWM脉宽调制线(频率为20~25kHz的PWM信号)

图1 伟盛齿轮速电机实物图

WS-32GX365OR电机主要通过调节输入给PWM脉宽调制线20~25kHz的PWM信号[4]的占空比,从而改变电机的做功时间,达到对电机速度的精准调节。占空比越大,电机转速越快,占空比越小,电机转速越慢。所以,对电机角度的控制,主要在于对电机转动速度的精准控制。

2.2 方案一:控制信号占空比以正弦信号调节

齿轮减速电机转动一定的角度,整个过程必然有加速、减速阶段,电机加速过程需要快,便于电机启动;高转速时间可控,减少惯性影响;减速过程尽量柔和,便于电机执行下个一动作。整个运动过程的较为符合正弦曲线。因此,方案一输入信号的控制过程是将PWM信号和时间形成曲线模拟成正弦曲线的过程。

2.3 方案二:控制信号的线性调节

相对于正弦曲线的调节,线性调节更为简单直接。设电机占空比的值为A,每一个PWM信号发送的时间为△t,在电机完成指定动作过程中,电机加速、匀速、减速需要的PWM[6]信号数分别为K1、K2、K3.共需要K个脉冲。则可以很容易地将电机的转动过程进行分解控制。函数图像如图2所示:

图2 电机转动过程控制函数图

加速阶段:加速度:a1=A/(K1*△t);

减速阶段:加速度:a2=A/(K3*△t);

通过调节K2更加灵活的调节电机控制信号高占空比带来的电机高速运转的时间,则电机转动的路程S=1/2*(K1*△t*A)+ (K2*△t*A)+ 1/2*(K3*△t*A)。可以达到对电机PWM的精准调节,从而精确地控制电机。

综合考虑,选择方案二。

3 具体软件实现

本设计选用了STM32F103ZET6单片机作为主控芯片,该芯片带4个片选静态储存器的控制器,多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。本设计软件程序主要让单片机PD13引脚产生20kHz的脉冲信号,通过程序调节脉冲信号的占空比,调节电机的转速,通过控制脉冲数,从而达到对电机角度的控制,再用PG14引脚控制电机转动的方向,控制功能框图如图3所示:

图3 控制功能框图

3.1 中断函数

如2.3节知,延时时间,也就是△t的准确性直接决定了电机转动角度是否精确。定时器中断相对于延时函数的优势在于,定时器中断能够保证△t的准确性,而延时函数在运行过程一旦产生其他中断,就不能保证△t为延时函数设定的时间,故本设计采用定时器中断对电机的控制函数进行处理,中断触发时间为1ms,其中配置中断定时器为TIM5,抢占优先级为0,响应优先级为1,具体实现代码如下:

void NVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

#ifdef VECT_TAB_RAM

//向量表基地址选择

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

//将0x20000000地址作为向量表基地址(RAM)

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

//将0x08000000地址作为向量表基地址(FLASH)

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

//设置中断组为2

NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;

//中断事件为TIM5

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

//抢占优先级0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

//响应优先级1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

//允许中断

NVIC_Init(&NVIC_InitStructure);

//根据指定参数初始化中断寄存

}

3.2 核心控制算法

由2.3节可知,齿轮减速电机转动角度的精确性由两点保证。一是每一个PWM信号产生相隔的时间△t;二是对每一个控制信号的占空比的控制。如图4所示,核心控制函数具体内容由定时器中断函数进行处理,充分保证了每一个△t的时间都是精准的。核心函数主要是对2.3节思想的具体的程序实现,通过核心控制函数来控制电机转动角度。

核心控制函数嵌套在定时器中断函数里面,若定时器中断产生,则运行控制函数,中断结束,运行主函数内容,如图4所示:

图4 控制函数设计流程图

下面是核心函数具体代码实现:

void Pwm_Set( uint16_t Time_Step,uint16_t Speed_Max ,uint16_t accelerator_step ,uint16_t uniform_step )

{

uint16_t Reducer_Step ,accelerator ,reducer; //设定减速脉冲数值、加速度、减速度

Reducer_Step =(Time_Step -accelerator_step -uniform_step);//计算减速步数

accelerator =(uint16_t ) (Speed_Max /accelerator_step); //计算加速度

reducer = (uint16_t)(Speed_Max /Reducer_Step); //计算减速度

if(step

{

Dutyfactor =Dutyfactor +accelerator;

if(Dutyfactor>=Speed_Max )

Dutyfactor =Speed_Max;

}

if((step>=accelerator_step)&&(step<=(accelerator_step+uniform_step))) //匀速

{

Dutyfactor = Speed_Max;

}

if((step >(accelerator_step +uniform_step)) &&(step <=Time_Step)) //减速

{

Dutyfactor=(Dutyfactor -reducer);

if(Dutyfactor<= 360)

Dutyfactor =0;

}

while(step >Time_Step) //当电机转动到指定位置,反向转动

{

step =0;

Dutyfactor =0;

direction++;

direction = (direction %2);

}

if(direction == 0)

GPIO_SetBits(GPIOG ,GPIO_Pin_14);

if(direction == 1)

GPIO_ResetBits(GPIOG ,GPIO_Pin_14);

}

Pwm_Set(uint16_t Time_Step,uint16_t Speed_Max ,uint16_t accelerator_step ,uint16_t uniform_step )函数为本设计算法的核心函数,Time_Step为设定完成动作所需要的的总的脉冲数,由上文2.3中可知,Time_Step相当于K,Speed_Max的值决定了电机最高转速,Speed_Max最小值为0,电机最高占空比为0,最大值为3 600,此时电机的占空比为1. accelerator_step为电机完成指定动作加速达到最大转速所需要的脉冲数,相当与2.3的K1, uniform_step为匀速转动的脉冲数,相当于2.3中的K2.

在设定好函数的基本参数后,需要对电机控制的脉冲减速步数、电机的加速度、减速度进行计算。减速脉冲步数K3=K-K1-K2;加速度accelerator=(Speed_Max/accelerator_step); 减速度reducer=(uint16_t)(Speed_Max /Reducer_Step); Dutyfactor值决定了电机输入信号的占空比。

计算完成后,程序分为3个阶段对电机进行控制。

加速阶段:在电机未达到最高速度时,Dutyfactor=Dutyfactor +accelerator;按照线性关系保持加速,达到或超过最大速度,保持设定最大速度。匀速阶段:保持最高速度转动,转动时间可由uniform_step值确定。减速阶段:Dutyfactor =(Dutyfactor-reducer);因为Dutyfactor的数据类型为无符号整型,所以防止数据小于0产生溢出,最小值不能为0,本设计采用的电机占空比小于10%时电机停止转动,故最小值设置为360.本设计动作为电机进行指定角度正反转,故写了while(step>Time_Step)条件下的内容。

Step数值的设定用于电机每产生一个PWM信号所间隔的时间,相当于2.3节的△t.Step数值的处理放在中断函数中,中断产生的时间为1ms.程序源码如下:

void TIM5_IRQHandler(void)

{

if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)

//判断中断标志位是否为1;为1则中断响应啦,0则没有

{

TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除TIMx的中断待处理位:TIM1 中断源

step++; //每进入一次中断,Step加一;

Pwm_Set(250 ,1000,100 ,50);

}

}

通过以上程序,只需改变Pwm_Set()函数里面的参数,就可以对用PWM信号控制的电机进行较为精准的动作控制。本设计调节的几个基本角度的参数如表1所示:

表1 调节电机角度参数图

4 总结与展望

本设计通过较为简单的线性算法思想,只需要调节函数基本参数,实现对电机的较为精确的角度控制,充分发挥齿轮减速电机大力矩和高集成度的优势,在单个电机动作的基础上,若增加通信接口,可以实现用户对多个电机的同时控制,有十分广阔的应用前景。

猜你喜欢
中断齿轮脉冲
脉冲离散Ginzburg-Landau方程组的统计解及其极限行为
东升齿轮
你找到齿轮了吗?
异性齿轮大赏
上下解反向的脉冲微分包含解的存在性
基于FPGA的中断控制器设计*
Linux中断线程化分析及中断延时测试
黄芩苷脉冲片的制备
跟踪导练(二)(5)
千里移防,卫勤保障不中断