基于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);
}
}