chuxh 发表于 2022-7-5 21:15

出现PWM引脚输出位低电平

本帖最后由 pzsh 于 2022-9-15 08:38 编辑

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

CCPR1L=315>>2;       //315=0b 1 0011 1011‬
CCP1CON |= (315<<4) & 0x30;
只要这样连续赋值就会出现PWM引脚输出位低电平

jiajs 发表于 2022-7-5 21:17

不再输出PWM信号?

chuxh 发表于 2022-7-5 21:19

嗯,但要是去掉其中任何一句就可以输出了!

pengf 发表于 2022-7-5 21:20


一直不知道那个低二位有啥用

zhanghqi 发表于 2022-7-5 21:22

timer2计数的时候不是直接忽略那两位了么?

stly 发表于 2022-7-5 21:24


TMR2和FOSC组成10位计数,然而FOSC能变化?

zwll 发表于 2022-7-5 21:29

不能变化和8位有什么区别?一直不理解

pengf 发表于 2022-7-5 21:31


好歹说说是哪个芯片啊

dengdc 发表于 2022-7-5 21:33


如果不知道是干啥的,可以修改一下,观察波形变化

chuxh 发表于 2022-7-5 21:35

16f1825

llljh 发表于 2022-7-5 21:38

没遇到过这种情况

heweibig 发表于 2022-7-5 21:40

怀疑可能是你写的代码, 由于数据类型混乱引起的溢出问题.
可以参考:
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));
}

zhenykun 发表于 2022-7-5 21:42

中间插播个delay是不是也可以?

yszong 发表于 2022-7-5 21:45

应该是配有正确配置导致的吧

chuxh 发表于 2022-7-5 21:48

嗯,我再好好缕一缕吧,有了好消息及时通知大家

tpgf 发表于 2022-8-2 10:23

是不是应该有个反应期啊

qcliu 发表于 2022-8-2 10:44

看寄存器的说明啊

coshi 发表于 2022-8-2 10:51

外部引脚是如何接入的呢

drer 发表于 2022-8-2 11:18

贴全一点 这么点看不出来啥

wiba 发表于 2022-8-2 11:44

模式配置成哪种了啊
页: [1] 2
查看完整版本: 出现PWM引脚输出位低电平