基于STM32F103的步进电机(ULN2003/28BYJ-48)角度和转速控制详细资料和驱动代码

基于STM32F103的步进电机(ULN2003/28BYJ-48)角度和转速控制详细资料和驱动代码

详细资料

1.技术参数

参数 参数
电压VDC 12 空载牵入频率 Hz ≥500
直流电阻25°C Ω±7% 85 空载牵出频率 Hz ≥800
步距角 5.625°/64 绝缘耐压V 1S 600
减速比 减速比 温升K ≤55
牵入转矩(100Hz时)gf.cm 550 噪音 dB ≤40
自定位转矩 gf.cm 300 驱动方式 四相八拍
连接线长:230mm,采用UL 26AWG 1061的电源线

2.尺寸外形
步进电机尺寸外形
3.ULN2003驱动模块电路
在这里插入图片描述

驱动代码

1.motor.h

#ifndef __DRV_MOTOR_H__
#define __DRV_MOTOR_H__

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include <stdio.h>
#include <string.h>

void motor_configuration(void);  //初始化引脚

void motor_control_F(int n);     //反转,参数为控制转速大小
void motor_control_Z(int n);	//正转,参数为控制转速大小
void Motor_Ctrl_Off(void);		//关闭电机,防止因接入时间过长而发热
void Motor_Ctrl_Angle(int angle,int n);		//控制转动角度,参数一:角度值,参数二:控制转速

#endif

2.motor.c

#include "drv_motor.h"
#include "drv_systick.h"  //延时函数采用滴答定时器


#define orange_H GPIO_SetBits(GPIOB, GPIO_Pin_15);
#define orange_L GPIO_ResetBits(GPIOB, GPIO_Pin_15);

#define yellow_H GPIO_SetBits(GPIOB, GPIO_Pin_14);
#define yellow_L GPIO_ResetBits(GPIOB, GPIO_Pin_14);

#define pink_H   GPIO_SetBits(GPIOB, GPIO_Pin_13);
#define pink_L	 GPIO_ResetBits(GPIOB, GPIO_Pin_13);

#define blue_H   GPIO_SetBits(GPIOB, GPIO_Pin_12);
#define blue_L   GPIO_ResetBits(GPIOB, GPIO_Pin_12);


void motor_configuration(void)//PB12,PB13,PB14,PB15	
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	GPIO_ResetBits(GPIOB, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}

void motor_control_F(int n)
{
		orange_H;
		SYSTICK_DelayUs(n);
		blue_L;
		SYSTICK_DelayUs(n);
		yellow_H;
		SYSTICK_DelayUs(n);
		orange_L;
		SYSTICK_DelayUs(n);
		pink_H;
		SYSTICK_DelayUs(n);
		yellow_L;
		SYSTICK_DelayUs(n);
		blue_H;
		SYSTICK_DelayUs(n);
		pink_L;
		SYSTICK_DelayUs(n);
}

void motor_control_Z(int n)
{
		blue_H;
		SYSTICK_DelayUs(n);
		orange_L;
		SYSTICK_DelayUs(n);
		pink_H;
		SYSTICK_DelayUs(n);
		blue_L;
		SYSTICK_DelayUs(n);
		yellow_H;
		SYSTICK_DelayUs(n);
		pink_L;
		SYSTICK_DelayUs(n);
		orange_H;
		SYSTICK_DelayUs(n);
		yellow_L;
		SYSTICK_DelayUs(n);
	
}

void Motor_Ctrl_Off(void){
	GPIO_ResetBits(GPIOB, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}

void Motor_Ctrl_Angle(int angle,int n){
	u16 j;
	for(j=0;j<64*angle/45;j++) 
	{
		motor_control_F(n);
	}
}

3.main.c

int main(void)
{
	SYSTICK_Configuration(72);
	RCC_Configuration();
	motor_configuration();
	Motor_Ctrl_Angle(360,2100);
	Motor_Ctrl_Off();
	
	while(1)
	{	 
		SYSTICK_DelayMs(1000);
	}
}

猜你喜欢

转载自blog.csdn.net/baidingtandang/article/details/88054672