一起玩儿物联网人工智能小车(ESP32)——22. 用ESP32的LED PWM控制器给TT马达调速(C MicroPython)

新年快乐!

2024,我们一起玩儿!

摘要:本文主要介绍如何使用Mixly实现PWM波形的输出。

下面就先用Mixly实现PWM波形的输出。首先打开Mixly软件,这次还是先使用C语言来实现。如果你有示波器,或者逻辑分析仪,可以先用这两种仪器看一下输出的波形。我在这里的程序设置输出3路PWM信号,频率是10KHz,占空比分别是25%、50%和75%。使用的PWM占空比分辨率为12位,绑定的通道为0、1和2,使用的GPIO的输出端口为25、26、27。因为这个只需要设置一次,就会不停的输出PWM波形,因此,先到“控制”功能模块区找到“初始化”功能模块,然后再到“输入/输出”功能模块区找到PWM波形输出功能,然后按照上面的描述配置相应的参数,配置完成后,如下图所示:

然后,将ESP32的25、26、27引脚分别连接到逻辑分析仪的CH1、CH2和CH3,采样之后的PWM波形图如下图所示。

逻辑分析仪的通道1、通道2和通道3分别显示了频率为10kHz,占空比为25%、50%和75%的PWM信号,这证明我们的程序是没有任何问题的,成功实现了PWM信号的输出。

接下来看一下Mixly生成程序的源代码吧。如下所示:

void setup(){

  ledcSetup(0, 10000, 12);

  ledcAttachPin(25, 0);

  ledcSetup(1, 10000, 12);

  ledcAttachPin(26, 1);

  ledcSetup(2, 10000, 12);

  ledcAttachPin(27, 2);

  ledcWrite(0, 1024);

  ledcWrite(1, 2048);

  ledcWrite(2, 3072);

}

void loop(){

}

在源代码中可以看到:

ledcSetup()函数实现了LEDC控制器的初始化设置。这个函数有三个参数,第一个参数为使用的通道,第二个参数为PWM波形的频率,第三个参数为PWM波形的占空比分辨率。

ledcAttachPin()函数实现了GPIO引脚与LEDC通道的绑定,确定引脚与通道的对应关系。

ledcWrite()函数用于设置通道输出的占空比,第一个参数为通道号,第二个参数为占空比。注意这个占空比的取值不是0~100,而是和占空比分辨率相关,对应的是高电平脉冲的数量。对于12位占空比分辨率来说,这个比率的取值范围在0~4096(2的12次方)之间。

接下来就可以将程序中PWM通道绑定的GPIO引脚切换为控制智能小车运动的8个ESP32引脚了。一次可以输出4路PWM信号,分别绑定到4个轮子的一个驱动端上,可以设置成不同的占空比,看看这4个轮子的转速是不是就有区别了啊?这样就实现了最简单的用PWM波形控制智能小车行驶速度的目的了。

前面介绍了用Mixly生成C语言代码来产生PWM波的方法。接下来介绍一下如何使用MicroPython来实现相同的功能,这两者在实现上是有着一些差别的。所以,下面再来详细介绍一下,首先打开Mixly,选择Python ESP32。

在Mixly的Python开发环境中,默认所有的代码都执行一次,这与C语言的环境是不同的,在C语言中,setup()函数中的代码在启动阶段被执行一次,而loop()函数则会被循环调用。在Python中,如果想实现循环调用,则需要靠自己编写循环的逻辑代码来实现,这一点差别要知晓。

在Python的例子中,只以一个引脚为例,实现一路PWM信号的输出。这个功能需要使用3个功能控件,它们都在“输入/输出”功能模块中。首先,是“初始化PWM模拟输出”功能,在这个功能中,需要指定输出PWM信号的引脚,在管脚中输入25。第二步,将PWM输出的频率设置为10000,最后设置PWM输出的占空比为32768(50%)。在这里需要注意的就是占空比的设置值是在0~65535之间,不再和占空比分辨率这个参数相关,Python进行了统一的转换处理。这样处理的好处是开发者不用关注底层的细节了,Python将其转换为了统一的设置区间,相当于标准化了。而缺点也是显而易见的,这样处理势必增加了一些额外的工作量,会导致机器执行效率的下降。想想之前的ADC是不是也存在同样的处理?

这三个功能设置好的样子如下图所示。

这些功能对应的程序源代码为:

import machine

pwm25 = machine.PWM(machine.Pin(25))

pwm25.freq(10000)

pwm25.duty_u16(32768)

在这段代码中,首先是生成一个PWM对象的实例pwm25,生成这个对象实例的参数则为输出PWM波形的引脚对象。然后是PWM对象调用其freq()方法来设置PWM波形的频率。最后是duty_u16()方法来设置占空比,这个方法的后缀u16就表示要在2的16次方的范围内进行设置。如果在Tonny IDE中采用编码来开发,则还有别的设置方法。

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

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

