当前位置: 首页 > news >正文

用C语言设计轨道电机的驱动库

一、设计目的

设计能驱动立体轨道电机的抽象驱动程序库。


二、设计要求

  1. 命名规范。
  2. 设计简单,方便使用。
  3. 体积小。
  4. 满足电机的移动、停止、初始化、恢复等控制,甚至通过网络控制。

三、设计内容

(一)属性封装

1、定义配置结构体

// 用于配置参数
typedef struct m1_config{char id[25]         // 机器的唯一编号int speed;          // 速度double init_x;      // 初始x坐标double  init_y;     // 初始y坐标double  init_z;     //  初始z坐标
}m1_config;

2、定义会话结构体

typedef struct m1_session{int no;         // 机器序号char name[20];  // 机器别名
}m1_session;

(二)初始化

初始设备的参数。

调用下列函数:

   int m1_init(m1_config* config, m1_session* session)

传参: m1_config变量的指针,会话变量指针
返回值:为1代表成功,为0代表失败。


(三)移动工作头到指定位置

调用下列函数:

int m1_move(m1_session* session,double x, double y, double z)

传参:工作会话变量、目标的三维坐标值 (x, y, z)
返回值:为1代表成功,为0代表失败。


(四)暂停电机的运行

调用下列函数:

int m1_pause(m1_session* session)

传参:目标机器的连接工作会话变量。
返回值:为1代表成功,为0代表失败。


(五) 恢复电机的运行

调用下列函数:

int m1_resume(m1_session* session)

传参:目标机器的连接工作会话变量。
返回值:为1代表成功,为0代表失败。


(六)重置电机

将电机恢复到初始的状态。
调用下列函数:

int m1_reset(m1_session* session)

传参:目标设备的工作会话变量
返回值:为1代表成功,为0代表失败。


(七)获得运行状态

可以获得设备当前的运行状态

1、定义状态结构体

