【STM32F1例程14】5V步进电机实验

实验说明

    这个实验呢算是也算是稍微稍微有点进阶的吧,但是毕竟是基础实验嘛,大家学习的速度肯定比我更新的速度快很多,还是简单介绍一下吧。  

    5V步进电机是一种常见的电机类型,它通过接收电子脉冲信号来控制转动的角度和速度,非常适合需要精确位置控制的应用。下面是关于5V步进电机的一些基本信息:

1.工作电压:正如名称所示,这种步进电机通常设计为在5伏特电压下工作。这意味着它可以直接由常见的USB端口或低压电源供电。

2.步进角度:步进电机可以将一个完整的360度旋转分成许多小的“步”,每接收一个脉冲信号就转动一个步距角。常见的步距角有1.8度(每步转动1/200圈)或0.9度(每步转动1/400圈),但具体步距角取决于电机型号。

3.控制方式:步进电机通过脉冲信号进行控制,每个脉冲信号使电机转动一个固定的角度。通过改变脉冲的频率,可以控制电机的转速;通过改变脉冲的数量,可以控制电机转动的角度。

4.驱动方式:步进电机需要一个驱动器来控制脉冲信号的发送。驱动器可以是简单的限流驱动,也可以是更复杂的如恒流斩波驱动,后者可以提供更平滑和有力的电机运行。

5.应用领域:由于其精确的位置控制能力,5V步进电机广泛应用于各种自动化设备、3D打印机、小型机器人、精密定位平台等领域。

6.扭矩和速度:5V步进电机的扭矩和速度相对较小,适合轻负载和低速应用。在需要较大扭矩或高速度的应用中,可能需要使用更高电压或更大尺寸的步进电机。

7.维护和寿命:步进电机通常具有较长的使用寿命,但其性能会受到驱动器质量、使用环境和操作方式的影响。

    关于本实验:

1.接线: 用 6 根杜邦线把开发板 5V 与模块+,开发板 GND 与模块-,开发板 PB0 脚与模块 IN1,开发板 PB1 脚与模块IN2,PB2 脚与模块 IN3,PB3 脚与模块 IN4 相连。

2.实验:用 Keil5 打开 5V 步进电机实验,并编译,通过 STLink 下载程序到板子,全速运行,可以看到步进电机先逆时钟转一圈不到,然后再顺时钟转回。

主要代码

    

#include "delay.h"
#include "sys.h"
#define uchar unsigned char
#define uint  unsigned int

uchar phasecw[4] ={GPIO_Pin_3,GPIO_Pin_2,GPIO_Pin_1,GPIO_Pin_0};//正转电机导通相序D-C-B-A
uchar phaseccw[4]={GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3};//反转电机导通相序A-B-C-D

//正转
void MotorCW(void)
{
 uchar i;
 for(i=0;i<4;i++)
  {

		GPIO_SetBits(GPIOB,phasecw[i]);//输出高
    delay_ms(5);//等待5ms
		GPIO_ResetBits(GPIOB,phasecw[i]);//输出低
  }
}
//反转
void MotorCCW(void)
{
 uchar i;
	
 for(i=0;i<4;i++)
  {

		GPIO_SetBits(GPIOB,phaseccw[i]);//输出高
    delay_ms(5);//等待5ms
		GPIO_ResetBits(GPIOB,phaseccw[i]);//输出低
  }
}

// 初始化PB0,PB1,PB2,PB3
void GPIO_Config_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PB端口时钟使能
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;				 //PB 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //禁用JTAG,PB3可用

	
}

