DEVIN_LI 发表于 2024-8-20 15:22:22

PWMA

想做一个互补PWM信号。当P3.5按下去后P2.0 P2.1输出。
程序P2.0 2.1没反应啥情况,各位高手帮忙看看啥问题?
另外用24M系统时钟,想要实现1S周期 50%占空比。ARR 和CCR怎么配置,这两个寄存器的高低电平不太会用。





AI-32位8051 发表于 2024-8-20 16:35:06



可以先从参考范例学起

18344371880 发表于 2024-8-20 17:25:56



看内部框图,对着来就好了

lezjin 发表于 2024-8-20 18:21:45

#define PLUSE_PWM_HZ    38000L      //红外频率38KHZ
#define PWM_ARR_LOAD(MAIN_Fosc / PLUSE_PWM_HZ)

    PWMA_ARRH = (uint16_t)PWM_ARR_LOAD >> 8; //设置周期时间
    PWMA_ARRL = PWM_ARR_LOAD;

    PWMA_CCR4H = 0;
    PWMA_CCR4L = 210; //设置占空比时间

这个是我前段时间研究红外发射时候写的,ARR根据时钟频率和需要的频率计算得出,你的需求24M时钟要出来1HZ 的频率,需要分频,不然ARR不够装,你自己配置,然后根据计算出来的ARR,取一半装到CCR,就是50%占空比

DEVIN_LI 发表于 2024-8-21 08:50:07

lezjin 发表于 2024-8-20 18:21
#define PLUSE_PWM_HZ    38000L      //红外频率38KHZ
#define PWM_ARR_LOAD(MAIN_Fosc / PLUSE_PWM_HZ) ...

PWMA_ARRH = (uint16_t)PWM_ARR_LOAD >> 8,这个是用低8位的意思吗?
如果是 数据类型为UINT 16阿

DEVIN_LI 发表于 2024-8-21 08:51:09

18344371880 发表于 2024-8-20 17:25
看内部框图,对着来就好了

新手,细节不是很懂

lezjin 发表于 2024-8-21 10:49:31

DEVIN_LI 发表于 2024-8-21 08:50
PWMA_ARRH = (uint16_t)PWM_ARR_LOAD >> 8,这个是用低8位的意思吗?
如果是 数据类型为UINT 16阿 ...

这个是高8位
还有一种办法就是直接用PWMA_ARR,这个在头文件中定义是int型的

18344371880 发表于 2024-8-21 20:41:22

DEVIN_LI 发表于 2024-8-21 08:51
新手,细节不是很懂

上面不是寄存器名称,按照那个名字搜索就好了
页: [1]
查看完整版本: PWMA