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

【技术支持案例】使用S32K144+NSD8381驱动电子膨胀阀

文章目录

    • 1. 前言
    • 2. 问题描述
    • 3. 理论分析
      • 3.1 NSD8381如何连接电机
      • 3.2 S32K144和NSD8381的软件配置
    • 4.测试验证
      • 4.1 测试环境
      • 4.2 测试效果
      • 4.3 测试记录

1. 前言

最近有客户在使用S32K144+NSD8381驱动电子膨胀阀时,遇到无法正常驱动电子膨胀阀的情况。因为笔者也是刚开始使用NSD8381,无法线上支持这类实际应用问题,所以让客户提供了一个电子阀,自己搭建环境进行测试。

2. 问题描述

客户电子膨胀阀的阀针安装位置比较隐蔽,需要通过注水观察水的流动情况,判断阀门是否打开关闭。之前也给客户提供了NSD8381的驱动代码,以及相关的文档说明,如下所示,

  • 基于S32K144驱动NSD8381

但是客户反馈,按照文档的步骤配置NSD8381之后,无论给CTRL1引脚发送多少脉冲,阀门始终无法关闭,即注水都会流出。

3. 理论分析

关于S32K144+NSD8381无法驱动电机的场景,主要有两种可能,一个是NSD8381的寄存器配置有误,或者NSD8381和电机的接线有问题。

针对NSD8381配置有误的可能性,客户有测试更改过NSD8381的步进电机模式(1/16细分改为1/2),运行电流(576mA更改1.3A)等参数,现象仍然一致,并且读了SPI的返回值,最高字节为0x80,说明寄存器配置有正确写入。

针对NSD8381和电机的连线,发现和NSD8381的时序不一致,详细情况如下描述。

3.1 NSD8381如何连接电机

客户的电子膨胀阀的运行时序如下左图,当前的NSD8381的输出引脚和电机的连线如下有图。

NSD8381连接电机

  • 从横轴看左上图,1到8为阀门关闭的相序,8到1为阀门打开的相序;
  • 从纵轴看左上图,1,2,3,4分别为电机四根引线的输入电平要求;
  • 右上图显示NSD8381和电机的连线情况为:OUTA1、OUTA2连接电机的1、3号引线,OUTB1、OUTB2连接电机的2、4号引线。

按照上图的连线方式,对应的NSD8381输出引脚需要的相序如下表格最右列。

接线方法1线圈电流方向

翻看NSD8381数据手册,1/2微步模式下的芯片的相序如下:

NSD8381-1/2微步-相序

为了让电机相序和NSD8381的相序一致,需要NSD8381和电机的接线方式修改,修改后的接线方式为:

  • OUTB1、OUTB2连接电机的1、3号引线,OUTA1、OUTA2连接电机的2、4号引线

按如上描述修改接线方式后,对应的NSD8381输出引脚需要的相序如下表格:

接线方法2线圈电流方向

另外,客户提供的电机参数表中,和驱动电路相关的参数如下红框所示:

电机参数

对应的驱动NSD8381配置为:

  • 供电电压为12系统;
  • 1/2微步模式下,CTRL1引脚的PWM频率在80-200Hz;
  • 1/2微步模式下,阀门从完全关闭到完全打开的PWM脉冲数为576,从完全关闭到打开阀门,需要38±15个PWM脉冲。

针对这些需求,需要基于前文《基于S32K144驱动NSD8381》分享的代码做一些修改。详细情况如下描述。

3.2 S32K144和NSD8381的软件配置

  1. 因为需要计算PWM的脉冲数,所以需要增加PWM计数功能。代码修改如下。
  • 增加FTM2通道5的中断使能;
 FTM_DRV_EnableInterrupts(INST_FLEXTIMER_PWM1, FTM_CHANNEL5_INT_ENABLE);
  • 增加对应的中断处理函数,在里面增加PWM计数功能;