//主函数,采用外部8M晶振,72M系统主频,可以在void SetSysClock(void)函数中选择主频率设置
int main(void)
 {	
		int i;
	 delay_init();	    	//延时函数初始化,通过Systick中断实现1ms延时功能  
	 GPIO_Config_Init();	//初始化GPIO,PB0,PB1,PB2,PB3配置成推挽输出
	 
	while(1)
	{
		delay_ms(50);//等待50ms
		for(i=0;i<500;i++)
		{
		MotorCW();   //正转
		} 
		delay_ms(500);//等待500ms
		for(i=0;i<500;i++)
		{
		MotorCCW();  //反转
		} 
		delay_ms(500); //等待500ms
	}
 }

     这段代码是用于控制步进电机正反转的C语言程序,适用于基于STM32微控制器的系统。代码中包含了初始化GPIO端口、控制步进电机正反转的函数以及主函数。

  • #include "delay.h" 和 #include "sys.h":包含两个自定义的头文件,分别用于提供延时函数和系统相关配置。
  • #define uchar unsigned char 和 #define uint unsigned int:定义了两个宏,用于简化代码中的数据类型声明。

全局变量定义

uchar phasecw[4] ={GPIO_Pin_3,GPIO_Pin_2,GPIO_Pin_1,GPIO_Pin_0};//正转电机导通相序D-C-B-A
uchar phaseccw[4]={GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3};//反转电机导通相序A-B-C-D
  • phasecw 和 phaseccw 数组分别定义了步进电机正转和反转时的导通相序。

控制函数

正转函数 MotorCW
void MotorCW(void)
{
    uchar i;
    for(i=0; i<4; i++)
    {
        GPIO_SetBits(GPIOB, phasecw[i]); // 输出高
        delay_ms(5); // 等待5ms
        GPIO_ResetBits(GPIOB, phasecw[i]); // 输出低
    }
}
  • 此函数通过循环依次将GPIOB的四个引脚(PB0, PB1, PB2, PB3)置高电平,然后延时5毫秒,再置低电平,模拟步进电机的正转。
反转函数 MotorCCW
void MotorCCW(void)
{
    uchar i;
    for(i=0; i<4; i++)
    {
        GPIO_SetBits(GPIOB, phaseccw[i]); // 输出高
        delay_ms(5); // 等待5ms
        GPIO_ResetBits(GPIOB, phaseccw[i]); // 输出低
    }
}
  • 此函数与正转函数类似,但使用的是反转相序数组 phaseccw,模拟步进电机的反转。

    整体上看,这段代码通过控制GPIOB端口的四个引脚的高低电平,来驱动步进电机进行正反转。代码中使用了延时函数来控制电机的转速,通过改变延时时间可以调整电机的转速。需要注意的是,代码中省略了部分初始化代码和延时函数的实现细节,这些部分需要在实际的开发环境中补充完整。此外,代码中其实并没有错误处理和电机状态反馈机制,这在实际应用中可能需要进一步完善。

    这个呢我依旧是把完整源码上传,大家可以自行做一做实验。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在STM32F1系列上使用FreeRTOS,可以按照以下步骤进行移植: 1. 首先,从官网http://www.freertos.org/下载FreeRTOS源码V9.0.0。 2. 创建一个新的工程,并在工程中新建一个文件夹,命名为FreeRTOS。 3. 打开FreeRTOS源码中的FreeRTOS文件夹,将其中的所有文件复制到新建的FreeRTOS文件夹中。 4. 进入porttable文件夹,仅保留自己需要的Keil、MenMang、RVDS等文件。 5. 在空的工程中添加FreeRTOS的文件路径,并添加相关内容。 6. 确保portable文件夹中的MemMang下的heap_4和RVDS文件夹下的ARM3的port适配到了你所使用的stm32f1的芯片。 7. 将FreeRTOSConf.h文件拷贝到源码中的include文件夹下。 8. 将原来使用的sys.h、delay和usart文件夹替换为FreeRTOS版本。 9. 屏蔽掉stm32f10x_it.c中的三个函数SysTick_Handler()、SVC_Handler()和PendSV_Handler()。 10. 查看FreeRTOSConf.h文件的配置,确保配置正确。 11. 编写一个简单的程序进行测试,例如初始化PA8引脚,创建一个启动任务,在启动任务中创建一个LED闪烁的任务,假设LED的IO口是PA8。 以上是将FreeRTOS移植到STM32F1系列上的基本步骤。你可以按照这些步骤进行操作,并根据实际情况进行适当的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FreeRTOS:如何移植到STM32F1中(附例程模板)](https://blog.csdn.net/weixin_42362528/article/details/123885031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值