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

        今天到了一个模组,老师喊把步进电机先转起来,之前也没用过步进电机,只用过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

  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
stm32c8t6是一款32位的单片机,可以用来控制步进电机的角度。 步进电机是一种精确控制转动角度的电机,通过控制电流脉冲的频率和方向来控制电机的转动。stm32c8t6作为控制器,可以通过编程来生成适当的脉冲信号来控制步进电机。 在使用stm32c8t6控制步进电机之前,首先需要了解步进电机的基本原理和参数。步进电机的转动角度与步角相关,一般有1.8度/步和0.9度/步两种步角;步进电机的转速与速度参数相关,通常用转/分钟(RPM)表示。 控制步进电机的角度可以通过改变电机脉冲信号的频率和步数来实现。步进电机的旋转角度与脉冲信号的脉冲数成线性关系,每收到一定数量的脉冲信号,电机就会转动一个步距角度。通过调整发送给步进电机脉冲信号的频率和步数,可以控制电机的旋转角度。 使用stm32c8t6控制步进电机的步骤如下: 1. 初始化stm32c8t6的GPIO引脚,并设置为输出模式。 2. 设置脉冲信号的频率和步数,可以通过编程设置。 3. 通过GPIO引脚发送脉冲信号,控制步进电机转动。根据设定的脉冲数和频率,发送适当的脉冲信号来实现控制角度的功能。 需要注意的是,stm32c8t6只是一个控制器,具体控制步进电机的功能需要通过编程来实现。可以根据具体的需求使用相应的开发工具和编程语言进行编写控制程序。 综上所述,通过使用stm32c8t6控制步进电机的角度,可以通过设置脉冲信号的频率和步数来控制电机的旋转角度,实现精确的控制
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dandelion701

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

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

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

打赏作者

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

抵扣说明:

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

余额充值