出现PWM引脚输出位低电平

[复制链接]
659|14
 楼主| chuxh 发表于 2020-12-1 20:07 | 显示全部楼层 |阅读模式
在PWM半桥互补输出中占空比寄存器高8位CCPR1L和低两位(CCP1CON 寄存器中的 DCxB<1:0> 位)不能连续赋值问题比如:

CCPR1L=315>>2;       //315=0b 1 0011 1011‬
CCP1CON |= (315<<4) & 0x30;
只要这样连续赋值就会出现PWM引脚输出位低电平
stly 发表于 2020-12-1 20:11 | 显示全部楼层
不再输出PWM信号?
 楼主| chuxh 发表于 2020-12-1 20:15 | 显示全部楼层
嗯,但要是去掉其中任何一句就可以输出了!
pengf 发表于 2020-12-1 20:18 | 显示全部楼层
一直不知道那个低二位有啥用
houcs 发表于 2020-12-1 20:24 | 显示全部楼层
timer2计数的时候不是直接忽略那两位了么?
chenjunt 发表于 2020-12-1 20:28 | 显示全部楼层
TMR2和FOSC组成10位计数,然而FOSC能变化?
kangzj 发表于 2020-12-1 20:31 | 显示全部楼层
不能变化和8位有什么区别?一直不理解
llia 发表于 2020-12-1 20:34 | 显示全部楼层
好歹说说是哪个芯片啊
zhuww 发表于 2020-12-1 20:40 | 显示全部楼层
如果不知道是干啥的,可以修改一下,观察波形变化
 楼主| chuxh 发表于 2020-12-1 20:43 | 显示全部楼层
zhuhuis 发表于 2020-12-1 20:47 | 显示全部楼层
没遇到过这种情况
chenho 发表于 2020-12-1 20:50 | 显示全部楼层
怀疑可能是你写的代码, 由于数据类型混乱引起的溢出问题.
可以参考:
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));
}
pengf 发表于 2020-12-1 20:54 | 显示全部楼层
中间插播个delay是不是也可以?
renyaq 发表于 2020-12-1 21:00 | 显示全部楼层
应该是配有正确配置导致的吧
 楼主| chuxh 发表于 2020-12-1 21:03 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部