栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

cubemx stm32 基于uln2003模块的步进电机驱动代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cubemx stm32 基于uln2003模块的步进电机驱动代码

cubemx配置
  1. 开4个GPIO口
硬件连接

使用的是野火的指南者,型号是stm32f103ve

代码 uln2003.c
#include "uln2003.h"
#include "gpio.h"

//ULN2003对应的GPIO端口
#define uln_IN_PORT		GPIOE

void Delay_us(uint16_t time)//Delay_us(0) = 10.2us
{
	HAL_SYSTICK_Config(72);
	HAL_Delay(time);
	HAL_SYSTICK_Config(72000);
}

//延时
#define ULN_delay	Delay_us
#define ULN_Delay_	900

//IN0引脚
#define uln_IN0_PIN 	GPIO_PIN_10
#define uln_IN1_PIN		GPIO_PIN_11
#define uln_IN2_PIN		GPIO_PIN_12
#define uln_IN3_PIN		GPIO_PIN_13

//GPIO输出电平,lv只能输入0或1,没有错误检测,使用小心
#define IN0_LEVEL(lv)	GPIOE->ODR = ((GPIOE->ODR & (~GPIO_PIN_10))	| (GPIO_PIN_10 * (lv)))
#define IN1_LEVEL(lv)	GPIOE->ODR = ((GPIOE->ODR & (~GPIO_PIN_11))	| (GPIO_PIN_11 * (lv)))
#define IN2_LEVEL(lv)	GPIOE->ODR = ((GPIOE->ODR & (~GPIO_PIN_12))	| (GPIO_PIN_12 * (lv)))
#define IN3_LEVEL(lv)	GPIOE->ODR = ((GPIOE->ODR & (~GPIO_PIN_13))	| (GPIO_PIN_13 * (lv)))

//电机状态控制
#define AHighLevel	IN0_LEVEL(1),IN1_LEVEL(0),IN2_LEVEL(0),IN3_LEVEL(0)
#define BHighLevel	IN0_LEVEL(0),IN1_LEVEL(1),IN2_LEVEL(0),IN3_LEVEL(0)
#define CHighLevel	IN0_LEVEL(0),IN1_LEVEL(0),IN2_LEVEL(1),IN3_LEVEL(0)
#define DHighLevel	IN0_LEVEL(0),IN1_LEVEL(0),IN2_LEVEL(0),IN3_LEVEL(1)

#define ABHighLevel	IN0_LEVEL(1),IN1_LEVEL(1),IN2_LEVEL(0),IN3_LEVEL(0)
#define BCHighLevel	IN0_LEVEL(0),IN1_LEVEL(1),IN2_LEVEL(1),IN3_LEVEL(0)
#define CDHighLevel	IN0_LEVEL(0),IN1_LEVEL(0),IN2_LEVEL(1),IN3_LEVEL(1)
#define DAHighLevel	IN0_LEVEL(1),IN1_LEVEL(0),IN2_LEVEL(0),IN3_LEVEL(1)

//电机控制
#define StopIt		IN0_LEVEL(0),IN1_LEVEL(0),IN2_LEVEL(0),IN3_LEVEL(0)	//停止
#define Brake		IN0_LEVEL(1),IN1_LEVEL(1),IN2_LEVEL(1),IN3_LEVEL(1)	//刹车

#define Forward		do{								
						AHighLevel;ULN_delay(ULN_Delay_);	
						ABHighLevel;ULN_delay(ULN_Delay_);	
						BHighLevel;ULN_delay(ULN_Delay_);	
						BCHighLevel;ULN_delay(ULN_Delay_);	
						CHighLevel;ULN_delay(ULN_Delay_);	
						CDHighLevel;ULN_delay(ULN_Delay_);	
						DHighLevel;ULN_delay(ULN_Delay_);	
						DAHighLevel;ULN_delay(ULN_Delay_);	
						}while(0)

#define Reverse		do{								
						DHighLevel;ULN_delay(ULN_Delay_);	
						CDHighLevel;ULN_delay(ULN_Delay_);	
						CHighLevel;ULN_delay(ULN_Delay_);	
						BCHighLevel;ULN_delay(ULN_Delay_);	
						BHighLevel;ULN_delay(ULN_Delay_);	
						ABHighLevel;ULN_delay(ULN_Delay_);	
						AHighLevel;ULN_delay(ULN_Delay_);	
						DAHighLevel;ULN_delay(ULN_Delay_);	
						}while(0)




//输出一次步进电机的运动
void uln2003_MotorRotation(RotationSTATE rotationControl)
{
	switch(rotationControl)
	{
		case STOP_IT:
			StopIt;
			break;
		case BRAKE:
			Brake;
			break;
		case FORWARD:
			Forward;
			break;
		case REVERSE:
			Reverse;
			break;
		default:
			StopIt;
			break;
	}
}


uln2003.h
#ifndef __ULN2003_H_
#define __ULN2003_H_


typedef enum
{
	STOP_IT	=	0	,	//停止
	BRAKE			,	//刹车
	FORWARD			,	//正转
	REVERSE				//反转
}RotationSTATE;

//控制电机停止、刹车、正转、反转
//通过 RotationSTATE 枚举变量赋值
//注意这个函数是需要放到循环里面的,不断轮询运行
void uln2003_MotorRotation(RotationSTATE rotationControl);



#endif 

main.c 头文件
#include "uln2003.h"
main函数 初始化

无

while循环
uln2003_MotorRotation(REVERSE);	//反转
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923113.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号