STM32驱动步进电机

news2024/11/16 19:56:41

前言

(1)本章介绍用stm32驱动42步进电机,将介绍需要准备的硬件器材、所需芯片资源以及怎么编程及源代码等等。

(2)实验效果:按下按键,步进电机顺时针或逆时针旋转90度。

(3)参考资料:

【入门教程】STM32驱动步进电机_哔哩哔哩_bilibili

硬件准备

在这里插入图片描述

购买链接:

【淘宝】https://m.tb.cn/h.5TEAcrO?tk=Quv6W01YhgP CZ3457 「42步进电机42BYGH34S扭矩0.28N.M长34mm丝杆滑台3D打印机配件马达」
点击链接直接打开 或者 淘宝搜索直接打开

在这里插入图片描述

接线

1、接控制器三个普通的GPIO即可,用作普通推挽输出模式

2、步进电机有四个引脚,接到驱动器上的A、B相即可

3、12V供电

在这里插入图片描述

步进电机驱动设置

由驱动器旁边的拨码开关进行设置

在这里插入图片描述

代码讲解

在这里插入图片描述
在这里插入图片描述
见代码注释

main.c

#include "stm32f10x.h"
#include "bsp_key.h"
#include "bsp_stepmotor.h"

void Delay(__IO uint32_t nCount){
	for (; nCount != 0; nCount--)
		;
};

