实验说明
这个实验呢算是也算是稍微稍微有点进阶的吧,但是毕竟是基础实验嘛,大家学习的速度肯定比我更新的速度快很多,还是简单介绍一下吧。
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端口的四个引脚的高低电平,来驱动步进电机进行正反转。代码中使用了延时函数来控制电机的转速,通过改变延时时间可以调整电机的转速。需要注意的是,代码中省略了部分初始化代码和延时函数的实现细节,这些部分需要在实际的开发环境中补充完整。此外,代码中其实并没有错误处理和电机状态反馈机制,这在实际应用中可能需要进一步完善。
这个呢我依旧是把完整源码上传,大家可以自行做一做实验。