【正点原子K210连载】第五十七章 machine.PWM类实验 摘自【正点原子】DNK210使用指南-CanMV版指南
第五十七章 machine.PWM类实验本章将介绍machine模块中的PWM类。通过本章的学习读者将学习到machine模块中PWM类的使用。本章分为如下几个小节19.1 machine.PWM类介绍19.2 硬件设计19.3 程序设计19.4 运行验证19.1 machine.PWM类介绍machine.PWM类是machine模块内提供的类该类主要用于产生PWMPulse-width modulation脉冲宽度调制且能够任意通过Kendryte K210上的47个自由IO进行输出。每个PWM都依赖于一个Timer对象且当Timer对象于PWM对象绑定后Timer对象便不能再做为普通的定时器使用。因为Kendryte K210拥有3个硬件定时器且每个硬件定时器有4个通道因此使用machine.PWM类最大可以同时产生12路PWM。machine.PWM提供了PWM构造函数用于创建一个PWM对象PWM构造函数如下所示class PWM(tim, freqNone, dutyNone, pin-1, enableTrue)通过PWM构造函数可以通过指定参数创建并初始化一个PWM对象。tim指的是Timer对象Timer对象可以通过machine.Timer类中的Timer构造函数进行构造。freq指的是PWM的频率。duty指的是PWM占空比即一个PWM周期中高电平所占时间的百分比。pin指的是PWM的输出引脚也可以不设置而是使用FPIOA管理器进行分配。enable指的是是否在PWM对象构造成功后便开始产生并输出PWM当为True时PWM对象会在被构造成功后便开始产生并输出PWM当为False时PWM对象在被构造成功后并不会开始产生并输出PWM。PWM构造函数的使用示例如下所示from board import board_info from machine import Timer from machine import PWM timerTimer(Timer.TIMER0,Timer.CHANNEL0,MODE_PWM)pwmPWM(timer,freq500000,duty50,pinboard_info.LEDR,enableTrue)machine.PWM类为PWM对象提供了enable()方法用于开启PWM对象产生并输出PWMenable()方法如下所示PWM.enable()enable()方法用于开启PWM对象产生并输出PWM方法执行后Kendryte K210上指定的IO引脚并会输出特定频率和占空比的PWM。enable()方法的使用示例如下所示from board import board_info from machine import Timer from machine import PWM timerTimer(Timer.TIMER0,Timer.CHANNEL0,MODE_PWM)pwmPWM(timer,freq500000,duty50,pinboard_info.LEDR,enableFalse)pwm.enable()machine.PWM类为PWM对象提供了disable()方法用于轻质PWM对象产生并输出PWMdisable()方法如下所示PWM.disable()disable()方法用于停止PWM对象产生并输出PWM方法执行后Kendryte K210的特定IO引脚便会停止输出PWM。disable()方法的使用示例如下所示from board import board_info from machine import Timer from machine import PWM timerTimer(Timer.TIMER0,Timer.CHANNEL0,MODE_PWM)pwmPWM(timer,freq500000,duty50,pinboard_info.LEDR,enableTrue)pwm.disable()machine.PWM类为PWM对象提供了freq()方法用于配置或获取PWM对象产生的PWM的频率freq()方法如下所示PWM.freq(freq)freq()方法用于配置或获取PWM对象产生的PWM频率。freq指的是要配置的PWM频率PWM频率的配置是即时生效的或该参数为空则freq()方法将返回当前PWM对象产生PWM的频率。freq()方法的使用示例如下所示from board import board_info from machine import Timer from machine import PWM timerTimer(Timer.TIMER0,Timer.CHANNEL0,MODE_PWM)pwmPWM(timer,freq500000,duty50,pinboard_info.LEDR,enableTrue)pwm.freq(100000)machine.PWM类为PWM对象提供了duty()方法用于配置或获取PWM对象产生的PWM的占空比duty()方法如下所示PWM.duty(duty)duty()方法用于配置或获取PWM对象产生的PWM占空比这里的占空比指的是PWM高电平时间占整个PWM周期的百分比。duty指的是要配置的PWM占空比PWM占空比的配置是即时生效的或该参数为空则duty()方法将返回当前PWM对象产生PWM的占空比。duty()方法的使用示例如下所示from board import board_info from machine import Timer from machine import PWM timerTimer(Timer.TIMER0,Timer.CHANNEL0,MODE_PWM)pwmPWM(timer,freq500000,duty50,pinboard_info.LEDR,enableTrue)pwm.duty(66)19.2 硬件设计19.2.1 例程功能创建一个PWM对象并创建一个PWM模式的Timer对象与之绑定按下KEY0按键后增加PWM对象输出PWM的占空比按下KEY1按键后减少PWM对象输出PWM的占空比19.2.2 硬件资源双色LEDLEDR - IO24独立按键KEY0按键 - IO18KEY1按键 - IO1919.2.3 原理图本章实验内容主要讲解machine.PWM类的使用无需关注原理图。19.3 程序设计19.3.1 machine.PWM类有关machine.PWM类的介绍请见第19.1小节《machine.PWM类介绍》。19.3.2 程序流程图图19.3.2.1 machine.PWM类实验流程图19.3.3 main.py代码main.py中的脚本代码如下所示from board import board_info from fpioa_manager import fm from maix import GPIO import time from machine import Timer from machine import PWM fm.register(board_info.KEY0,fm.fpioa.GPIOHS0)fm.register(board_info.KEY1,fm.fpioa.GPIOHS1)key0GPIO(GPIO.GPIOHS0,GPIO.IN,GPIO.PULL_UP)key1GPIO(GPIO.GPIOHS1,GPIO.IN,GPIO.PULL_UP)timer0Timer(Timer.TIMER0,Timer.CHANNEL0,modeTimer.MODE_PWM)# 构造PWM对象 pwm0PWM(timer0,freq500000,duty50,pinboard_info.LEDR,enableTrue)duty50whileTrue:ifkey0.value()0:time.sleep_ms(20)ifkey0.value()0:dutyduty10whilekey0.value()0:pass elif key1.value()0:time.sleep_ms(20)ifkey1.value()0:dutyduty-10whilekey1.value()0:passifduty0:duty10elif duty110:duty100# 修改PWM占空比ifpwm0.duty()!duty:pwm0.duty(duty)time.sleep_ms(10)可以看到首先是初始化使用到独立按键的IO然后构造了一个PWM模式的Timer对象。接下来构造了一个PWM对象PWM对象的配置为从红色LED连接的IO引脚输出一个频率为500KHz占空比为50%的PWM。最后就是在一个循环中读取按键的状态当读取到KEY0按键被按下则增加PWM输出的占空比具体应表现为红色LED的亮度减少当读取到KEY1按键被按下则减少PWM输出的占空比具体应表现为红色LED的亮度增加。19.4 运行验证将DNK210开发板连接CanMV IDE并点击CanMV IDE上的“开始(运行脚本)”按钮后此时便可看到红色LED处于半亮状态若按下KEY0按键则可以看到红色LED的亮度减小这是因为PWM输出的占空比增加导致的若按下KEY1按键则可以看到红色LED的亮度增加这是因为PWM输出的占空比减小导致的。