volatile uint16_t PWM_Count = 0;void FTM2_Ch4_Ch5_IRQHandler(void)
{PWM_Count++;FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_PWM1,FTM_CHANNEL5_FLAG);
}
  1. 需要将PWM的频率修改为200Hz,修改下图形化配置即可。

PWM频率200Hz

  1. NSD8381的初始化函数中,需要修改步进电机模式为1/2微步,修改如下红框,即对CONFIG3寄存器赋值0x9B00。

NSD8381初始化

  1. 在while(1)循环中,增加如下功能:
  • 增加PWM计数处理逻辑,以及和PH[5:0]寄存器值的获取,用于判断NSD8381是否处于1/2微步模式,以及达到预定的PWM脉冲后,停止CTRL1引脚的脉冲输入。

  • 增加按键按下处理逻辑,按下SW2,将CTRL2引脚拉低(DIR为0),输入PWM波到CTRL1引脚;按下SW3,将CTRL2引脚拉高(DIR为1),输入PWM波到CTRL1引脚。

  • 如果希望电机整体功耗降低,可以增加Hold模式,当电机停止转动,开启Hold模式,此时消耗的电流远远小于RUN模式的电流。

对应的代码如下:

    while(1){Phase_Count = NSD8381drv_GetPH();/* 励磁速度,80-200pps(每秒钟的脉冲数)* 开阀脉冲数38±15PS,全开脉冲576* *//* 测试步进电机模式是否正确配置,1/2微步的时候,PWM计数4,PH[5:0]计数0b100000,即32*/if(PWM_Count == 4){printf("PWM Count is %d\r\n", PWM_Count);printf("Phase Count is %d\r\n", Phase_Count);}if(PWM_Count == 576){NSD8381drv_HOLDM_En(ENABLE);FTM_DRV_DeinitPwm(INST_FLEXTIMER_PWM1);printf("PWM Count is %d\r\n", PWM_Count);printf("Phase Count is %d\r\n", Phase_Count);PWM_Count = 0;}/* SW2 press */if(SW2_Press_Flag){SW2_Press_Flag = false;printf("SW2 press!\r\n");/* Increment phase counter, clockwise */NSD8381drv_CTRL2_Dir(clockwise);/* Hold mode -> Run mode */NSD8381drv_HOLDM_En(DISABLE);/* FTM2 CH5 use PWM mode,freq:200Hz */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM1, &flexTimer_pwm1_PwmConfig);}/* SW3 press */if(SW3_Press_Flag){SW3_Press_Flag = 0;printf("SW3 press!\r\n");/* decrement phase counter, counter-clockwise */NSD8381drv_CTRL2_Dir(counter_clockwise);/* Hold mode -> Run mode */NSD8381drv_HOLDM_En(DISABLE);/* FTM2 CH5 use PWM mode,freq:200Hz */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM1, &flexTimer_pwm1_PwmConfig);}}

关于其中几个函数的实现,如下所示:

