哈哈哈哈 发表于 2024-8-20 15:23:02

8051U 10位PWM 问题

本帖最后由 DebugLab 于 2024-8-22 12:41 编辑

10位PWM如下

10位由两个部分组成{XCCAPnL,CCAPnL},XCCAPnL位置如下:


测试代码如下
void PWM_init()
{
    //P11 推挽输出
    P1M0 |= 0x02; P1M1 &= ~0x02;

    CCON = 0x00; //初始化 具体见下图
    CMOD = 0x08; //设置时钟是系统时钟
    CL = 0x00;   //这两个计数器清零
    CH = 0x00;
   
    CCAPM2 = 0x42;      //PCA 模块 2 为 PWM 工作模式
    PCA_PWM2 = 0xc0;    //PCA 模块 2 输出 10 位 PWM
    CCAP2L = 62;      //PWM 占空比为 96.875%[(400H-20H)/400H]
    CCAP2H = 62;      
    CCON |= 0x40;
}

//范围 0 - 1024
void PWM_Set(u16 value)
{
    CCAP2H = value & 0xff;
    PCA_PWM2 |= (value & 0x300) >> 4;
}
随着value增加,占空比不是一直减小,在256时突然减小,然后增加
有大佬知道为啥吗?

哈哈哈哈 发表于 2024-8-20 15:23:58

PCA_PWM2 |= (value & 0x300) >> 4;
value 是16位的

_奶咖君_ 发表于 2024-8-20 15:42:11


_奶咖君_ 发表于 2024-8-20 15:42:43

看看是不是这个原因0.0

_奶咖君_ 发表于 2024-8-20 15:45:40

还有一件事,,我记得好像用PCA的话 没有预装载功能,,最好是在PCA计数器的归零中断中 修改占空比,防止出现异常情况balabala

哈哈哈哈 发表于 2024-8-20 18:03:31


这个是8位PWM的:


这个是10位PWM的:


这样就可实现无干扰地更新 PWM。
我可能对这句话有误解,其实不能预装载


哈哈哈哈 发表于 2024-8-20 18:05:58

_奶咖君_ 发表于 2024-8-20 15:42
看看是不是这个原因0.0

确实是这个原因。当时没有注意到这个问题,修改一下就可以了。感谢

_奶咖君_ 发表于 2024-8-21 09:11:04

哈哈哈哈 发表于 2024-8-20 18:03
这个是8位PWM的:




emmm那可能是之前用的 其他片子上增强型15bitPWM的问题,,没有预装载功能,,只能在归零中断中改变占空比,,STC8015U可能就没有这个问题了
页: [1]
查看完整版本: 8051U 10位PWM 问题