相关文章

基于SSM的牙科诊所管理系统

基于SSM的牙科诊所管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 后台界面 摘要 随着社会的不断发展和人们生活水平的提高,牙…

C++面试宝典第13题:计算餐厅账单

题目 假如你是一家餐厅的收银员,需要编写一个程序来计算顾客的账单。程序应该能够接受顾客点的菜品和数量,并根据菜品的单价计算出总价。另外,程序还应该能够处理折扣和优惠券,并输出最终的账单金额。 解析 这道题主要考察应聘者使用面向对象的设计方法来解决实际问题的能力…

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中,提到过很多次,浏览器作为应用程序,本身是不具备向网络中发送网络请求的能力,要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动,通过网卡将请求消息发送出去,本篇博客就来探讨一下这个…

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…

LeetCode刷题--- 不同路径 III

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述递…

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发,建立了全流程可使用开源模…

Python中JSON模块的使用

1 JSON简介 JSON是JavaScript Object Notation即Javascript对象简谱的缩写。JSON是一种轻量级的数据交换格式,JSON数据是由键值对组成的结构,与Python中的字典类似,由尖括号包围的键值对组成,键和值的类型可以是字符串、数字、布…

【华为机试】2023年真题B卷(python)-滑动窗口最大值

一、题目 题目描述: 有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止, 每次窗口滑动产生一个窗口和(窗口内所有数的和),求窗口滑动产生的所有窗口…

电缆厂 3D 可视化管控系统 | 图扑数字孪生

图扑软件(Hightopo)专注于 Web 的 2D&3D 可视化,自主研发 2D&3D 图形渲染引擎、数据孪生应用开发平台和开发工具,广泛应用于 2D&3D 可视化、工业组态与数字孪生领域,图扑软件为工业物联网、楼宇、场馆、园区、数据中心、工厂、电…

shell编程一

shell 定义 Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语 可以编写功能强、代码简短的程序 #! Shebang 定义解释器 shell的分类和切换 # cat /etc/shells /bin/sh…

C语言学习----存储类别

存储类别 🌿本文是C Primer Pluse 中文版第12章的部分内容整理 🌱主要是围绕C中作用域 链接 存储期 展开 ,是后面进行多文件管理的基础~ 🌈概要 🍎明确对象 变量名 标识符的基本概念和含义 🍐作用域和链接描…

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

2023年度学习总结

想想大一刚开始在CSDN写作,这一坚持,就是我在CSDN的第九个年头,这也是在CSDN最有里程碑的一年,这一年我被评为CSDN的博客专家啦!先是被评为Unity开发领域新星创作者,写的关于一部分Unity开发的心得获得大家…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式,通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5,副本分片为1的ES结构。ES本身是一种noschema的结构,但是可以通过指定mapping编程schema的…

【深度学习:Convolutional Neural Networks】卷积神经网络入门指南

【深度学习:Convolutional Neural Networks】卷积神经网络入门指南 介绍为什么选择ConvNets而不是前馈神经网络?Input Image 输入图像基本架构Convolution Layer 卷积层 — 内核Pooling Layer 池化层Classification — Fully Connected Layer (FC Layer)…

如何加入到接单的大家庭,这个方法很简单~!方法A

第一步: 进某宝 搜 C语言代写 然后点销量 你把前4名的客服找到 问他们是某招技术 如果他们乐意,你就进他们的圈子。

Mybatis底层原理分析以及源码阅读

费话不多少先上图,我只喜欢画图分析,看图片: 有两个问题: 问题1: 我们一直在写Mapper/DAO只写了接口,没有写具体的实现吧? 【是的】 问题2: 没有写实现类就没办法实例化执行后续的操…

基于Matlab的各种图像滤波Filter算法(代码开源)

前言:本文为手把手教学 Matlab 平台下的各种图像滤波算法的教程,将编程代码与图像滤波知识相联系,以实战为例!博客中图像滤波算法包含:均值滤波、中值滤波、高斯滤波、双边滤波、引导滤波。图像滤波算法是计算机视觉领…

【Spring】AOP原来如此

AOP概述 什么是AOP的技术? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构AOP最早由AOP联盟的组织提出的,制定了一套…

摩尔线程S80对于软件的支持

摩尔线程对软件的支持 时间:2024年1月1日 显卡型号:MTT S80 主板型号:七彩虹 igame z590 火神 V20 CPU: intel core i5 10400f 内存: 海盗船3600 16*2 存储: 致态1Tb nvme 显卡的驱动是最新的。 游戏 S…