关于stm32f4上对(28byj-48)步进电机的应用控制和解读。

2023-05-16

1.关于stm32f4上对(28byj-48)步进电机的应用控制和解读。

(1).ULN2003驱动模块电路

步进电机不能直接和单片机连接,需要对应驱动模块提供电机所需的电流。
电路图分析:
IN1~7为单片机的输出io连接端。
1C~7C为相数对应(A ~ G).

在这里插入图片描述
根据电路图将接地和供电分别接入。
从左往右(分别接入GND,VCC,空,VCC);
vcc为5v电压。
驱动模块的接线图。
在这里插入图片描述

(2).28byj48.h头文件

#ifndef _28byj48_H
#define _28byj48_H

#include "system.h"
#include "SysTick.h"
void Motor_Init(void);
void Motorcw(void);
void motorNCircle(int n,int position,int x);
void SetMotor(unsigned char InputData);
#endif

(3).28byj48.c文件内容

#include "28byj48.h"
//引脚连接
//IN1:PC6、IN2:PC7、IN3:PC8、IN4:PC9、
 
//步进电机初始化函数
void Motor_Init(void)
{	
		GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量		

		__HAL_RCC_GPIOC_CLK_ENABLE(); //开启时钟

		GPIO_InitStructure.Pin =GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;  
		GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP  ;//推挽输出


		HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);

		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);	//PC6置1,默认初始化后灯灭
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);	//PC7置1,默认初始化后灯灭
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);	
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);	
	
}
 
//步进电机正转测试函数
void Motorcw(void)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);	//1依次高电平输出
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);		
	delay_ms(10);
	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);	//2依次高电平输出
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);		
	delay_ms(10);
	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);	//3依次高电平输出
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);		
	delay_ms(10);
	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);	//4依次高电平输出
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);		
	delay_ms(10);
	
	
}
unsigned char F_Rotation[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09} ;  //反

unsigned char B_Rotation[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08} ;  //正

//下面就是SetMotor函数,根据传的数据不同,控制的4个IO pin输出不同。
void SetMotor(unsigned char InputData)
{
    if(InputData & 0x08)
    {
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);
    }
    else
		{
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);
    }
    if(InputData & 0x04)
    {
        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);
    }
		else
    {
       HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);
    }
    if(InputData & 0x02)
    {  
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
    }
    else
   {  
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
   }
   if(InputData & 0x01)
   {   
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);
   }
   else
  {
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);
  }
}

/*此函数两个参数,第一个参数是圈数n(10~500)。
第二个参数是方向也就是选择正转和翻转(1正传,0反转)。
第三个参数转动时间x(5~90)。
*/
void motorNCircle(int n,int position,int x)
{
   int i=0;
   int  j=0;
   int k=0;
   for(j=0;j<n;j++)
   {
      for(i=0;i<64*8;i++)     
      {
          for(k=0;k<8;k++)
          {
             if(1 == position)
						 {
								SetMotor(F_Rotation[k]);
						 }  
             else
						 {
                SetMotor(B_Rotation[k]);  
						 }
            delay_ms(x);//转动速度控制(转动频率)3~90
          }
      }
    }
}