typedef struct m1_status{int status_no; // 状态编号double x;   // 当前x坐标double y;   // 当前y坐标double z;   // 当前z坐标}m1_status;

2、定义下列函数

int m1_status(m1_session* session, m1_status* status)

传参:会话指针、m1_status的结构体变量的指针
返回值:如果为1代表成功,如果为0代表失败。


(八)设置监听函数

监听函数可以监听运行状态,作出一些指定的反应。

监听函数通过把函数名传递实现监听,监听函数内部可以调用m1_status结构体的值来获取实时状态。

有下列函数:

int m1_reg_listener(m1_session* session, int*p(m1_status* s_p, void* vp))

传参:会话指针、一个返回值为int,接收m1_status指针和任意指针作参数的函数。

返回值:如果为1代表成功,如果为0代表失败。

**

四、总结

本文只是介绍如何设计一个驱动程序的接口。

实际上接口是通用的,具体实现很复杂,需要硬件的支持,例如寄存器、处理器、总线的支持。

电机工作时需要供电,控制通断需要三极管和继电器。

感知状态需要传感器。

恢复和暂停需要外部用户的手动干预。

相关文章:

用C语言设计轨道电机的驱动库

一、设计目的 设计能驱动立体轨道电机的抽象驱动程序库。 二、设计要求 命名规范。设计简单,方便使用。体积小。满足电机的移动、停止、初始化、恢复等控制,甚至通过网络控制。 三、设计内容 (一)属性封装 1、定义配置结构体 // 用于配置参数 typed…...

HTML跳动的爱心

目录 写在前面 HTML简介 跳动的爱心 代码分析 运行结果 推荐文章 写在后面 写在前面 哎呀,这是谁的小心心?跳得好快吖! HTML简介 老生常谈啦,咱们还是从HTML开始吧! HTML是超文本标记语言(Hyper…...

汇编原理(二)

寄存器:所有寄存器都是16位(0-15),可以存放两个字节 AX,BX,CX,DX存放一般性数据,称为通用寄存器 AX的逻辑结构。最大存放的数据为2的16次方减1。可分为AH和AL,兼容8位寄存器。 字:1word 2Byte…...

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式

一、问题描述 在开发过程中发现安卓的默认主题色是紫色,并且会导致button也是紫色,有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app,可以直接设置主题颜色 比如,将主题设置为白色&a…...

eNSP学习——OSPF单区域配置

目录 相关命令 实验背景 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 1、基础配置 2、部署单区域OSPF网络 3、检查OSPF单区域的配置结果 OSPF——开放式最短路径优先 基于链路状态的协议,具有收敛快、路由无环、扩展性好等优点; 相关命令 […...

深度学习中的优化算法二(Pytorch 19)

一 梯度下降 尽管梯度下降(gradient descent)很少直接用于深度学习,但了解它是理解下一节 随机梯度下降算法 的关键。例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。同样地&…...

R实验 方差分析

实验目的: 掌握单因素方差分析的思想和方法; 掌握多重均值检验方法; 掌握多个总体的方差齐性检验; 掌握Kruskal-Wallis秩和检验的思想和方法; 掌握多重Wilcoxon秩和检验的思想和方法。 实验内容: &…...

AI智能体|手把手教你使用扣子Coze图像流的文生图功能

大家好,我是无界生长。 AI智能体|手把手教你使用扣子Coze图像流的文生图功能本文详细介绍了Coze平台的\x26quot;图像流\x26quot;功能中的\x26quot;文生图\x26quot;节点,包括创建图像流、编排文生图节点、节点参数配置,并通过案例…...

应用程序图标提取

文章目录 [toc]提取过程提取案例——提取7-zip应用程序的图标 提取过程 找到需要提取图标的应用程序的.exe文件 复制.exe文件到桌面,并将复制的.exe文件后缀改为.zip 使用解压工具7-zip解压.zip文件 在解压后的文件夹中,在.rsrc/ICON路径下的.ico文件…...

Excel表格在线解密:轻松解密密码,快速恢复数据

忘记了excel表格密码?教你简单两步走:具体步骤如下。首先,在百度搜索中键入“密码帝官网”。其次,点击“立即开始”,在用户中心上传表格文件即可找回密码。这种方法不用下载软件,操作简单易行,适…...

springboot小结1

什么是springboot ​ Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。 ​ 简单来说,它提供了一堆依赖打包Starter,并已经按照使用习惯解决…...

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…...

Spark运行模式详解

Spark概述 Spark 可以在多种不同的运行模式下执行,每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式:单机模式与集群模式。大多数分布式框架都支持单机模式,方便开发者调试框架的运行环境。但是在生产环境中&#xff…...

vcpkg环境配置

vcpkg 使用linux相关库,设置环境变量VCPKG_ROOT,设置cmake工具链$VCPKG_ROOT/scripts\buildsystems\vcpkg.cmake set VCPKG_DEFAULT_TRIPLETx64-windows .\vcpkg.exe install fftw3 freetype gettext glibmm gtkmm libjpeg-turbo libpng libxmlpp libs…...

python学习:基础语句

目录 条件语句 循环语句 for 循环 while 循环 break continue 条件语句 Python提供了 if、elif、else 来进行逻辑判断。格式如下: Pythonif 判断条件1: 执行语句1... elif 判断条件2: 执行语句2... elif 判断条件3: 执行语句3... else: 执行语句4…...

Nginx限制IP访问详解

在Web服务器管理中,限制某些IP地址访问网站是一个常见的需求。Nginx作为一款高性能的HTTP服务器和反向代理服务器,提供了灵活强大的配置选项来实现这一功能。本文将详细讲解如何在Nginx中限制IP访问,并通过示例代码展示具体操作。 一、Nginx…...

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…...

24年湖南教资认定即将开始,别被照片卡审!

24年湖南教资认定即将开始,别被照片卡审!...

数据库(8)——DML数据操作

增添数据 给指定字段添加数据 INSERT INTO 表名 (字段名1,字段名2,...)VALUES(值1,值2...); 没有的添加的字段默认为NULL。 给全部字段添加数据 INSERT INTO 表名 VALUE (值1,值2,....值n); 此时值的顺序对应表中字段的顺序 批量添加数据 INSERT INTO 表名(字段1,…...

Gitee在已有项目基础上创建仓库中遇到的问题和解决

问题一:fatal: remote origin already exists 解释:当前仓库添加了一个名为"origin"的远程仓库配置,此时输入 git remote add origin https://xxx就会提示上面的内容。 解决方案1:移除旧的origin git remote remove origin 解决方案…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...