四相八拍电机 --- linux驱动

四相八拍电机工作原理

四相八拍,也叫半步:AB—B—BC—C—CD—D—DA—A,再次从头循环。
四相:指步进电机中有四组线圈。
八拍:指的是四组线圈的通电时序。

步进电机:就是将电脉冲信号转变为角
位移或者线位移的开环控制电机(即无反馈)。

四线双极性步进电机
在这里插入图片描述
通常直接使用高低电平的方式直接驱动,常见的控制方式是四拍(整步)、八拍(半步)。
为了减弱或消除步进电机的低频振动开发了细分驱动技术细分后电机运行时的实际步距角是基本步距角的几分之一,微步即1/4-step、1/8-step、1/16-step等
比如,两相步进电机的基本步距角是1.8°,即一个脉冲走1.8°,如果没有细分,则是200个脉冲走一圈360°。细分是通过驱动器靠精确控制电机的相电流所产生的,如果是10细分,则发一个脉冲电机走0.18°,即2000个脉冲走一圈360°,电机的精度能否达到或接近0.18°,还取决于细分驱动器的细分电流控制精度等其它因素。

在这里插入图片描述
四拍、八拍可使用ULN2003进行简易驱动控制,上电时序如下。
如果要使用更多级的微步控制就需要使用专门的驱动芯片,如TI的DRV8889A-Q1 。

我们这里是八拍,所以直接使用GPIO控制

8拍(半步)方式驱动时序

8拍线圈上电时序表如下:

电极 1 2 3 4 5 6 7 8

A+ 1 1 0 0 0 0 0 1

A- 0 0 0 1 1 1 0 0

B+ 0 1 1 1 0 0 0 0

B- 0 0 0 0 0 1 1 1
电机转动方向如下所示,再次从头循环
A—AB—B–BC—C—CD—D—DA
在这里插入图片描述

反转时,控制时序倒过来控制就可实现反向转动。

实用简单的C代码,描述一个四相八拍电机的驱动:

//一个电机需要4个GPIO控制,下面是4组宏,控制其

#define STEP_1_H P11 = 1 //⾼电平

#define STEP_1_L P11 = 0 //低电平

#define STEP_2_H P12 = 1

#define STEP_2_L P12 = 0

#define STEP_3_H P13 = 1

#define STEP_3_L P13 = 0

#define STEP_4_H P14 = 1

#define STEP_4_L P14 = 0

uint8 motor_state = 0; //步进电机的状态

uint8 rotate_speed = 0;

uint16 motor_cnt = 0; //计数

void Step_Motor_Driver(void)
{
	if (++ motor_cnt >= rotate_speed)
	{
	
	motor_cnt = 0;
	
	switch (motor_state)
	
	{

		case 0:
		
		STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_L;
	
		break;
		
		case 1: //对应 A STEP_1_H;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_L;
		
		motor_state = 2;
		
		break;
		
		case 2: //对应 AB STEP_1_H;
		
		STEP_2_H;
		
		motor_state = 3;
		
		break;
		
		case 3: //对应 B STEP_1_L;
		
		STEP_2_H;
		
		STEP_3_L;
		
		STEP_4_L;
		
		motor_state = 4;
		
		break;
		
		case 4: //对应 BC STEP_1_L;
		
		STEP_2_H;
		
		STEP_3_H;
		
		STEP_4_L;
		
		motor_state = 5;
		
		break;
		
		case 5: //对应 C STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_H;
		
		STEP_4_L;
		
		motor_state = 6;
		
		break;
		
		case 6: //对应 CD STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_H;
		
		STEP_4_H;
		
		motor_state = 7;
		
		break;
		
		case 7: //对应 D STEP_1_L;
		
		STEP_4_H;
		
		motor_state = 8;
		
		break;
		
		case 8: //对应 DA STEP_1_H;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_H;
		
		motor_state = 1;
		
		break;
		
		default:
		
		break;
		
		}

	}

}

Step_Motor_Driver函数调用频率,应该小于电气规格书上的牵入频率,否则可能会导致电机失步。实际使用中,如果是简单的MCU环境,可以用延时函数替代,如果还是linux环境,则使用硬件定时器比较好。

linux驱动–步进电机–设计方案

TODO:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java网络编程---UDP

