找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机PWM要做到快速关断,如何做?

  [复制链接]
跳转到指定楼层
楼主
最近做一个小项目,用到了STC的一个单片机,功能如下:
用PWM输出调节LED灯的亮度。在STC的烧录软件上下了个例程,改改后就能达到效果,调节起来没有问题,
现需要增加一个功能,:在保持亮度的前提下,要快速的开或关,类似做闪灯的效果,但PWM的亮度要保持不变。
请问各位,如何做?pwm有专用的位来控制开关的吗?最好用软件来实现。求指点。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-8-9 17:29 | 只看该作者
硬件PWM还是软件PWM?
回复

使用道具 举报

板凳
ID:959678 发表于 2021-8-9 17:53 | 只看该作者
关断具体是指什么?是直接没有PWM输出了嘛?那就直接停止输出就好了啊?具体看你PWM怎么实现的,用TIM就关TIM,用IO就拉IO

亮度不变,你可以提高PWM频率来伪装不变吧

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:401564 发表于 2021-8-9 18:46 | 只看该作者
有的STC有专门的CR位控制PWM的开关,功能就像定时器的TR位一样,你自己开关就可以
有的STC单片机在PWM设有翻转寄存器,你可以通过对应在寄存器控制高电平或者低电平
可以用定时器来产生闪灯需要的时间,时间到了就控制PWM,这可以达到某个亮度PWM闪灯的效果了
这STC的PWM功能在数据手册上可以说是洋洋洒洒的一大堆,乍一看什么都不会,但毕竟你是做项目的,十几个页面的数据手册是肯定要认真看一下的,用不了你多长时间的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:213173 发表于 2021-8-9 18:47 | 只看该作者
按这波形编程就是你想要的效果


评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:959690 发表于 2021-8-9 18:57 | 只看该作者
软件PWM的话,个人认为楼主可以通过使用一个开关中断来实现对pwm值的清除来实现对灯亮度的熄灭,然后将先前的pwm值保存在一个变量中,在再次按下按键时重新赋值
回复

使用道具 举报

7#
ID:451718 发表于 2021-8-9 19:01 | 只看该作者
首先要搞清楚PMW的脉宽值,决定了灯光的亮度;
然后通过改变PMW的脉宽值,你就可以改变灯光亮度了;当PMW脉宽减到0或者一个零界点的时候,灯就不会亮了。
最后,你只需要搞明白,如何在PMW输出为某个值时,直接关掉中断然后把输出端口置0,这时灯就灭了。重新开中断,PMW输出仍然是关掉瞬间的那个值,也就是灯光亮度不会变。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:497468 发表于 2021-8-9 19:15 | 只看该作者
lkc8210 发表于 2021-8-9 17:29
硬件PWM还是软件PWM?

硬件PWM   
回复

使用道具 举报

9#
ID:497468 发表于 2021-8-9 19:17 | 只看该作者
elmagnifico51 发表于 2021-8-9 17:53
关断具体是指什么?是直接没有PWM输出了嘛?那就直接停止输出就好了啊?具体看你PWM怎么实现的,用TIM就关T ...

关断就是把灯灭掉,相当于在PWM上面装个开关,外部触发它开和关, 有信号就开,没信号就关,开关的速度要能达到1KZ
回复

使用道具 举报

10#
ID:123289 发表于 2021-8-9 20:13 | 只看该作者
直接下令判断即可
回复

使用道具 举报

11#
ID:959346 发表于 2021-8-9 23:13 | 只看该作者
问题不是太明确是下面2种情况的哪种:
1 如果只是要关闭PWM,直接写对应的寄存器即可。如果使用库的,找对应的开关函数即可。
2 如果是按下开关后的响应时间,那就需要看你程序的响应时间了,一般是减少延时函数,将主循环的最大响应周期控制在你能接受的时间内,如果做不到,就将触发方式做成中断触发,在中断内关闭了。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

12#
ID:497468 发表于 2021-8-11 18:01 | 只看该作者
感谢各位,脉宽调整亮度,这个我已经实现了,我现在用的是STC12C5608AD 它有4路硬件PCA/PWM,      现在关于关断的问题,Y_G_G ,robinsonlin 二位的方法我会去测试,因为要达到1KHZ,程序的扫描期就不能大于1MS,  如果用中断来控制,如何判断触发信号结束呢  我看了这个IC的资料,只有下降沿触发和低电平触发,   我现在触发中断了,执行我要的关灯命令,当触发结束了,我如何判断,再执行亮灯呢?我用INT0,和1做外部触发。
回复

使用道具 举报

13#
ID:892737 发表于 2021-8-11 18:07 | 只看该作者
亲身体验,最近在做学校校内赛,硬件pwm关断的比较快,使用软件的话电机会继续运作一小会
回复

使用道具 举报

14#
ID:959221 发表于 2021-8-11 19:08 | 只看该作者
用定时器,控制PWM启动和关闭.定时器控制闪灯频率,PWM控制亮度
回复

使用道具 举报

15#
ID:814525 发表于 2021-8-11 19:32 | 只看该作者
看看STC15的指令适不适合
PCA_PWM0 &= ~3;                                //PWM0正常输出
PCA_PWM0 |=  3;                                //PWM0一直输出0
回复

使用道具 举报

16#
ID:497468 发表于 2021-8-16 17:25 | 只看该作者
感谢各位,现在调试的差不多了,感觉还可以,  因为有多路PWM,用关CR的方法不行,会把全部关断,我试过用PCA_PWM2 = 0x00;   将计数器和相对应的PWM关掉,实际应用中关不掉,最后用个笨办法,关断时直接用PWM_Adj2(255); 直接用来做关断,效果挺好,  反应迅速。  关于外部触发的方法,我没有用中断了,因为中断开了没办法关,我现在就直接用I0检测,if(!trigger1) M31=1;唯一的缺点就是只能达到100HZ左右,在实际应用中也够用了,(触发信号由客户提供,他只给一个电压,触发时间不定的,所 以不能按固定的频率用定时器去做,)
另外,原来一直用STC提供的9-16位PWM的程序在做,发现在调节到最高或最低时,有点失控,折腾了好久,将高位和低位都限掉也不好用,现直接用8位 的程序,效果很好,比较稳定,好长的弯路,
回复

使用道具 举报

17#
ID:420836 发表于 2021-8-17 07:16 | 只看该作者
在软件中,将占空比设置为对应零输出PWM的值,同时禁用功率级。
回复

使用道具 举报

18#
ID:879348 发表于 2021-8-17 09:43 | 只看该作者
有些单片机存在关不停的问题,设置0实际还有脉冲
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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