stm32-A4988驱动步进电机

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

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

2.驱动器是A4988模块,据说是3d打印机专用。

灰色的脚可以悬空,也可以用上。

ENABLE    使能        1停止

STEP         pwm(50%)        控制速度   (频率范围:我试了下大概1Hz-1KHz都可以跑的,当然频率越慢,电机相当于静止状态)

DIR             控制方向

2B    ->    B+     (这里网上没怎么说清楚,只说了什么红绿蓝,鬼知道?)

1B    ->    B-

2A    ->    A+

1A    ->    A-

基本重要的就是这些,分步控制就是MS1 MS2 MS3,看后面。接线参考下面。

连线根据上面一个没有什么问题,下面直接上代码吧。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没有问题。

STM32F103C8T6是一款非常常用的Cortex-M3内核的微控制器,而A4988是一款常用的步进电机驱动芯片,两者可以结合使用来驱动42步进电机STM32F103C8T6具有丰富的外设,适合用于控制步进电机。作为一个Cortex-M3内核的微控制器,它具有高性能和低功耗的特点。它提供了足够的GPIO引脚用于与A4988进行通讯,同时也能够通过SPI、I2C以及USART等接口与其他设备进行通信。 A4988是一款单片MOSFET式高流细分步进电机驱动器。它可以通过3级高效的电流控制来实现细分,从而提高步进电机的精度。此外,它还具有过温保护、过流保护和欠压锁定等功能,确保安全稳定地驱动步进电机。 通过将STM32F103C8T6与A4988连接,我们可以通过STM32的GPIO控制A4988的引脚,从而实现对步进电机的控制。常规的接线方式是将STM32的GPIO与A4988的STEP、DIR和EN引脚连接起来,STEP引脚用于控制步进电机的步进脉冲,DIR引脚用于设置步进电机的方向,EN引脚用于使能或禁用A4988驱动器。通过控制这些引脚,我们可以控制步进电机的转动速度和方向。 在编程方面,我们需要使用STM32的开发环境,如Keil或CubeMX,来编写控制步进电机代码。编写代码时,我们可以利用STM32的GPIO库函数或底层寄存器操作来控制对应的引脚状态。我们还可以通过调整A4988的细分设置来实现不同的旋转精度。 综上所述,通过将STM32F103C8T6与A4988步进电机驱动器连接,我们可以利用STM32的GPIO控制塑电机的转速和方向,实现对42步进电机的精确控制。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值