Arduino ESP32使用U3115S芯片控制H桥驱动有刷直流电机

news2025/8/3 13:08:47

Arduino ESP32实现互补PWM输出

  • 问题提出
  • 半桥驱动电路
    • 必须是PWM互补输入才能工作
  • Arduino ESP32的互补PWM控制

问题提出

直流有刷电机控制使用U3115S芯片。芯片是电压高达300V的半H桥驱动电路,管脚说明:

NumberSymbolDescription
1VCC低侧固定逻辑电源输入
2HIN逻辑输入端,控制门电路驱动输出(HO), 同相
3LIN#逻辑输入端,控制门电路驱动输出(LO), 异相
4COM低侧电源返回
5LO低侧门驱动输出
6VS高侧浮动电源返回
7HO高侧门驱动输出
8VB高侧浮动电源

其实上面的表中的信息量很大。要能够实现对该模块的控制,需要注意的地方很多,最主要的是在HIN和LIN#端输入互补的PWM控制信号

半桥驱动电路

半桥驱动电路的一个注意事项是电容自举升压。

必须是PWM互补输入才能工作

在这里插入图片描述

如上图,输出的电位可以通过示波器查看。因为使用了自举升压的电路,在VB和VS之间有一个电容,这个电容在Q1关闭,Q2导通时会被充电,电压接近VCC,我们的例子中是12V左右。当要打开Q1时,这个12V的电压就会为Q1的G-S端提供电压,使其导通。Q1导通后,S端的电压被抬升,在我们的电路里电压值抬升到24V,VB端的电压是35.4V。但要注意,这个电压不会保持很长时间,经过一定的时间,电压会降低,最终停留在接近电源电压值。所以,在使用这个半桥驱动电路时一定要用互补的PWM来驱动。即在控制输入的HIN和LIN#端输入互补的PWM。如果是按我们想象的给控制Q1管的控制端输入一个3.3V的高电平,给控制Q2管的控制输入加一个0.0V的话,在输出端得不到24V的输出。必须采用PWM,而且是互补的PWM输入。下面的图是能够正常工作的电压给定:
在这里插入图片描述
上面的图是在网上找打的。这样就可以形成一个单极有刷直流电机的驱动。实际测量的波形输出:
在这里插入图片描述

Arduino ESP32的互补PWM控制

要实现互补PWM,需要MCPWM,但Arduino好像不支持MCPWM,在库管理中只找到了一个MCPWM库,好像还不是为Arduino准备的,应该是为ESP-IDF准备的,也没有例子程序。为快速实现样机,对PWM进行配置

  1. 采用ledc PWM对H桥的上臂进行控制,实现一个PWM
  2. 采用对上臂的PWM端连接中断,当上臂控制端变化时产生中断,根据输出的高低来控制下臂的输出。
  3. 由于采用了中断,对下臂就可以采用常规的方法进行控制。
    这里应该注意到,因为U3115S的内部已经实现了同时打开上下臂开关管的保护,我们的外部控制程序可以不必考虑其它的保护措施。
void setup()
{
	attachInterrupt(motorLU, isrLU, CHANGE);
    attachInterrupt(motorRU, isrRU, CHANGE);
}

上面的程序将电机控制的左上臂和右上臂的信号变化用isrLU和isrRU中断处理程序关联。

void IRAM_ATTR isrLU(void)
{
    if ( digitalRead(motorLU) && PWMN)   // UP close DOWN open
    {
        digitalWrite(motorLD, HIGH);      // UP 1, DOWN 0
        return;
    }
    if ( !digitalRead(motorLU) && PWMN)   // UP open DOWN close
    {
        digitalWrite(motorLD, LOW);       // UP 0, DOWN 1
        return;
    }  
}

void IRAM_ATTR isrRU(void)
{
    if ( digitalRead(motorRU) && PWMN)   // UP close DOWN open
    {
        digitalWrite(motorRD, HIGH);      // UP 1, DOWN 0
        return;
    }
    if ( !digitalRead(motorRU) && PWMN)   // UP open DOWN close
    {
        digitalWrite(motorRD, LOW);       // UP 0, DOWN 1
        return;
    }  
}

上面是中断处理程序。

通过中断处理,实现下臂的互补PWM输出。

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

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

相关文章

牛客网——verilog练习题思路汇总

目录 基础语法 VL1 四选一多路器 VL2 异步复位的串联T触发器 VL3 奇偶校验 VL4 移位运算与乘法 VL5 位拆分与运算 VL6 多功能数据处理器 VL7 求两个数的差值 VL8 使用generate…for语句简化代码 VL9 使用子模块实现三输入数的大小比较 VL10 使用函数实现数据大小端转…

智慧城市建设的原则及规划目标

一、建设原则 智慧城市建设过程中必须把握以下原则: (一) 遵循市信息化建设总体规划与发展框架。遵循 “十二五” 信息化规划确定的“紧紧围绕国家西部大开发战略目标,强化信息技术和信息化在我市加快推进新型工业化进程中的战略…

数据库周期表整体设计方案

这是学习笔记的第 2442篇文章数据库周期表是我们自定义的名称,从数据视角来说,通常会有三类数据表:字典表,状态表,日志表,其中周期表从定位上更侧重于日志表。为什么叫周期表,主要是因为日志数据…

看着2022年世界杯,我无比怀念98世界杯

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 断断续续看了2022年世界杯部分比赛,我无比怀念1998年世界杯!该文权当本人的一点回忆文字,没有经过严谨认证&#xff0…

2023年第三届智能制造与自动化前沿国际会议(CFIMA 2023)

