×
单片机 > 单片机程序设计 > 详情

stm32-A4988驱动步进电机

发布时间:2020-08-31 发布时间:
|

步进电机,不多做解释,百度一大堆,虽然写的都一样。


1.步进电机用的2相四线,下面是某淘宝图片。

连线根据上面一个没有什么问题,下面直接上代码吧。stm32 通过tim3 ch1输出pwm,也就是PA6


void PWM1_Init()

{

  GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);  //使能GPIO外设时钟使能

 

 

//设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; //TIM_CH1

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

 

TIM_TimeBaseStructure.TIM_Period = 999; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值      

TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值  不分频

TIM_TimeBaseStructure.TIM_ClockDivision =0; //设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//TIM3通道一

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OCInitStructure.TIM_Pulse = 60;  /*占空长度 0 – 周期(max)*/

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

 

TIM_CtrlPWMOutputs(TIM3,ENABLE);        //MOE 主输出使能        

TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器

TIM_Cmd(TIM3, ENABLE);  //使能TIM1

}

 

void set_freq(u16 freq)

{

TIM3->ARR=1000000/freq; //设频率

TIM3->CCR1=1000000/freq/2;   //设占空比 50%

}

初始化就不介绍了,就是设置成不分频,计数频率最大为1M,


set_freq函数就是设置频率,范围1-1000000对应1Hz-1MHz,这里是理论值,实际上我的步进电机2KHz好像就跑不起来了。


所以我认为1-2000的就够了,注意电机刚起的时不能太高的频率,一般低于500Hz没有问题。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式