打印
[PIC®/AVR®/dsPIC®产品]

pic单片机PWM占空比问题

[复制链接]
1838|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abcd44|  楼主 | 2019-6-28 08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 abcd44 于 2019-6-28 08:54 编辑

     在PWM半桥互补输出中占空比寄存器高8位CCPR1L和低两位(CCP1CON 寄存器中的 DCxB<1:0> 位)不能连续赋值问题比如:

CCPR1L=315>>2;       //315=0b 1 0011 1011‬
CCP1CON |= (315<<4) & 0x30;
只要这样连续赋值就会出现PWM引脚输出位低电平,不再输出PWM信号,但要是去掉其中任何一句就可以输出了!


麻烦大师们给解读下这是怎么回事呢???



使用特权

评论回复
沙发
meeagle| | 2019-6-28 10:08 | 只看该作者
一直不知道那个低二位有啥用,timer2计数的时候不是直接忽略那两位了么?TMR2和FOSC组成10位计数,然而FOSC能变化?不能变化和8位有什么区别?一直不理解

使用特权

评论回复
板凳
奔波儿熊| | 2019-6-28 11:43 | 只看该作者
好歹说说是哪个芯片啊

使用特权

评论回复
地板
小灵通2018| | 2019-6-28 20:00 | 只看该作者
如果不知道是干啥的,可以修改一下,观察波形变化

使用特权

评论回复
5
abcd44|  楼主 | 2019-7-2 00:00 | 只看该作者
奔波儿熊 发表于 2019-6-28 11:43
好歹说说是哪个芯片啊

16f1825

使用特权

评论回复
6
abcd44|  楼主 | 2019-7-2 00:00 | 只看该作者
奔波儿熊 发表于 2019-6-28 11:43
好歹说说是哪个芯片啊

16f1825

使用特权

评论回复
7
decoding| | 2019-7-2 09:40 | 只看该作者
没遇到过这种情况

使用特权

评论回复
8
CoolSilicon| | 2019-7-2 10:47 | 只看该作者
怀疑可能是你写的代码, 由于数据类型混乱引起的溢出问题.
可以参考:
void EPWM1_LoadDutyValue(uint16_t dutyValue)
{
   // Writing to 8 MSBs of pwm duty cycle in CCPRL register
    CCPR1L = ((dutyValue & 0x03FC)>>2);
   
   // Writing to 2 LSBs of pwm duty cycle in CCPCON register
    CCP1CON = ((uint8_t)(CCP1CON & 0xCF) | ((dutyValue & 0x0003)<<4));
}

使用特权

评论回复
9
abcd44|  楼主 | 2019-8-2 17:08 | 只看该作者
CoolSilicon 发表于 2019-7-2 10:47
怀疑可能是你写的代码, 由于数据类型混乱引起的溢出问题.
可以参考:
void EPWM1_LoadDutyValue(uint16_t d ...

多谢大师解答  最近忙没上论坛  

使用特权

评论回复
10
xixi2017| | 2019-8-5 23:43 | 只看该作者
解决了吗

使用特权

评论回复
11
xixi2017| | 2019-8-5 23:43 | 只看该作者
中间插播个delay是不是也可以?

使用特权

评论回复
评论
abcd44 2019-8-15 15:21 回复TA
什么意思需要适当延时吗, 我最后用的移位操作,单独取一位然后单独按位赋值就没有问题了 
12
functions| | 2019-8-6 13:27 | 只看该作者
应该是配有正确配置导致的吧

使用特权

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

本版积分规则

13

主题

67

帖子

0

粉丝