STM32控制四个步进电机(包含运行程序)

软件:keil 5(其他版本也ok)

硬件:步进电机(我用的是42)×4;单片机开发板(本例使用STM32F407ZGT6);电机驱动器×4;外部按键;杜邦线。

实验效果:

四个步进电机对应四个外部按键,按下对应的外部按键选择需要控制的电机。

在开发板上按下KEYO,步进电机以500HZ的频率顺时针转动200个脉冲的角度(相对定位);

按下KEY1,步进电机以500H的频率逆时针转动400个脉冲的角度(相对定位);

按下KEY UP,步进电机以500HZ的频率回到绝对原点(绝对定位);

同时DS1以1s的周期闪烁,提示代码正在运行。

直接上代码:

主函数:

int main(void)
{    

	Stm32_Clock_Init(336,8,2,7);//ÉèÖÃʱÖÓ,168Mhz 
	delay_init(168);			//ÑÓʱ³õʼ»¯  
	uart_init(84,115200);		//³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200 
	usmart_dev.init(84); 		//³õʼ»¯USMART		
	LED_Init();					//³õʼ»¯LED
	KEY_Init();					//°´¼ü³õʼ»¯
	Driver_Init();				//Çý¶¯Æ÷³õʼ»¯
	TIM8_OPM_RCR_Init(999,168-1); //1MHz¼ÆÊýƵÂÊ  µ¥Âö³å+Öظ´¼ÆÊýģʽ
	while(1) 
	{	
			u8 i;
	u8 keyval;
		
		keyval=KEY_Scan(0);
		
		if(keyval==KEY3_PRES)       
		{
			DRIVER_OE1=0;
			DRIVER_OE2=1;
			DRIVER_OE3=1;
			DRIVER_OE4=1;
		}
//		
		if(keyval==KEY4_PRES)       
		{
			DRIVER_OE1=1;
			DRIVER_OE2=0;
			DRIVER_OE3=1;
			DRIVER_OE4=1;
		}
			
			
			
		
		
			if(keyval==KEY5_PRES)       
		{
			DRIVER_OE1=1;
			DRIVER_OE2=1;
			DRIVER_OE3=0;
			DRIVER_OE4=1;
		}
		
		
				if(keyval==KEY6_PRES)       
		{
			DRIVER_OE1=1;
			DRIVER_OE2=1;
			DRIVER_OE3=1;
			DRIVER_OE4=0;
		}
		
		

		
		
		if(keyval==WKUP_PRES)
		{
			Locate_Abs(0,500);//°´ÏÂWKUP£¬»ØÁãµã
		}else if(keyval==KEY0_PRES)
		{
			Locate_Rle(200,500,CW);//°´ÏÂKEY0£¬ÒÔ500HzµÄƵÂÊ Ë³Ê±Õë·¢200Âö³å
		}else if(keyval==KEY1_PRES)
		{
			Locate_Rle(400,500,CCW);//°´ÏÂKEY1£¬ÒÔ500HzµÄƵÂÊ ÄæʱÕë·¢400Âö³å
		}			
		delay_ms(10);
		i++;
		if(i==50)	
		{	
			i=0;
			LED1=!LED1;
		}				
	}
}

按键define:

#define KEY6 		PFin(5)		//PF5      ZJ
#define KEY5		PFin(4)   //PF4  		 ZJ
#define KEY4 		PFin(3)		//PF3      ZJ
#define KEY3 		PFin(2)		//PF2      ZJ


#define KEY0 		PEin(4)   	//PE4
#define KEY1 		PEin(3)		//PE3 
#define KEY2 		PEin(2)		//P32
#define WK_UP 	PAin(0)		//PA0 

///

#define KEY3_PRES 	5	//KEY0°´ÏÂ     ZJ
#define KEY4_PRES	6	//KEY1°´ÏÂ        ZJ
#define KEY5_PRES	7	//KEY2°´ÏÂ       ZJ
#define KEY6_PRES   8	//KEY_UP°´ÏÂ(¼´WK_UP)    ZJ
//#define KEY7_PRES 	5	//KEY0°´ÏÂ     ZJ
//#define KEY8_PRES	6	//KEY1°´ÏÂ        ZJ