/* read phase counter */
uint32_t NSD8381drv_GetPH(void)
{uint32_t Rsult;CONFIG3Reg[0] = (uint8_t)(0x85U);Parity_check(CONFIG3Reg);SPI_Send(CONFIG3Reg, StatReg_Result);StatReg_Result[2] &= 0x7F;Result = (uint32_t)(StatReg_Result[2] >> 1);return Result;
}/*set NSD8381 CONFIG_3 HOLD_EN bits*/
void NSD8381drv_HOLDM_En(FunctionalState_TypeDef EN)
{if(EN==ENABLE){CONFIG3Reg[1]|=NSD8381_HOLDM;   //0x40}else{CONFIG3Reg[1]&=(uint8_t)(~NSD8381_HOLDM);}CONFIG3Reg[0] = (uint8_t)(0x05U);CONFIG3Reg[2]&=(uint8_t)(0xFE);Parity_check(CONFIG3Reg);SPI_Send(CONFIG3Reg, CtrlReg_Result);
}/* set NSD8381 CTRL2 pin level when used for dir status* 0: Increment phase counter, clockwise* 1: decrement phase counter, counter-clockwise* */
void NSD8381drv_CTRL2_Dir(DirStatus_TypeDef EN)
{PINS_DRV_WritePin(NSD8381_CTRL2_PORT, NSD8381_CTRL2_PIN, EN);
}

4.测试验证

4.1 测试环境

整个测试的环境如下图:

NSD8381驱动电子膨胀阀

4.2 测试效果

实际的测试效果如下视频,

  • 当按下SW2时,阀门完全关闭,此时注入水不会流出;
  • 接着按下SW3,阀门完全打开,注入水会加速流出。

NSD8381驱动电子膨胀阀

4.3 测试记录

实际测试时串口打印的数据如下图,

  • 第一个操作的寄存器的高8bit返回值为0x40,因为有reset事件;如果第一个操作的寄存器高8bit返回值为0x00,可能是NSD8381还没初始化完成,建议在EN引脚拉高后,延迟200us再发送SPI命令给NSD8381​。
  • 当PWM计数为4时,对应的PH[5:0]为0x32,即0b100000,和相序表一致,说明处于1/2微步模式。
  • 使用250Hz的PWM波,也可以正常驱动该电磁阀,说明该电机兼容性比参数表更好。
  • 使用HOLD模式时的电流远小于RUN模式,有助于降低NSD8381的功耗。

相关文章:

【技术支持案例】使用S32K144+NSD8381驱动电子膨胀阀

文章目录 1. 前言2. 问题描述3. 理论分析3.1 NSD8381如何连接电机3.2 S32K144和NSD8381的软件配置 4.测试验证4.1 测试环境4.2 测试效果4.3 测试记录 1. 前言 最近有客户在使用S32K144NSD8381驱动电子膨胀阀时,遇到无法正常驱动电子膨胀阀的情况。因为笔者也是刚开…...

第二期:集成电路(IC)——智能世界的微观建筑大师

嘿,小伙伴们!👋 我是你们的老朋友小竹笋,一名热爱创作和技术的工程师。上一期我们聊了聊AI芯片,这次我们要深入到更微观的层面,来探究集成电路(IC)的世界。准备好一起探索了吗&#…...

基于物联网的区块链算力网络,IGP/BGP协议

目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…...

每日一题~960 div2 A+B+C(简单奇偶博弈,构造,观察性质算贡献)

A题意: N 长的数组。 一次操作: 最开始的mx 为零。 选出一个数(使得这个数>mx) ,之后将mx 更新为这个数,将这个数置为零。 不能做这个操作的,输。 问是否有先手赢的策略。有的话,输出yes 否则no 当时一…...

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...

Aboboo一些操作

常用快捷键⌨ 快捷键/操作方式 功能 鼠标中键/Esc 进入/退出全屏 空格/Tab 暂停/恢复播放 左/右箭头 快退/快进 Ctrl-左/右箭头 30秒快退/快进 Alt-左/右箭头 60秒快退/快进 Ctrl-Alt-左/右箭头 播放速率调节 PageUp/PageDown 上一句/下一句 上下箭头/滚轮 …...

获取行号LineNumberReader

(每日持续更新)jdk api之LineNumberReader基础、应用、实战-CSDN博客...

python数据结构与算法

0.时间复杂度和空间复杂度 快速判断算法时间复杂度:算法运行时间 1.确定问题规模n 2.循环减半 logn 3.k层关于n的循环 n^k 空间复杂度:评估算法内存占用大小 使用几个变量 O(1) 使用长度为n的一维列表 O(n&#xff09…...

大数据学习之Flink基础(补充)

Flink基础 1、系统时间与事件时间 系统时间(处理时间) 在Sparksreaming的任务计算时,使用的是系统时间。 假设所用窗口为滚动窗口,大小为5分钟。那么每五分钟,都会对接收的数据进行提交任务. 但是,这里有…...

C++基础语法:友元

前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 以<C Prime Plus> 6th Edition(以下称"本书")的内容开展学习 引入 友元提供了一种特别的方式,访问对象私有数据. 友元有三…...

【大模型系列】Video-LaVIT(2024.06)

Paper&#xff1a;https://arxiv.org/abs/2402.03161Github&#xff1a;https://video-lavit.github.io/Title&#xff1a;Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional TokenizationAuthor&#xff1a;Yang Jin&#xff0c; 北大&#x…...

【总结】nacos作为注册中心-应用启动失败:NacosDiscoveryProperties{serverAddr=‘127.0.0.1:8848‘……

问题现象 启动springboot应用时报错&#xff0c;能够读取到nacos配置&#xff0c;但是使用nacos作为注册中心&#xff0c;应用注册到nacos失败。 应用配置bootstrap.properties如下&#xff1a; # 应用编码&#xff0c;安装时替换变量 spring.application.namedata-center #…...

C语言——数组和排序

C语言——数组和排序 数组数组的概念数组的初始化数组的特点 排序选择排序冒泡排序插入排序 二分查找 数组 数组的概念 数组是一组数据 &#xff1b; 数组是一组相同类型的数据或变量的集合 &#xff1b; 应用场景&#xff1a; 用于批量的处理多个数据 &#xff1b; 语法&…...

QEMU 新增QMPHMP指令【原文阅读】

文章目录 0x0 QEMU原文0x10x11 How to write monitor commands0x12 Overview0x13 Testing 0x20x21 Writing a simple command: hello-world0x22 Arguments 0x30x31 Implementing the HMP command 0x40x41 Writing more complex commands0x42 Modelling data in QAPI0x43 User D…...

【Linux】全志Tina配置屏幕时钟的方法

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率&#xff0c;当前为21MHz。 四、总结 注意选择对应的屏幕的参数&#xff0c;sdk所支持的屏幕信息都在此文件夹中…...

探索WebKit的CSS表格布局:打造灵活的网页数据展示

探索WebKit的CSS表格布局&#xff1a;打造灵活的网页数据展示 CSS表格布局是一种在网页上展示数据的强大方式&#xff0c;它允许开发者使用CSS来创建类似于传统HTML表格的布局。WebKit作为许多流行浏览器的渲染引擎&#xff0c;提供了对CSS表格布局的全面支持。本文将深入探讨…...

信号的运算

信号实现运算&#xff0c;首先要明确&#xff0c;电路此时为负反馈电路&#xff0c;当处于深度负反馈时&#xff0c;可直接使用虚短虚断。负反馈相关内容可见&#xff1a;放大电路中的反馈_基极反馈-CSDN博客https://blog.csdn.net/qq_63796876/article/details/140438759 一、…...

Vue3知识点汇总

创建项目 npm init vuelatest // npm create vitelatestVue文件结构 <!-- 开关&#xff1a;经过语法糖的封装&#xff0c;容许在script中书写组合式API --> <!-- setup在beforeCreate钩子之前自动执行 --> <script setup><!-- 不再要求唯一根元素 -->…...

C++设计模式--单例模式

单例模式的学习笔记 单例模式是为了&#xff1a;在整个系统生命周期内&#xff0c;保证一个类只能产生一个实例&#xff0c;确保该类的唯一性 参见链接1&#xff0c;链接2 #include <iostream> #include <mutex>using namespace std;/*懒汉模式&#xff1a;只有在…...

数据驱动未来:构建下一代湖仓一体电商数据分析平台,引领实时商业智能革命

1.1 项目背景 本项目是一个创新的湖仓一体实时电商数据分析平台&#xff0c;旨在为电商平台提供深度的数据洞察和业务分析。技术层面&#xff0c;项目涵盖了从基础架构搭建到大数据技术组件的集成&#xff0c;采用了湖仓一体的设计理念&#xff0c;实现了数据仓库与数据湖的有…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...