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

PWM正相输出和PWM反相输出的各是怎样的工作原理

泰凌微8258芯片的GPIO_PC4可以作为PWM反相输出引脚。舵机通常由PWM信号控制,一般周期为20ms(50Hz),脉冲宽度在0.5ms到2.5ms之间对应0度到180度。步骤:初始化PWM模块,设置PWM频率为50Hz(周期20ms)。配置GPIO_PC4为PWM输出功能。根据舵机角度计算脉冲宽度,并设置PWM占空比。注意:由于GPIO_PC4是反相输出,意味着输出的PWM波形是反相的。通常舵机控制信号是高电平脉冲,反相后则变成低电平脉冲。但舵机实际上是根据脉冲的持续时间来识别,而不是电平的高低。但是,通常舵机控制信号是正脉冲,所以如果使用反相输出,我们需要调整占空比的计算方式,使得反相后的脉冲宽度仍然符合要求。实际上,反相输出意味着正常PWM输出为高电平的时间,在反相输出上为低电平,反之亦然。因此,如果我们希望反相输出一个占空比为d的PWM波形,那么实际上我们应该设置PWM模块的占空比为1-d(如果d是相对于周期的比例)。但是,舵机控制信号要求的是正脉冲宽度,如果我们使用反相输出,则实际输出的脉冲是负脉冲,这可能会导致舵机不工作。因此,我们需要确保硬件连接上能够处理反相信号,或者使用一个非反相的输出引脚。如果必须使用这个反相引脚,我们可以通过调整占空比来使得反相后的正脉冲(即低电平时间)宽度符合要求,但这需要硬件上的配合(例如,舵机信号线接的是低电平有效?)或者使用反向器电路。然而,通常舵机信号是正脉冲,所以反相输出会得到负脉冲,这不符合舵机的要求。因此,如果硬件设计已经固定,使用反相输出引脚直接驱动舵机可能无法正常工作。在这种情况下,我们可以考虑:方案1:更换到非反相输出的PWM引脚。
方案2:在软件上调整,将占空比设置为(周期-脉冲宽度)来使得反相后的正脉冲(低电平)宽度为我们需要的脉冲宽度。但是注意,反相输出后,整个波形反相,所以原本的高电平脉冲变成了低电平脉冲,而低电平变成了高电平。舵机需要的是正脉冲,所以如果我们希望舵机看到的是正脉冲,我们可能需要一个外部反相器(如三极管)将信号再次反相。但是,如果硬件设计已经使用这个反相输出引脚直接连接舵机,那么我们必须让这个反相引脚输出一个反相的PWM波形,使得经过反相后,舵机接收到的信号是正脉冲。实际上,这相当于我们想要输出的脉冲宽度是x,那么我们就让PWM模块输出一个占空比为(周期-x)的波形,这样反相后,正脉冲的宽度就是x。例如,我们希望输出0.5ms的正脉冲,那么反相输出引脚应该输出一个19.5ms的正脉冲和0.5ms的负脉冲(因为反相,所以实际舵机信号线上是0.5ms的正脉冲和19.5ms的负脉冲)。但是舵机只关心正脉冲的宽度,所以这样是可以的。但是请注意,舵机通常要求周期为20ms,所以我们的PWM周期仍然是20ms。因此,具体设置如下:
假设我们需要脉冲宽度为t(介于0.5ms到2.5ms),则反相输出引脚应该输出的正脉冲宽度为20ms - t,占空比 = (20ms - t) / 20ms。但是,由于反相输出引脚的特性,PWM模块输出的波形是反相的,所以如果我们设置PWM模块输出正脉冲宽度为20ms-t,那么反相后的波形就是正脉冲宽度为t。然而,在PWM模块中,我们设置的是高电平的时间,还是占空比的值?这取决于PWM模块的配置。通常,PWM模块可以设置占空比,我们可以通过设置占空比来调整高电平时间。因此,我们需要:
周期T = 20ms,频率50Hz。
对于角度0度,需要脉冲0.5ms,则反相输出引脚需要设置高电平时间为20-0.5=19.5ms,占空比=19.5/20=97.5%。
对于角度180度,需要脉冲2.5ms,则反相输出引脚需要设置高电平时间为20-2.5=17.5ms,占空比=17.5/20=87.5%。但是注意:反相输出引脚会将这些波形反相,所以舵机实际上会看到:
0度:高电平时间0.5ms,低电平时间19.5ms。
180度:高电平时间2.5ms,低电平时间17.5ms。这正是我们需要的。所以,步骤:初始化PWM,设置周期为20ms(
http://www.xdnf.cn/news/20046.html

相关文章:

  • 别再和正则表达式死磕了!这套AI工具集让你的开发效率翻倍⚙️[特殊字符]
  • OPENCV复习第二期
  • 【ffmepg+ AI 】从mp3歌曲提取伴奏(纯音乐)
  • SQL常见索引失效导致慢查询情况
  • mysql集群部署(Mysql Group Replication)
  • 如何将数据从 Infinix 转移到 Infinix ?
  • 生活在数字世界:一份人人都能看懂的网络安全生存指南
  • @Percona XtraBackup 进行 MySQL 备份恢复
  • Day35 TCP实时聊天程序实现(多线程)
  • 3 步搞定顶刊科研插图!用 GPT-5 反推提示词,Nano Banana 模型一键出图,附实操演示
  • 国内外开源大模型 LLM整理
  • 2025 年高教社杯全国大学生数学建模竞赛E 题 AI 辅助智能体测完整成品 思路 模型 代码 结果分享!全网首发高质量!!!
  • 【LeetCode】22、括号生成
  • 算法之二叉树
  • 【Python基础】 15 Rust 与 Python 基本类型对比笔记
  • C# 修改基类List中某一元素的子类类型
  • 11 月广州见!AUTO TECH China 2025 汽车内外饰展,解锁行业新趋势
  • Leetcode—3516. 找到最近的人【简单】
  • ORA-12547: TNS:lost contact
  • 算法模板(Java版)_字符串、并查集和堆
  • matlab版本粒子群算法(PSO)在路径规划中的应用
  • PDF批量加盖电子骑缝章的方法!高效办公必备
  • 每天学习一点点之湿敏等级以及肖特基二极管
  • C#之LINQ
  • wps的excel如何转为谷歌在线表格
  • testng.xml
  • Opencv: cv::LUT()深入解析图像块快速查表变换
  • sqlserver2008导入excel表数据遇到的问题
  • 无线路由器:从家庭上网到智慧互联的核心设备
  • 人工智能学习:LR和SVM的联系与区别?