用STM32C8T6驱动DM542来控制步进电机正反转

本文介绍了使用STM32控制步进电机转动的方法。硬件方面,使用c8t6、dm542驱动和步进电机模组,建议用220转24电源供电,采用共阴极接法,且单片机要和驱动共地。代码部分,包括电机IO口使能、定时器3初始化及主函数调用,还提供了工程链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天到了一个模组,老师喊把步进电机先转起来,之前也没用过步进电机,只用过L298N驱动过直流电机控制它的正反转。

1.硬件部分

这是我的c8t6

这是dm542驱动

这是购买的模组,实际上就是一个步进电机

  要让步进电机转起来,首先接线很重要,我用的是24V电池驱动的,有些问题,建议大家用220转24电源进行供电

驱动分为六个接口,我采用的是共阴极接法,PUL是用来接收脉冲的,DIR是用来控制电机转动的方向,ENA是使能,可以选择不接。

PUL+(接PWM脉冲,这里是我的TIM3,PB0口)

PUL-(接地)

DIR+(拉高低电平就可以了,我用的是PB1)

DIR-(接地)

ENA+

ENA-

注意,单片机还要和驱动共地才行,不然是没有反应的。

 2.代码部分

这是电机IO口的使能部分,使能PB0 PB1,PB0是PWM脉冲输出口,通过调整PB1来使电机正反转

void Motor_X(void)
 {
  GPIO_InitTypeDef GPIO_InitStructure;  
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 }

 
void Motor_X_ZHENG(void)           //zuo正转
{
 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}


void Motor_X_FAN(void)           //zuo正转
{
 GPIO_SetBits(GPIOB,GPIO_Pin_1);
}

接下来是对定时器3的初始化使能IO口,使能PB0就可以了,从而输出PWM脉冲,用哪个口使能哪个口

void TIM3_PWM_Init(u16 arr,u16 psc)///pwm
{
	GPIO_InitTypeDef GPIO_InitStrue;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_0;//PB0->CH3  PB1->CH4 TIM3 
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStrue);
	
	TIM_TimeBaseStructure.TIM_Period = arr; 
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
	
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low ; 
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OC3Init(TIM3,&TIM_OCInitStructure);
	TIM_OC4Init(TIM3,&TIM_OCInitStructure);
	
	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
	TIM_Cmd(TIM3,ENABLE);
}

然后是主函数部分,直接调用就可以了

 int main(void)
{	 	
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先
		delay_init();//延时函数初始化	
//	uart_init(115200);//串口1 ,连接蓝牙传输数据
//	PCA9685_Init(50,72);
//	OLED_Init();//oled显示屏初始化
//  OLED_ColorTurn(0); //0正常显示,1 反色显示
//  OLED_DisplayTurn(0); //屏幕旋转180度调整
		TIM3_PWM_Init(999,71);//定时器3初始化
		Motor_X();
	 while(1)
	 {		    
//		 	sprintf((char *)string,"Z:%d",zuo);//显示接收到的数据,模式1,车辆行动
//		  OLED_ShowString(10,5,string,8,1);
//		  OLED_Refresh();//oled刷新
				delay_ms(10);//去抖动
//			Motor_X_ZHENG();
		 		Motor_X_FAN();
				TIM_SetCompare3(TIM3,400);


	 }
	}		

整个工程的链接在此处,需要的自行提取:

链接:https://pan.baidu.com/s/1rqAzxiLg9Kh3zopuWmpXYA 
提取码:xgdr

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dandelion701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值