找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9100|回复: 14
收起左侧

求助STC15W4K16S4三路不同频率PWM输出

[复制链接]
ID:104779 发表于 2017-4-9 23:44 | 显示全部楼层 |阅读模式
50黑币
本帖最后由 hozhiwen 于 2017-4-9 23:45 编辑

各位大神们:
       本人正在学习STC15W系列单片机,有很多问题都不懂,现有事请教如下.
求大神们编一个程序来学习下,要求单片机输出三路PWM信号,指定P2.1 P2.2 P2.3为信号输出端,P2.1和P2.2输出频率为630Hz左右,P2.3输出频率为16KHz左右,而且各个输出端的占空比可单独赋值.什么精度要求都不高.我只求个过程.能帮助的请提供一下源程序.谢谢.

回复

使用道具 举报

ID:123289 发表于 2017-4-10 12:41 | 显示全部楼层
楼主的命题,对单片机初学者来说很典型:面对一个新问题如何解决?
其实就一条解决方案:研读手册!!!
问题是如何速读手册呢?我想以本命题为例向大家说说。
与楼主一样,我也从未用过单片机做PWM,处于与初学者同样的境况,唯一不同的是:我已领悟了单片机的精华,所以可以从容面对各类问题,下面就以我是思路,向大家介绍“如何解决自己未做过的单片机项目。”不一定对,仅供参考!

评分

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

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2017-4-10 12:43 | 显示全部楼层
方法是以下五点,请初学者记牢前三点:
一、依命题在手册中搜索关键项。(本命题是“PWM”)
二、由于单片机的特殊功能都在“特殊功能寄存器中”中体实现的,所以必须在“特殊功能寄存器中” 搜索关键项。(本命题是“PWM”)
三、研读并弄清搜索到的各“相关”“特殊功能寄存器”的各个位的表述。重点关心“复位值”。因为这涉及你要不要设置处理它。
四、结合命题,取其有用部分,弃其无用部分,做出相应设置(也就是初始化功能)。
五、最后才是写程序了。
回复

使用道具 举报

ID:123289 发表于 2017-4-10 13:10 | 显示全部楼层
我将自己如何利用手册找到解决楼主问题的详细步骤,且做成的截图,但在上传这些截图时,却上传不了(发表回复区如何上传截图我不会,界面不友好),就不在此答复了。手册是拒复制的PDF档,只能截图。
回复

使用道具 举报

ID:146949 发表于 2017-4-10 14:38 | 显示全部楼层
本帖最后由 wosiyabo 于 2017-4-10 14:39 编辑

楼上的经常回复帖子,但很少说到问题的点子上。
我以前研究过STC15W的硬件PWM,P2.1/P2.2/P2.3分别是6路带死区的硬件15位PWM3、4、5输出脚。
硬件15位PWM的频率来自时钟分频或定时器2的溢出,这个硬件15位PWM的频率源来自同一地方,不能同时输出不同的频率。
给你的建议是通过设置不同的时钟源输出两个不同频率的硬件PWM
PCA输出630HZ (P1.0/P1.1)
15位硬件PWM输出16KHz (P2.3)
用硬件PWM而不用定时器模拟PWM的好处是你的程序运行其它中断时对硬件PWM的干扰影响比较小。

评分

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

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2017-4-10 15:46 | 显示全部楼层
截取部分(未答复的部分),告诉楼上,如何解决楼主命题中的两个频率问题:
3、        假设系统振荡器频率为12M,对于命题中的:630Hz、 16KHz,折成周期脉冲数是:12M/630、12M/15K,约19048、750,考虑到“基准计数器”只有一个,取数值大的做周期(630Hz),另一个(16KHz)则用中断的方式,采用不断地修改T1/T2值来实现。为保证频率稳定,必须保证两个频率是整数倍的关系。16K/630约25,所以:
取19000作为周期,用于输出630Hz。取19000/25=760,作为16KHz的周期。
将PWMCH/L置成:19000,用于输出630Hz。
4、        P2.1、P2.2输出630Hz,只要将PWM3/4的T1/T2设置制成<19000的数就可以了,取不同的T1/T2得到不同的占空比。这时频率约为= 631.6符合题意630左右。
5、        P2.3输出16K,要在一个630Hz的周期中采用25次中断,且每次改动翻转比较值,设初始:
PWM5T1H/L=190、           PWM5T1H/L=570,            T2产生中断后,将参数修改成:
PWM5T1H/L=190+760*1、PWM5T1H/L=570+760*1; T2产生中断后,将参数修改成:
PWM5T1H/L=190+760*2、PWM5T1H/L=570+760*2; T2产生中断后,将参数修改成:
……(第23次T2中断后)
PWM5T1H/L=190+760*24、PWM5T1H/L=570+760*24;T2产生中断后,将参数修改成:
PWM5T1H/L=190、            PWM5T1H/L=570。
这样就保证:P2.3输出15.8K ,符合题意16K左右。
回复

使用道具 举报

ID:104779 发表于 2017-4-10 22:20 | 显示全部楼层
谢谢楼上各位给我的回复,希望能编个程序出来参考参考.
回复

使用道具 举报

ID:146492 发表于 2017-4-10 22:23 | 显示全部楼层
这个是力矩器里面的功能吗?
回复

使用道具 举报

ID:104779 发表于 2017-4-10 22:27 | 显示全部楼层
519762768 发表于 2017-4-10 22:23
这个是力矩器里面的功能吗?

不是,这个只是我想知道PWM多路不同频率输出是怎样才能实现的,单路或多路同频我会编.
回复

使用道具 举报

ID:123289 发表于 2017-4-11 11:24 | 显示全部楼层
比如,双频A和B,只有当A=B*N(N=正整数)时,才可以用中断,不断改变比较门槛值的方法来解决。
回复

使用道具 举报

ID:154197 发表于 2017-4-11 23:33 | 显示全部楼层
www点edawiki点com/index.php?category-view-38.htm
这里有个讲15的视频,60几讲有关于pwm的,你看看吧
回复

使用道具 举报

ID:104779 发表于 2017-5-6 22:32 | 显示全部楼层
helios 发表于 2017-4-11 23:33
www点edawiki点com/index.php?category-view-38.htm
这里有个讲15的视频,60几讲有关于pwm的,你看看吧

谢谢,看了一下,好像还是单个PWM设置的.
回复

使用道具 举报

ID:382298 发表于 2018-12-25 19:04 | 显示全部楼层
可以做到。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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