找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 141|回复: 3
打印 上一主题 下一主题
收起左侧

为什么我设置的PWM输出不准确?

[复制链接]
跳转到指定楼层
楼主
ID:734017 发表于 2025-9-5 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define PWM_PSC                         (24-1)        //24分频,1us    频
#define PWM_PERIOD                 100                        //周期100us                        
#define PWM_DUTY                         1                        //占空1us               

void PWMA_ADJ_Config()                                //ADJ可调
{

        PWMA_PS =  0x40;                                   //P2.6P2.7 4n
        PWMA_PSCRH = (u16)(PWM_PSC >> 8);
        PWMA_PSCRL = (u16)(PWM_PSC);                 
        
        PWMA_CCER2 = 0x00; // 写 CCMRx 前必须先清零 CCERx 关闭通道
        PWMA_CCMR4 = 0x60; // 设置 CC2 为 PWMA 输出模式,PWM模式1
        PWMA_CCER2 = 0x40; // 使能 CC4n


        
        PWMA_CCR4H = (u16)(PWM_DUTY >> 8);  //设置占空比
        PWMA_CCR4L = (u16)(PWM_DUTY);
        
        PWMA_ARRH = (u16)(PWM_PERIOD >> 8); // 设置PWM周期
        PWMA_ARRL = (u16)(PWM_PERIOD);
        
        
        PWMA_ENO = 0x80; // 使能 PWM4n 端口输出
        PWMA_BKR = 0x80; // 使能主输出
        PWMA_CR1 = 0x01; // 启动PWM定时器
}
测量周期为101US 正脉宽1US, PWMA_ARR改为99就才行,一直没搞懂

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1089588 发表于 2025-9-6 08:16 | 只看该作者
可能芯片手册上写有周期=ARR+1的字眼你没看到
回复

使用道具 举报

板凳
ID:1137639 发表于 2025-9-6 15:24 | 只看该作者
你遇到的问题与PWM定时器的计数方式和寄存器配置有关,具体原因如下:  
### 核心原因:定时器的计数范围是「0到ARR值」 大部分定时器(包括你使用的这款)的计数逻辑是: - 计数器从0开始递增 - 当计数达到`ARR`值时,触发一次更新事件(周期结束) - 因此,**实际周期 = (ARR + 1) × 时钟周期**  

### 你的参数计算分析
1. 时钟配置:    - 分频系数`PSC = 24-1 = 23`,因此定时器时钟频率 = 系统时钟 / 24    - 假设系统时钟为24MHz,那么定时器时钟 = 1MHz,即每个计数单位为1μs  

2. 当`PWM_PERIOD = 100`时:    - 实际周期 = (100 + 1) × 1μs = 101μs(与你的测量结果一致)  

3. 当`PWM_PERIOD = 99`时:    - 实际周期 = (99 + 1) × 1μs = 100μs(符合预期)   ### 为什么占空比是正确的? 占空比配置`PWM_DUTY = 1`时: - 比较寄存器`CCR`的值是1,代表计数器计数到1时翻转电平 - 正脉宽 = 1 × 1μs = 1μs(无需+1,因为从0到1刚好是1个单位)   

### 修正建议 将周期定义修改为: ```c #define PWM_PERIOD   99     // 实际周期 = (99+1)×1μs = 100μs ```  这样就能得到你预期的100μs周期,这是定时器设计的通用逻辑(计数从0开始),并非代码或硬件问题。
回复

使用道具 举报

地板
ID:1153607 发表于 2025-9-6 17:33 | 只看该作者
任何测量判断都需要在一个时钟内进行。也就是说占用一个时钟时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表