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

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-861649.html

到了这里,关于STM32控制四个步进电机(包含运行程序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用STM32定时器中断产生PWM控制步进电机

    控制步进电机可以使用PWM、定时器中断、延时,这里用的就是 定时器中断来让它转动。 板子用的是正点原子的STM32F103 mini板,驱动器是DM420(DM420驱动器资料),用开关电源供电,电机就是普通的42步进电机,步距角为1.8°,虽然按照图片来看它是个蠕动泵。如下图 PUL+——PB0,

    2023年04月09日
    浏览(15)
  • 【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)

    参考文章与课程:   【视频课程】步进电机基础原理和应用——程子华主讲   【视频课程】电机系列教学视频(基于STM32硬件)——野火   【霄耀在努力】STM32驱动步进电机(原理、程序、解决电机只震动不转动问题)   步进控制系统由以下三个部分组成: 控制器

    2023年04月09日
    浏览(11)
  • AS5600步进电机编码器(原理图+pcb+stm32控制代码)

    AS5600是一个易于编程的磁性旋转位置传感器,具有高分辨率的12位模拟或PWM输出。这种非接触式系统测量一个直径磁化的轴上磁铁的绝对角度。 引脚如下图 他有两种供电模式:5V和3.3V 我们为了和stm32F103C8T6单片机的电压一致,也使用3.3V供电,然后开始画PCB。 使用嘉立创EDA画

    2024年02月03日
    浏览(6)
  • 【STM32】使用HAL库对ULN2003控制28BYJ-48步进电机

    步进电机是将电脉冲信号转变为角位移或线位移,通过控制施加在电机线圈上的电脉冲顺序、频率和数量,可以控制步进电机的转向、速度和旋转角度。 配合以直线运动执行机构(螺纹丝杆)或齿轮箱装置,更可以实现更加复杂、精密的线性运动控制要求。 在非超载的情况下,

    2024年02月16日
    浏览(10)
  • 毕业设计——基于STM32的智能家具系统(语音识别控制、步进电机、舵机)

    智能家具系统分为两个不同版本系列: ①系列一:手机app远程控制、远程检测温湿度显示在app,(云平台)!!!!                   https://blog.csdn.net/m0_59113542/article/details/123737710 ②系列二:语音识别控制-------本文章 硬件采购链接: 步进电机及相关驱动 ULN2003步进电机驱动

    2024年02月05日
    浏览(15)
  • stm32使用TB6600驱动器控制42BYGH型步进电机

    stm32使用TB6600驱动器控制42BYGH型步进电机 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 24V电源就是通过电路控制开关进行高速的导通于截至,将直流电转化为高频率的交流电提供给变压

    2024年02月11日
    浏览(11)
  • 【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

    这两天在调步进电机,希望是使得步进电机每次都达到期望的高度。在查了一天的资料,发现大部分上传的资料都是使用CubeMX生成的,可复制性很高,但未免有失可读性,故上传我的心得经验。 本来原子哥的例程里有整合度很高的,已经封装好的精确控制步进电机前进距离的

    2024年02月08日
    浏览(20)
  • stm32F103单片机pwm控制伺服驱动器进而控制步进电机

    1.需要一台步进电机,私服驱动器,stm32单片机;先按照说明文档,连接好硬件相关线路,对应好sign+,sign-,puls+,puls-线路,其中sign只是个io口拉高拉低操作,puls是pwm波形输出口,虽然有两根线,但只是需要控制一个IO口输出波形即可; 采用主从模式,TIM1为主定时器,tim3未从定

    2024年02月04日
    浏览(9)
  • 用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度

    在我们平时做一些小项目的时候,需要用到步进电机驱动某一部件转动某一固定角度或者是走过固定长度。 比如自制一个具有扫风功能的小风扇,由于风扇自身尺寸偏小,使用如图1所示传统的复杂机械结还构去实现扫风功能偏难,反而会影响风扇的运行效果和产生噪音。 图

    2023年04月19日
    浏览(10)
  • STM32控制步进电机:工作原理及库函数(标准库) / HAL库控制程序(不定期更新)

    要控制步进电机,首先要明白步进电机的基本工作原理。 举个例子。如下图所示,通过给1绕组通电使其保持平衡,定义一个初始位置,再通过给2绕组通电,使其产生向里的磁场,使中间的转子产生偏转,最终达到平衡,即旋转了90°。 目前市面上最常用的步进电机为混合式

    2024年02月12日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包