相关新闻

CVE-2026-1700:房屋租赁系统XSS漏洞深度剖析与修复指南

CVE-2026-1700:房屋租赁系统XSS漏洞深度剖析与修复指南

CVE-2026-1700:projectworlds 房屋租赁与房产列表系统中的跨站脚本漏洞 严重性:中等 类型:漏洞 概述 在 projectworlds 房屋租赁与房产列表系统 1.0 版本中发现一处安全弱点。此漏洞影响到文件 /app/sms.php 中的未知代码。对参数 Message 的…

2026/7/4 8:41:25 阅读更多 →
强化学习:慢网络何以学得更快

强化学习:慢网络何以学得更快

在强化学习(RL)中,智能体通过试错与环境反复交互,学习一种能最大化奖励信号的策略。 近年来,强化学习智能体与深度神经网络结合使用取得了显著成果。其中核心部分是2015年提出深度Q网络(DQN)智能…

2026/7/5 5:47:07 阅读更多 →
阿里云渠道商:阿里云 ECS 从安全组到云防火墙的实战防护指南

阿里云渠道商:阿里云 ECS 从安全组到云防火墙的实战防护指南

引言 :云服务器安全现状:90%攻击源于配置疏漏 一、基础防护层:安全组精细化控制 安全组核心作用:网络流量“门禁系统” 3大必做配置: 1. 最小化开放端口(例:仅允许80/443) 2. I…

2026/7/5 13:58:51 阅读更多 →

最新新闻

AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划 一、Agent 不能直接替用户签名 AI Agent 能帮用户分析资产、构造交易、调用合约、提交治理提案。但链上操作一旦签名,就具备真实资产和权限后果。让 Agent 直接决定并发起签名,是非常危险的设计。…

2026/7/6 5:28:37 阅读更多 →
League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器

League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器

League-Toolkit终极指南:英雄联盟玩家的智能助手与效率神器 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款基…

2026/7/6 5:28:37 阅读更多 →
3个关键设计如何让一个API征服六大音乐平台?

3个关键设计如何让一个API征服六大音乐平台?

3个关键设计如何让一个API征服六大音乐平台? 【免费下载链接】listen1-api One API for all free music in China 项目地址: https://gitcode.com/gh_mirrors/li/listen1-api 还在为音乐应用开发中对接多个平台API而头疼吗?面对网易云音乐、QQ音乐…

2026/7/6 5:26:37 阅读更多 →
AI 内容风格控制:风格一致不能牺牲事实边界

AI 内容风格控制:风格一致不能牺牲事实边界

AI 内容风格控制:风格一致不能牺牲事实边界 一、风格不是唯一目标 AI 内容生成常要求风格一致:更活泼、更专业、更像品牌语气。但如果为了风格牺牲事实边界,内容会变得危险。产品介绍、技术文档、行业报告、新闻摘要,都不能只追求…

2026/7/6 5:26:37 阅读更多 →
ROS Noetic gmapping 建图实战:Gazebo仿真环境 5 步完成地图保存(附完整launch文件)

ROS Noetic gmapping 建图实战:Gazebo仿真环境 5 步完成地图保存(附完整launch文件)

ROS Noetic下gmapping建图与地图保存实战指南 在机器人自主导航领域,SLAM(即时定位与地图构建)技术扮演着至关重要的角色。本文将详细介绍如何在ROS Noetic环境中,利用gmapping算法实现Gazebo仿真环境下的地图构建,并通…

2026/7/6 5:26:37 阅读更多 →
GTA5线上小助手:终极免费开源工具,解锁洛圣都无限可能

GTA5线上小助手:终极免费开源工具,解锁洛圣都无限可能

GTA5线上小助手:终极免费开源工具,解锁洛圣都无限可能 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 还在为GTA5线上模式的重复任务感到厌倦?想要个性化角色却受限于…

2026/7/6 5:24:36 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