#define KEY0_PRES 	1	//KEY0°´ÏÂ
#define KEY1_PRES	2	//KEY1°´ÏÂ
#define KEY2_PRES	3	//KEY2°´ÏÂ
#define WKUP_PRES   4	//KEY_UP°´ÏÂ(¼´WK_UP)

void KEY_Init(void);	//IO³õʼ»¯
u8 KEY_Scan(u8);  		//°´¼üɨÃ躯Êý				

IO口define:

#define DRIVER_DIR   PFout(15) // Ðýת·½Ïò


//#define 		DRIVER_OE1_H  GPIO_SetBits(GPIOE,PIN6);
//#define 		DRIVER_OE1_L  GPIO_ResetBits(GPIOE,PIN6);
//#define 		DRIVER_OE2_H  GPIO_SetBits(GPIOE,PIN1);
//#define 		DRIVER_OE2_L  GPIO_ResetBits(GPIOE,PIN2);

#define 		DRIVER_OE1 PFout(6)               //zj
#define 		DRIVER_OE2 PFout(1)               //zj
#define 		DRIVER_OE3 PFout(14)               //zj
#define 		DRIVER_OE4 PFout(13)               //zj
//#define DRIVER_OE    PEout(6) // ʹÄܽŠµÍµçƽÓÐЧ 

#define RCR_VAL    255  //ÿ¼ÆÊý£¨RCR_VAL+1£©´Î£¬ÖжÏÒ»´Î£¬Õâ¸öÖµ£¨0~255£©ÉèÖôóһЩ¿ÉÒÔ½µµÍÖжÏƵÂÊ

typedef enum
{
	CW = 1,//¸ßµçƽ˳ʱÕë
	CCW = 0,//µÍµçƽÄæʱÕë
}DIR_Type;//ÔËÐз½Ïò

extern long target_pos;//ÓзûºÅ·½Ïò
extern long current_pos;//ÓзûºÅ·½Ïò

void Driver_Init(void);//Çý¶¯Æ÷³õʼ»¯
void TIM8_OPM_RCR_Init(u16 arr,u16 psc);//TIM8_CH2 µ¥Âö³åÊä³ö+Öظ´¼ÆÊý¹¦Äܳõʼ»¯
void TIM8_Startup(u32 frequency);   //Æô¶¯¶¨Ê±Æ÷8
void Locate_Rle(long num,u32 frequency,DIR_Type dir); //Ïà¶Ô¶¨Î»º¯Êý
void Locate_Abs(long num,u32 frequency);//¾ø¶Ô¶¨Î»º¯Êý

#endif

电机对应外部按键key3,key4,key5,key6。

需要几个电机大家可以对应着代码改动,我这边实现了两个的和四个的。

代码包我会上传供大家使用,感谢!

链接:https://pan.baidu.com/s/1y08H-W0AWwxMo8IgdEuRKg?pwd=cgr7 
提取码:cgr7

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
CSDN使用STM32控制多个步进电机的方式有很多种,下面是其中一种简单的实现步骤。 首先,需要准备一块STM32的开发板和多个步进电机,然后进行硬件连接。将每个步进电机控制引脚连接到STM32开发板的GPIO引脚上,同时连接合适的电源和地线。确保每个步进电机有足够的电源供应。 接下来,在STM32的开发环境中创建一个新的项目,并编写代码进行控制。需要使用步进电机的驱动库,如使用HAL库进行编程。在代码中初始化GPIO引脚,设置引脚为输出模式,并配置每个步进电机的引脚。 然后,根据具体的应用需求编写步进电机控制算法。可以使用不同的控制方式,如全步进或半步进模式。根据转动方向和步长,控制相应的GPIO引脚输出高电平或低电平信号,以实现步进电机的转动。 在代码中还可以添加一些逻辑控制,如根据传感器的信号进行转动控制或根据时间进行定时转动。可以根据具体的应用需求进行相应的代码修改。 最后,将编写好的代码烧录到STM32开发板上,并连接电源和步进电机。启动开发板,通过控制代码中的相应功能实现对多个步进电机控制。 总之,使用STM32控制多个步进电机的过程主要包括硬件连接、编写步进电机控制代码和烧录到开发板上三个步骤。根据具体应用需求,可以进行相应的代码修改和调试,最终实现对多个步进电机的精确控制。这种方式在工业自动化、机器人等领域有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值