打印

关于STC单片机的16位PWM实现方法

[复制链接]
8969|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nyf1972|  楼主 | 2009-9-27 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nyf1972 于 2009-9-27 21:03 编辑

刚入手STC,资料看了一些,发现STC12C5624AD的PWM是8位。想做成16位的,思考了半天,觉得可以实现,但是硬件没有做好,测试不了,希望大家看一下是否正确。
程序和解释如下:
      原理:利用PCA中断,在中断中实现引脚电平切换(变为低电),然后利用高速配的时候自动改变电平(变化为高电平)。以1/16的占空比输出为例子(PwmData=0x1000)

  工作时序:
  PCA 计数  0 > 0x1000 >  0xFFFF >  0  >  0x1000   
  匹配状态         匹配发生                            匹配发生
  中断状态                                    中断发生
  P3.7状态           1>0                       0>1         

   代码如下:
void PCATask(void)  interrupt 6 using 2
{
  PWM=0;//设置P3.7低电平
CCON&=~0X80;//清除中断标志位
CCAP0L=PwmData%256;
CCAP0H=PwmData/256;   //PWM是16位的PWM占空比数据。
}

//端口设置代码:
void InitPort(void)
{
  //P3.7 作为PWM输出,强上拉
  P3M1=0x7c;//0B01111100;
  P3M0=0xdc;//0B11011100;
}

void InitPwm(void)
{
CMOD=0x03;//0B00000011;// 1/2 clk,允许PWM中断  频率大约625~872kHz
CCON=0x40;//0b01000000;//启动 PCA 运行
CCAPM0=0x4c;//0B01001100;//当发生匹配平时候,输出翻转
CH=0;
CL=0;
}

这样做合理吗?实现的风险是什么??

相关帖子

沙发
nyf1972|  楼主 | 2009-9-28 10:44 | 只看该作者
看来还是要自己顶上去!

使用特权

评论回复
板凳
nyf1972|  楼主 | 2009-9-28 15:11 | 只看该作者
达人都到哪里去了?

使用特权

评论回复
地板
zhaoweige| | 2009-9-28 22:10 | 只看该作者
AVR有现成的16位PWM
为什么不用?

使用特权

评论回复
5
nyf1972|  楼主 | 2009-9-29 12:20 | 只看该作者
我不了解AVR,关键要解决当前这个问题

使用特权

评论回复
6
xhdzwzj| | 2009-10-27 11:25 | 只看该作者
主要解决的是硬件问题
第一个PWM是高8位输出
第二个PWM是低8位输出
单片机本身就是8位的,占空比的分辨率就是8位的
最好选择16位PWM输出的MCU

使用特权

评论回复
7
skycheung| | 2009-12-23 20:44 | 只看该作者
楼主,你好!我现在碰到同样的问题,想看看楼主是否解决了?谢谢!qq:403236759

使用特权

评论回复
8
osesemi| | 2012-1-6 14:14 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

107

帖子

1

粉丝