一、环境介绍
二、硬件介绍
开发板采用STM32F103ZET6 最小系统板
电机驱动板采用的是ULN2003
步进电机采用的是28BYJ4 (5V 4相5线步进电机)
三、驱动代码
3.1 motor.c
#include "motor.h"
//步进电机正反转数组1
u16 PositiveSequence[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A
u16 ReverseOrder[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.
void motor_delay_ms(u32 ms)
{
u32 i,j;
for(i=0;iAPB2ENR|=1<<4;
GPIOC->CRL&=0x00FFFFFF;
GPIOC->CRL|=0x33000000;
GPIOC->CRH&=0xFFFFFF00;
GPIOC->CRH|=0x00000033;
// IN4: PC9 d
// IN3: PC8 c
// IN2: PC7 b
// IN1: PC6 a
}
void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
{
GPIOx->ODR = PortVal;
}
void motor_just(int speed) //一个脉冲
{
uint8_t i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOC,PositiveSequence[i]);
motor_delay_ms(speed);
}
}
void motor_back(int speed)
{
uint8_t i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOC,ReverseOrder[i]);
motor_delay_ms(speed);
}
}
//由于 *一个脉冲* *输出轴* 转0.08789度(电机实转0.08789*64=5.625度),即步进角为5.625度。则转完A-B-C-D为 *8个脉冲*
//,即0.08789*8=0.70312度。若称A-B-C-D为一个周期,则j为需要的转完angle角度所需的周期数。
//步进电机正转角度函数
void motor_just_angle(int angle,int speed)
{
int i,j;
j=(int)(angle/0.70312);
for(i=0;i;i++)>;i++)>
3.2 motor.h
#ifndef _MOTOR_H
#define _MOTOR_H
#include "sys.h"
void motor_delay_ms(u32 x);//延时函数
void motor_init(void); //步进电机初始化
void motor_just(int speed); //步进电机正转函数
void motor_back(int speed); //步进电机反转函数
void motor_just_angle(int angle,int speed); //步进电机正转角度函数
void motor_back_angle(int angle,int speed); //步进电机反转角度函数
void motor_stop(void); //步进电机停止函数
void motor_just_circle(int ring ,int speed); //步进电机正转圈函数
void motor_back_circle(int ring ,int speed);//步进电机反转圈函数
//IN
#define MOTOR_1 PCout(6)
#define MOTOR_2 PCout(7)
#define MOTOR_3 PCout(8)
#define MOTOR_4 PCout(9)
#endif
3.3 main.c
/*
ULN2003控制28BYJ-48步进电机接线:
ULN2003接线:
IN4: PC9 d
IN3: PC8 c
IN2: PC7 b
IN1: PC6 a
+ : 5V
- : GND
*/
int main()
{
u8 time_cnt=0;
u8 key;
LED_Init();
KEY_Init();
USART1_Init(115200);
motor_init(); //步进电机初始化
USART1_Printf("程序初始化.....\r\n");
while(1)
{
//按键可以测试开锁和关锁
key=KEY_Scan(0);
if(key==1)
{
LED1=0; //亮灯--表示开锁
motor_just_circle(1,300); //电机正转1圈
}
else if(key==2)
{
LED1=1; //灭灯--表示关锁
motor_back_circle(1,300); //电机反转1圈
}
DelayMs(10);
time_cnt++;
if(time_cnt>=50)
{
time_cnt=0;
LED2=!LED2;
}
}
}
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
STM32
+关注
关注
2270文章
10903浏览量
356276 -
硬件
+关注
关注
11文章
3341浏览量
66253 -
步进电机
+关注
关注
150文章
3112浏览量
147537
发布评论请先 登录
相关推荐
STM32+ULN2003驱动28BYJ4步进电机相关资料分享
一、环境介绍MCU: STM32F103ZET6编程软件: Keil5二、硬件介绍开发板采用STM32F103ZET6 最小系统板电机驱动板采用的是
发表于 06-29 06:15
STM8S103F3P6+步进电机28BYJ-48+ULN2003实现简单的正反转demo
STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo这篇文章的拓展,针对此文章的程序
发表于 06-29 07:16
Arduino,ULN2003和28YJ-48步进电机执行控制 相关资料下载
使用ULN2003驱动板和Arduino控制28BYJ-48步进电机的所有信息。我提供了数据表,接线图和许多示例代码!在每个示例之后,我都会
发表于 07-08 09:26
如何根据STM32F103+步进电机28BYJ-48+ULN2003实现简单的正反转?
如何根据STM32F103+步进电机28BYJ-48+ULN2003实现简单的正反转?
发表于 10-15 07:57
ULN2003驱动28BYJ48步进电机STM32F103版库函数合集免费下载
ULN2003驱动28BYJ48步进电机STM32F103版库函数合集免费下载
发表于 03-10 08:00
•0次下载
STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
一、环境介绍MCU: STM32F103ZET6编程软件: Keil5二、硬件介绍开发板采用STM32F103ZET6 最小系统板电机驱动板采用的是
发表于 12-05 19:21
•47次下载
STM8S103F3P6+步进电机28BYJ-48+ULN2003 实现简单的正反转demo
STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo这篇文章的拓展,针对此文章的程序
发表于 12-27 18:28
•24次下载
STM32F103RCT6利用ULN2003驱动步进电机正反转
接通电源后,电机开始正转,转够一圈后,电机开始反转,同时在OLED上会显示forward和reverse分别表示正反转
器件 :STM32
发表于 03-24 09:55
•13次下载
评论