void Step_90_Degrees(){
	// NC = 1600, 800 toggles means 90 degree motor rotation
	for (int i = 0; i < 800; i++)
	{	
		MOTOR_PUL_Toggle;  //翻转800次
		// The delay time determines the motor speed
		Delay(0xfff);  //delay时间的长短决定电机旋转的速度,这个延时是不准确的,若需要精准的延时,可采用定时器
	}
}
//
int main(void)
{
	Key_GPIO_Config();   //按键的配置,初始化
	Stepper_Pin_Init();  //步进电机配置
	Delay(0xfffff);      //进行延时,单片机更好初始化
	// Keep detecting the Key status
	while(1){
		if (Key_Scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON){
			// Counter Clock Wise for KEy1
			MOTOR_DIR_CCW;     //设置步进电机为逆时针旋转方向
			Step_90_Degrees(); //控制脉冲端口,使步进电机旋转90度
		}
		if (Key_Scan(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == KEY_ON){
			// Counter Clock Wise for KEy2
			MOTOR_DIR_CW;       //设置步进电机为顺时针旋转方向
			Step_90_Degrees();
		}
	}
}

代码开源链接(这是up主的代码,主控不是c8t6。但是可以参考驱动程序)
https://github.com/Fiercewill/STM32-42StepMotor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器从输入URL到展示的流程

文章目录 1. URL输入2. DNS解析3. 建立TCP连接4. 发送http或者https请求5. 服务器端响应请求6. 浏览器解析渲染页面7. 断开TCP连接 1. URL输入 输入URL后&#xff0c;浏览器会对URL进行以下的判断 是否合法如果合法&#xff0c;则判断URL是否完整&#xff0c;如果不完整&…

【C 语言进阶(12)】动态内存管理笔试题

文章目录 题目 1题目 2题目 3题目 4 题目 1 运行 Test 函数后的结果是什么&#xff1f; void GetMemory(char* p) {p (char*)malloc(100); }void Test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }代码结果 程序崩溃。 代…

openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

文章目录 openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译89.1 查询编译&#xff1a;PREPARE语句89.2 运行命令89.3 轻量执行支持的查询89.4 轻量执行不支持的查询89.5 JIT存储过程89.6 MOT JIT诊断89.6.1 mot_jit_detai…

MATLAB 函数签名器

文章目录 MATLAB 函数签名器注释规范模板参数类型 kind数据格式 type选项的支持 使用可执行程序封装为m函数程序输出 编译待办事项推荐阅读附录 MATLAB 函数签名器 MATLAB 函数签名器 (FUNCSIGN) &#xff0c;在规范注释格式的基础上为函数文件或类文件自动生成函数签名&#…

c++ 基础知识(一)

文章目录 1. C关键字 2. 命名空间 3. C输入&输出 4. 缺省参数 文章内容 1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我学了以后再细讲。 2. 命名空间 …

简单查找重复文本文件

声明这是最初 我的提问给个文本分类清单input查找文件夹下 .py .txt .excel .word 一模一样的文本不是找文件名 找相同格式下的文件文本是否一样 文件单独复制到文件夹下两个文件全部复制到文件夹下 print 打印相同文本文件的名字 比如查找到了3.py与4.5.是.py文件中的文本文件…

Java基础API---euqals 小知识

导入&#xff1a; 大家有没有遇到自定义的类&#xff0c;无法用equals方法比较成员属性呀&#xff1f;那是因为需要重写equals方法 重写原理这里偷个懒&#xff0c;idea中 altinsert 快捷键&#xff0c;快速实现重写equals噢&#xff01; Student类&#xff1a; package ob…

【C++】基础入门

万字复习C基础入门语法&#xff0c;适合学过C的朋友用来复习查阅&#xff0c;可能不太适合0基础的朋友。 一.c初识 (1) 第一个c程序 最简单的格式&#xff1a; // 导入头文件 #include<iostream> // 简化对命名空间std下函数和对象的使用 using namespace std; // …

阿里云服务器免费申请入口_注册阿里云免费领4台服务器

注册阿里云账号&#xff0c;免费领云服务器&#xff0c;最高领取4台云服务器&#xff0c;每月750小时&#xff0c;3个月免费试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用。阿里云百科分享阿里云服务器免费领取入口、免费云…

调度程序以及调度算法的评价指标

1.调度器/调度程序 调度程序决定调度算法&#xff0c;时间片大小 ②&#xff0c;③由调度程序引起&#xff0c;调度程序决定: 1.调度时机 创建新进程进程退出运行进程阻塞I/O中断发生&#xff08;可能唤醒某些阻塞进程)非抢占式调度策略&#xff0c;只有运行进程阻塞或退出…

深度学习笔记_4、CNN卷积神经网络+全连接神经网络解决MNIST数据

1、首先&#xff0c;导入所需的库和模块&#xff0c;包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。 import numpy as np import torch from torchvision.datasets import mnist import torchvision.transf…

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

1300*C. Rumor(并查集贪心)

解析&#xff1a; 并查集&#xff0c;求每个集合的最小费用。 每次合并集合的时候&#xff0c;根节点保存当前集合最小的费用。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e55; int n,m,a[N],p[N],cnt[N]; int find(int x){retur…

如何在springboot2中利用mybatis-plus进行分页查询操作。

1.创建配置mp的配置类 在mp的拦截器中加入分页拦截器 package com.example.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springfra…

微信小程序template界面模板导入

我们有些时候 会有一些比较大但并不复杂的界面结构 这个时候 你可以试试这种导入模板的形式 我们在根目录创建一个 template 目录 然后下面创建一个 text文件夹下面创建一个 test.wxml 参考代码如下 <template name"textIndex"><text class "testw&…

微服务技术栈-Nacos配置管理和Feign远程调用

文章目录 前言一、统一配置管理1.添加配置文件2.微服务拉取配置3.配置共享 三、Feign远程调用总结 前言 在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念&#xff0c;Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式…

阿里云免费服务器无法领取限制说明

阿里云提供免费服务器供用户申请&#xff0c;但是领取免费服务器是有条件的&#xff0c;并不是有所的阿里云用户均可领取免费云服务器&#xff0c;免费服务器领取条件为&#xff1a;账号从未使用过阿里云服务器的用户&#xff0c;阿里云百科来举例说明免费服务器领取说明&#…

强化学习环境 - robogym - 学习 - 1

强化学习环境 - robogym - 学习 - 1 项目地址 https://github.com/openai/robogym 为什么选择 robogym 自己的项目需要做一些机械臂 table-top 级的多任务操作 robogym 基于 mujoco 搭建&#xff0c;构建了一个仿真机械臂桌面物体操作&#xff08;pick-place、stack、rearr…

System Generator学习——将代码导入System Generator

文章目录 前言一、步骤 1&#xff1a;用 M-Code 建模控制1、引言2、目标3、步骤 二、步骤 2&#xff1a;用 HDL 建模模块1、引言2、目标3、步骤 三、用 C/C 代码建模块1、引言2、目标3、步骤4、第 1 部分&#xff1a;从 Vivado HLS 创建一个系统生成器包5、第 2 部分&#xff1…

《机器学习实战》学习记录-ch2

PS: 个人笔记&#xff0c;建议不看 原书资料&#xff1a;https://github.com/ageron/handson-ml2 2.1数据获取 import pandas as pd data pd.read_csv(r"C:\Users\cyan\Desktop\AI\ML\handson-ml2\datasets\housing\housing.csv")data.head() data.info()<clas…