找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 687|回复: 5
打印 上一主题 下一主题
收起左侧

如何用一个定时器产生两个相位相差百分之五十的百分之二十占空比的pwm波

[复制链接]
跳转到指定楼层
楼主
ID:819526 发表于 2023-11-21 08:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何用一个单片机定时器产生两个相位相差百分之五十的百分之二十占空比的pwm波,pwm频率时2.5k不能使用定时器中断因为使用的单片机资源有限,频繁进入中断会打乱其他程序执行,所以我想问一下如何使用一个定时器完成这个内容。单片机型号CPS32K21
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:819526 发表于 2023-11-21 14:09 | 只看该作者
找到方法了,中央对齐模式,然后设置两个通道输出极性相反通过设置互补的占空比来形成180°相位差。
回复

使用道具 举报

板凳
ID:123289 发表于 2023-11-21 15:47 | 只看该作者
设:
1、定时器中断时间为:T,即每经过时间T中断一次。
2、2NT为PWM的周期。
3、两个PWM分别从P1.0、P1.1输出。

方案:定义三个变量
1、变量1:TW,用于计数PWM周期(初始=0,计数值 0-2N)。
2、变量2:TH,用于计数脉部宽度(输出=1的时间)。
3、变量3:TH2,用于计数P1.1的脉冲宽度(=1的时间)。
  
中断服务程序这样写:
1、【PWM的周期】:每次中断 TW + 1 ,当TW = 2N 时,让TW = 0,重新计数,这样就完成PWM周期计数。
2、动作判定:
   【第一路P1.0】
   当TW = 0 时,让 P1.0 = 1,PWM输出1;
   当TW = TH 时,让P1.0 = 0,PWM输出0,这样第一路P1.0输出1的宽度就是TH。
   
   【第二路P1.1】
   当TW = N 时,让 P1.1 = 1,这样,P1.1以50%的相差输出PWM=1;要点:同时让TH2 = TH,开始计时P1.1输出1的时间。(退出程序,跳过3、)            
   当TW <> N 时,执行以下3、。

3、【P1.1 = 1的时间】
    如果TH2 = 0,什么也不做,保持现状(此时P1.1必定输出0)。     
    如果TH2 <> 0,则 TH2 -1(P1.1 = 1计时,此时P1.1必定输出1), 当TH2 = 0 时(减成0时,1应该结束了),让P1.1 = 0,这样第二路输出1的宽度就也是TH。

如此,选择不同的TH值,可得到不同的占空比,而两个输出的相差保持50%。注意:必须保证TH < TW。
回复

使用道具 举报

地板
ID:819526 发表于 2023-11-21 16:52 | 只看该作者
yzwzfyz 发表于 2023-11-21 15:47
设:
1、定时器中断时间为:T,即每经过时间T中断一次。
2、2NT为PWM的周期。

我就是不想频繁进入中所以才有的这个问题,现在已经解决了,采取的是相反极性加中间对齐的pwm解决的,以为相位正好差一半所以刚刚好满足要求
回复

使用道具 举报

5#
ID:275826 发表于 2023-11-23 17:33 | 只看该作者
不用中断,用查询方法能精确吗?
回复

使用道具 举报

6#
ID:491577 发表于 2023-11-25 00:49 | 只看该作者
楼主神人呀,定时器不用中断可以两个做出20%PWM,牛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表