(4).main函数

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "pwm.h"
#include "28byj48.h"
int main()
{
	HAL_Init();                     //初始化HAL库 
	SystemClock_Init(8,336,2,7);   //设置时钟,168Mhz
	SysTick_Init(168);
	Motor_Init();
	while(1
	{
		motorNCircle(10,1,90);//正转1,反转0
	}
}

在这里插入图片描述

(5).运行效果:
在这里插入图片描述
在这里插入图片描述
源码:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于stm32f4上对(28byj-48)步进电机的应用控制和解读。 的相关文章

  • STM32F4应用DMA——串口收发不定长数据

    STM32F4应用DMA 串口收发不定长数据 使用STM32自带DMA传输数据 xff0c 可以减轻CPU负担 xff0c 只需设置一些参数即可发送想要发送的数据 xff0c 以下是STM32F407VE芯片测试过的部分代码 xff0c 可
  • STM32F4无人机动力旋翼拉力测试

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目的 了解无人机电调 电机转速 旋翼拉力与油门给定信号之间的关系 xff0c 可以通过相关设备进行拉力测试 实验原理 飞机旋翼绕旋翼旋转轴旋转时 xff0c 每个叶片的工作类同
  • FreeRTOS在STM32F4上移植

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第二章学习笔记 第一章笔记 FreeRTOS简介与源码下载 一 移植 1 准备工程文件 MCU用的是STM32F429的CORE xff0c 用keli创建一个基础工
  • STM32F4工程--串口--配置一个发送函数(详细版)

    STM32F4工程 串口 配置一个发送函数 xff08 库函数 xff09 芯片 xff1a STM32F429IGT6 目录 一 初始化串口相关的参数 二 初始化串口IO口时钟等参数 三 函数声明 四 主函数 xff08 执行函数 xff
  • STM32F4教程从零开始0——从官网获取固件库

    从大二到现在玩stm32也有两年了 xff0c 估计以后用stm32 的机会不多了 xff0c 所以打算写一系列的教程来纪念一下陪我走过大学时光 xff0c 成为我的科技竞赛重要利器的STM32F4 这系列的教程将用stm32F407VGT
  • stm32F4 hal库之CAN通信的实现

    本文的目的是为了能够实现功能 xff0c 故写的时候比较简略 参考资料 xff1a https blog csdn net u012308586 article details 81001102 正点原子开发手册 目标 xff1a 通过ca
  • FreeRTOS移植STM32F4

    64 TOC FreeRTOS FreeRTOS移植到STM32F4上 本文章讲解一下如何将FreeRTOS移植到STM32F4开发板上 xff0c 如有不对之处 xff0c 欢迎指正 xff0c 多多交流 一 创建工程文件及代码调试 我们
  • STM32F4-KeyFIFO

    STM32按键FIFO 主要思想就是 xff1a 1 先配置按键的初始计数值为滤波值 如 xff0c 滤波为40ms xff0c 则配置该值为固定初始值 xff0c 如10 假如扫描周期为10ms xff0c 每间隔一定时间 上面说的10m
  • 正点原子STM32F4笔记

    使用寄存器操作 xff0c 不错的博客 xff1a https blog csdn net w471176877 article category 1230060 https blog csdn net w471176877 article
  • STM32F4的FSMCTFT接口配置

    利用安富莱的V5开发板 xff0c 根据原理图配置 xff1b LCD接口原理图如下 xff1a 从原理图看出LCD接的是BANK1 xff0c 片选是NE4 xff0c LCD的RS为A18 xff0c 配置如下 然后安富莱的LCD片选是
  • STM32F4 422串口通信

    STM32F429 422串口通信 422串口的硬件原理图如下 xff1a 422串口和232串口不同的是引脚的电平控制 xff0c 还有DE是发送使能 xff0c 置高即可 xff1a RE是接收使能 xff0c 置低即可 422接出来的
  • stm32f4串口接收与发送

    之前有写一篇stm32f1串口接收与发送的文章 xff0c stm32f4与f1只有配置上的一点不同 xff0c 今天把f4的串口接收与发送代码分享一下 详细解释推荐大家看f1那篇 xff0c 都是一样的 xff0c stm32f1串口发送
  • STM32F4主板硬件设计与接口

    更多交流欢迎关注作者抖音号 xff1a 81849645041 本专栏的所有程序都在飞航科技 STM32 F407 开发板上测试通过 xff0c 本文介绍一下STM32 F407 开发板硬件设计与接口 xff0c 便于读者学习交流 STM3
  • STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

    ms5611是同时支持I2C和SPI通信协议的气压计芯片 已经很普遍的被用在飞行器控制板上作为高度传感器 开发过stm32的朋友都知道它的硬件I2C是由bug的 xff0c 一般使用的都是自己编写的软件I2C通信协议 但是其硬件SPI通信却
  • STM32F4应用-串口通信

    STM32F4应用 串口通信 1 基本介绍1 1 简介1 2 串口协议1 3 通信过程 2 配置过程2 1 引脚复用2 2 配置步骤2 3 例子 参考文献 1 基本介绍 1 1 简介 串口通信涉及USART TX RX xff0c GND三
  • STM32F407的CAN通信实验CAN1CAN2的设置

    CAN2的初始化参照上一篇博文就OK了 需要修改的地方 配置过滤器 CAN FilterInitStructure CAN FilterNumber 14 那为什么要修改额 查datasheet 双 CAN CAN1 主 bxCAN 用于管
  • 关于stm32f429的MDA2D的M2M模式

    LTDC的使用问题 可参考官方例程的配置 需要注意的是 它只是一个LCD控制器 需要定义缓存的地址 可以设置在flash里 但是不便于操作 一般还是建议设置外部SDRAM里 LTDC中DMA2D的使用问题 429中LTDC的2D加速功能还比
  • 使用HAL库开发STM32:系统时间基础及进阶使用

    文章目录 目的 基础使用 进阶使用 总结 目的 HAL库默认提供了系统时间 系统时间默认情况下由SysTick定时器计数产生 系统时间一方面用于HAL库自身调用 另一方面用户也可以使用 为开发带来便利 本文提到的相关使用主要应用于未使用OS
  • stm32f407zgt6的pdr_on引脚怎么接

    原文链接 https www amobbs com thread 5495105 1 1 html dsign c6460fe9 407的100脚封装没有这个PDR ON 就是VSS 在引脚分布图中为pdr on 但实际量pdr on对VS
  • STM32:从自定义引导加载程序跳转到应用程序时发生硬故障

    我正在开发带有自定义引导加载程序和应用程序的 STM32F401 MCU 编译器是GCC 5 2 1 没有运行优化 在以下跳转序列后的第一次中断后 我遇到了硬故障 引导加载程序 gt 应用程序 gt 引导加载程序 gt 应用程序 从引导加载

随机推荐

  • 一小时学会Python3爬虫基础(四)完整解析格式化输出和数据类型转换

    目录 前言格式化输出格式化符号 s格式化函数format格式化表示 f string 转义符和结束符 n意思就是 换行 new line t 叫做水平制表符 tab xff0c r 是回车符carriage return结束符 数据类型转换
  • 一小时学会Python3爬虫基础(七)高级数据的全部操作:字典

    目录 前言字典1 字典格式2 创建有效字典2 创建空字典3 字典类型转换 字典增加和修改1 增加2 修改 字典查找1 key键查找2 get 3 keys 4 values 5 items 字典循环遍历1 遍历字典的key值2 遍历字典的v
  • Python处理异常代码的基本操作,原来都大同小异!

    目录 什么是异常 xff1f 如何捕获异常 xff1f 1 异常的写法2 捕获指定异常3 捕获多个异常4 捕获异常的描述5 捕获所有异常6 异常的else7 finally8 自定义异常模块9 异常传递思路 总结 什么是异常 xff1f 简
  • python的模块与包的关系

    模块和包的概念 python中的模块 xff0c 其实就是一个python的文件 xff0c 包含了很多类和函数 xff0c 基本上都是可以向外调用的 xff0c 或者整个文件都用来处理某个操作 xff0c 我们使用库和框架就是由模块和包构
  • 一小时学会Python基础练习的十四个练手题

    目录 1到100的加法搬家具办公室人员分配猜拳游戏乘公交车吃苹果九九乘法表烤地瓜奇偶100内相加三角形正方形文件备份学员管理系统 xff08 函数版 xff09 学员管理系统 xff08 面向对象版 xff09 mainmangerSyst
  • ROS Topic (话题通信总结)

    拿到一个功能包 xff0c 先运行一下 xff08 以turtlesim为例子 xff09 xff1a rusrun turtlesim turtlesim node 然后使用 rqt graph 和rostopic list 大致了解有哪
  • vector函数用法

    一维 基本用法 xff1a 1 头文件 include lt vector gt 2 创建vector对象 xff0c vector lt int gt vec 3 尾部插入数字 xff1a vec push back a 4 使用下标访问
  • Jetson nano串口的使用——UART

    UART串口使用两条杜邦线就可以实现数据发送和接收 xff0c 可以很方便的与其他扩展进行数据连接 xff0c 比如微雪的L76X GPS HAT就可以直接连接40Pin的GPIO接口通过UART串口进行数据传递 接下来具体说明Jetson
  • Python中[-1]、[:-1]、[::-1]、[n::-1]、[:,:,0]、[…,0]、[…,::-1] 的理解

    在python中会出现 1 1 1 n 1 0 0 1 xff0c 他们分别是什么意思呢 xff0c 这里就来详尽的说一下 xff1a 下面的a 61 1 2 3 4 5 1 xff1a 列表最后一项 1 xff1a 从第一项到最后一项 原
  • 贴片电阻字码阻值对照表

  • 使用sphinx生成python项目文档

    1 pip install sphinx 2 sphinx quickstart 3 修改 conf py import os import sys sys path insert 0 os path abspath 39 39 确保mod
  • 免费商用字体有哪些

    免费商用字体有哪些 一 思源字体 xff0c 可以免费商用的有 思源黑体 xff0c 思源宋体 xff0c 思源柔黑体 二 方正字体 xff0c 方正类字体可以免费商用的有 xff1a 方正仿宋 xff08 简 xff0c 繁 xff09
  • Qt:16进制字符串数据转整数数值函数

    span class token comment 16进制字符串数据转整数数值 span span class token keyword int span Setting span class token operator span sp
  • ESP-12F开发环境

    ESP 12F可以使用arduino IDE快速开发 1 首先安装arduino IDE xff1a 搜索直接下载即可 2 在文件 gt 首选项 gt 附加开发板管理器网址中添加ESP8266开发板 xff1a 网址 xff1a http
  • 第1章 电子设计与制作基础

    1 电子系统的分类 模拟电子系统数字电子系统模拟 数字混合系统微处理器 xff08 单片机 嵌入式 xff09 电子系统 2 电子系统的定义 通常 xff0c 将由电子元器件或部件组成的能够产生 传输 采集或处理电信号及信息的客观实体称为电
  • python requests timeout参数

    首先发一下牢骚 xff1a 不管是抄袭还是转载 xff0c 有点新东西行不行 xff0c 一味的转载有什么用呢 xff1f 东西还以那点东西 xff0c 让想解决问题的人查看一些一摸一样的文章 xff0c 只会浪费查询者的时间 况且 xff
  • c++配置http/post请求接收json数据

    照着教程编译操作都没问题 首先是配置curl库 给一个别人的编译链接curl库 vs2017 xff1a 亲测可用 c 43 43 编译curl库 测试代码 xff1a span class token macro property spa
  • c++ 编译过程

    c 43 43 编译过程引入 常见 xff1a 用gcc g 43 43 指令生成可执行文件 xff0c 对于大点的项目 xff0c 则是 xff1a configure span class token function make spa
  • c和c++有什么不同呢???

    区别联系 其实说起C和C 43 43 的区别 xff0c 我相信很多人其实立马就能脱口而出 xff1a C是面向过程编程的语言 xff0c 而C 43 43 是面向对象的编程语言 C是一个结构化语言 xff0c 重点在于算法和数据结构 xf
  • 关于stm32f4上对(28byj-48)步进电机的应用控制和解读。

    1 关于stm32f4上对 xff08 28byj 48 xff09 步进电机的应用控制和解读 xff08 1 ULN2003驱动模块电路 步进电机不能直接和单片机连接 xff0c 需要对应驱动模块提供电机所需的电流 电路图分析 xff1a