2023年第三届智能制造与自动化前沿国际会议(CFIMA 2023) 重要信息 会议网址:www.cfima.org 会议时间:2023年6月9-11日 召开地点:中国大理 截稿时间:2023年4月20日 录用通知:投稿后2周内 收录检索:EI,…

IDEA创建父子项目

一、搭建父项目 创建第一个maven项目作为父项目 创建完之后建议删掉src文件夹 pom.xml <packaging>POM</packaging><!--依赖版本的锁定--><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</pr…

Linux-Nginx前端项目部署

目录 一、Nginx简介 负载均衡 动静分离 二、Nginx安装 Tomcat负载均衡 准备2个tomcat 修改此三处 修改后保存 启动两个Tomcat 修改Tomcat主界面​编辑 Nginx配置 查看nginx.conf配置 添加/更改配置​编辑 重启Nginx服务&#xff0c;让配置生效 出现权限问题 测试N…

计算机组成原理4小时速成:I/O系统,IO指令,编址方式,串行并行,程序查询传送,中断程序传送,DMA传送,接口组成

计算机组成原理4小时速成&#xff1a;I/O系统&#xff0c;IO指令&#xff0c;编址方式&#xff0c;串行并行&#xff0c;程序查询传送&#xff0c;中断程序传送&#xff0c;DMA传送&#xff0c;接口组成 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#x…

verilog generate

Verilog 生成块generate块允许乘以模块实例或执行任何模块的条件实例化。它提供了基于 Verilog 参数构建设计的能力。当需要多次重复相同的操作或模块实例&#xff0c;或者必须根据给定的 Verilog 参数有条件地包含某些代码时&#xff0c;这些语句特别方便。generate块不能包含…

centos7 clamav 杀毒软件安装

壹&#xff1a;编译安装 1&#xff0c;官网获取源码包 clamav官网地址 2&#xff0c;创建clamav 用户和存放病毒库目录 a, 创建clamav 用户和用户组 groupadd clamav && useradd -g clamav clamav && id clamavb,日志存放目录 mkdir -p /henan/clamav/lo…

Spring中的ApplicationContext所体现出来的工厂模式

Spring初体验 通常我们写代码时&#xff0c;先定义一个Class&#xff0c;然后再别的地方实例化&#xff0c;再进行调用&#xff0c;比如下边的Hello World的例子&#xff0c;类Hello有一个say()方法&#xff0c;用于打印出“Hello World”的字符串&#xff0c;另一个类App&…

python和R绘制箱线图+抖动点

python和R绘制箱线图抖动点 散点箱线图 IPCC AR6 https://www.ipcc.ch/ 通过散点展示数据的直观分布 x轴刻度标签如果是“连续”数据&#xff0c;可添加渐变背景。通过渐变来体现升温幅度&#xff0c;美观形象。 python版本&#xff1a; 先手搓数据&#xff1a; import pan…

【构建ML驱动的应用程序】第 11 章 :监控和更新模型

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

c++11 unique_lock 使用

我们知道c11 提供了很多的类模板供我们使用&#xff0c;其中就有 lock_guard&#xff0c;这个用法也很简单&#xff0c;像这样&#xff1a; std::mutex m_mutex; std::lock_guard<std::mutex> guard(m_mutex); mutex 的 lock 和 unlock 完全是自动的&#xff0c;无需我…

新鲜出炉|基于深度学习的运维日志领域新进展

作者&#xff1a;云智慧算法工程师 Hugo Guo 运维日志领域研究方向主要包含异常日志检测、日志模式解析、日志内容分类、日志告警等。本篇文章介绍了热门异常检测模型 DeepLog、A2Log 等模型&#xff0c;以及云智慧自研模型 Translog 等。与此同时&#xff0c;在文章最后介绍了…

springboot自定义starter实践

创建一个spring项目 仿照spring的规范&#xff0c;artifact命名为xxx-spring-boot-starter 按需添加必要的依赖 这里只作为测试&#xff0c;就按最低的需求来只勾选如下三个 lombok、spring-boot-configuration-processor、spring-boot-autoconfigure 默认生成的项目结构如下…

使用HuggingFace实现 DiffEdit论文的掩码引导语义图像编辑

在本文中&#xff0c;我们将实现Meta AI和Sorbonne Universite的研究人员最近发表的一篇名为DIFFEDIT的论文。对于那些熟悉稳定扩散过程或者想了解DiffEdit是如何工作的人来说&#xff0c;这篇文章将对你有所帮助。 什么是DiffEdit? 简单地说&#xff0c;可以将DiffEdit方法…

【论文解读】Self-Explaining Structures Improve NLP Models

&#x1f365;关键词&#xff1a;性能提升、文本分类、信息推理 &#x1f365;发表期刊&#xff1a;arXiv 2020 &#x1f365;原始论文&#xff1a;https://arxiv.org/pdf/2012.01786.pdf &#x1f365;代码链接https://github.com/ShannonAI/Self_Explaining_Structures_Impro…

Java内部类

Java当中内部类主要有4种&#xff0c;分别是静态内部类、实例内部类/非静态内部类、局部内部类&#xff08;几乎不用&#xff09;、匿名内部类。静态内部类&#xff1a;被static修饰的内部成员类 ①在静态内部类只能访问外部类中的静态成员 ②创建静态内部类对象时&#xff0c;…

PB 2019 R3 MSOLEDBSQL SQL Server not available in Database Profiles

pb2019 pb2021,安装SQL OLEDB驱动时的注意事项&#xff1a; I installed PB 2019 R3, but when I go to the Database Profiles Window, MSOLEDBSQL SQL Server is not listed. Please go to the registry to check and see the key MSOLEDBSQL exists under HKEY_LOCAL_MACHI…