客户端 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {//1.创建客户端对象DatagramSocket socket new Datagra…

Grafana无法发送告警消息的飞书webhook(机器人)

1.问题描述 Grafana无法向飞书机器人发送报警消息,实测使用Grafana自带的webhook也不好使,对于用飞书办公的程序猿非常不便,后来发现一个报警神器,开源免费,关键是好用 PrometheusAlert 2.PrometheusAlert安装 Prom…

【leetcode】反转链表

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* return {ListNode}*/ var reverseList function(head) {if(headnul…

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

【网络安全 | Misc】Training-Stegano-1

该题考察winhex工具使用 打开文件: 使用StegSolve并不能获取有效信息 使用winhex得到flag steganoI

什么是微服务架构以及落地思路

文章目录 前言一、各种架构的演进二、微服务架构落地思路 总结 前言 调用几个webapi就是微服务架构?或则是ngnixwebapi 集群就是微服务架构?这个文章带你弄懂微服务架构。 一、各种架构的演进 单体架构:放在一个服务器进程完成全部的后端处理…

Jackson进行Json反序列化对于一个小写字母开头后跟大写字母无法识别反序列成功问题

问题描述 json数据:{“pTargetId”:“123”} javaBean: Datapublic static class Test {private String pTargetId;}运行下面代码: public static void main(String[] args) throws JsonProcessingException {String json "{\"pT…

Echarts使用,Echarts图表自适应窗口大小

Echarts官方文档 1.下载Echarts 项目打打开终端直接通过命令 npm install echarts --save 下载完成后在项目package.json查看。 2.使用Echarts 引入方式有两种全局引入和局部引入 全局引入直接在项目main.js引入放到vue原型上。 import * as echarts from echarts Vue.pr…

基于EMD的滚动轴承故障诊断算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1EMD的基本原理 固有模态函数(IMF) 筛分过程 4.2 基于EMD的滚动轴承故障诊断算法 信号预处理 EMD分解 特征提取 故障诊断 5.算法完整程序工程 1.算法运行效…

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞

目录 非强制路由RCE漏洞 web579 web604 web605 web606 web607-610 前面审了一些tp3的sql注入,终于到tp5了,要说tp5那最经典的还得是rce 下面介绍非强制路由RCE漏洞 非强制路由RCE漏洞原理 非强制路由相当于开了一个大口子,可以任意调用当前框…

如何高效的在 Linux 环境下配置 yum 源?

作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 链接:如何高效的在 Linux 环境下配置 yum 源? 方法一:使用脚本的方式创建本地 YUM 仓库 首先,脚本开始时检查光盘是否已经挂载。…

磁盘管理-------磁盘分区

目录 引导语: 一、磁盘分区概念及作用 二、磁盘分区 (一)添加磁盘 (二)创建分区 (三)创建文件系统 (四)挂载 (五)永久挂载 三、扩展分区…

Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin

Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.os.Bundle import android.…

SSM驾校预约管理系统----计算机毕业设计

项目介绍 本项目分为管理员、教练、学员三种角色, 管理员角色包含以下功能: 学员管理、教练管理、车辆管理、关系管理、车辆维修管理、个人中心等功能。 教练角色包含以下功能: 我的课程、我的学员、车辆中心、个人中心等功能。 学员角色包…

《对话品牌》——数字化心理科学的变革

本期节目《对话品牌》栏目组邀请到了广东云有心理咨询有限公司董事长袁红萍女士参加栏目录制,分享其企业故事,树立品牌形象,提升品牌价值! 节目嘉宾:袁红萍女士 节目主持人:董倩 节目播出平台&#xff1…

微生信 -- 0代码科研绘图,助力发高分文章

1,粘贴数据,一键出图 www.bioinformatics.com.cn微生信云平台以220多款在线绘图、分析模块为基础,致力于0代码在线分析数据,0代码在线绘制科研图片。让不会编写代码的科研工作者,贴贴数据,点点鼠标就能够进…

字节高级Java面试真题

今年IT寒冬,大厂都裁员或者准备裁员,作为开猿节流主要目标之一,我们更应该时刻保持竞争力。为了抱团取暖,林老师开通了《知识星球》,并邀请我阿里、快手、腾讯等的朋友加入,分享八股文、项目经验、管理经验…

【软件工程】漫谈增量过程模型:软件开发的逐步之道

🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言: 正文 增量过程模型(Incremental Process Model) 主要特点和阶段: 优点&#xff1…

系列十二、Linux中安装Zookeeper

一、Linux中安装Zookeeper 1.1、下载安装包 官网:Index of /dist/zookeeper/zookeeper-3.4.11 我分享的链接: 链接:https://pan.baidu.com/s/14Hugqxcgp89f2hqGWDwoBw?pwdyyds 提取码:yyds 1.2、上传至/opt目录 1.3、解…

前端基础(三十七):属性结构数据进行关键字筛选

效果 核心源码 type MenuItem {label: string;key: string | number;icon?: React.ReactNode;children?: MenuItem[];type?: group; }function filterTreeData(tree: MenuItem[], keyword: string): MenuItem[] {return tree.filter((node: MenuItem) > {if (node.labe…
最新文章