最近研究了四相五线步进电机,在这里记录一下,如有错误,欢迎指正。
1)步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机
2)步进电机是改变频率调速。
3)步距角 = 360/运行的拍数/转子齿数
4)针对电机只震动而不转的原因:
1、接线错误
2、程序给的频率太快电机反应不过来,可以给一个较慢的频率启动电机,在通过修改频率的方法加快频率。
3、负载过重
5) 启动频率
步进电机有一个启动频率,当大于这个频率的时候电机无法启动。
6)减速步进电机
电机参数表中有个减速比,1:64。当步进电机在8拍模式下,转一圈需要64个节拍,实际看电机参数中的步距角来算转一圈的拍数。那么这个减速比的意思的就是,当转子转64拍的时候输出轴才转一拍的角度,那么实际转一圈的拍数就是 64*64 = 4096拍。
根据这些条件就可以任意的控制电机转动的角度和圈数了。 eg : 使电机转动5圈,那么所需要的拍数就是 5*4096了,可以根据这个参数条件去判断。 使电机转动270度 则可以算出:4096/360*270 = 3072,这就是转动270度所需要的拍数。
7) 步进电机调速
因为步进电机的转速与脉冲频率成正比的,在用定时器的情况下,我们可以利用TIM_SetAutoreload()来修改ARR的值,从而实现改变转速的效果。这里建议用定时器来实现步进电机的运作,当步进电机运行的时候用延时函数的话会影响其他功能的正常使用。
8)误差
当我们利用4096这个拍数来执行电机,会有相应的误差。当运行一百圈的时候会出现半圈的误差,我们是根据减速比1:64来计算出4096这个拍数的,而这个减速比是不准确的,实测的减速比是(32/8)*(22/11)*(26/9)* (31/10)约等于 63.684,那么利用这个算出的拍数是4076了,因为上面的数据记过是约等于出来的,实际的误差大约是0.000056,即转一万圈才会出现半圈的误差,已经可以忽略不记了。
TIM.h文件
#ifndef __TIMER__H
#define __TIMER__H
#include "sys.h"
void TIM3_Init();
#endif
TIM.c文件
#include "timer.h"
#include "motor.h"
void TIM3_Init()
{
NVIC_InitTypeDef NVIC_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct