找回密码
 立即注册
查看: 24|回复: 4

求助,8h8k64u的PWMA、B两相能否做一路输出一路输入检查

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-01 04:36:15

3

主题

17

回帖

109

积分

注册会员

积分
109
发表于 昨天 16:17 | 显示全部楼层 |阅读模式
如题,当前状况是使用PWMB_6输出了一路可配置频率及占空比的PWM信号,能否使用PWMA_1p+2p用作编码器输入检测,虽然在低频率的机械编码器上如EC11,使用普通的中断检测会更方便,但PWM有滤波和抖动处理,在使用更高线数的编码器时对时序的影响更小。

我遇到的问题是先行配置了PWMB输出了一路方波信号,但无法完成对PWMA的配置,当我取消PWMB的配置语句时   编码器可以正常使用。
相关代码稍后上传
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-01 04:36:15

3

主题

17

回帖

109

积分

注册会员

积分
109
发表于 昨天 16:47 | 显示全部楼层
************************************EC11初始化**************************************
void EC11_init(void)
{
        P1M0 &= ~0x05; P1M1 &= ~0x05;
        P5M0 &= ~0x10; P5M1 &= ~0x10;
       
        //当前初始化使用P1.0为A端口,P5.4为B端口
        PWMA_PSCR = 0;
        PWMA_ARR = 0xffff;
        PWMA_CNTR = 0;
        PWMA_ENO = 0;
        //PWMA_CCER1 = 0x00; //关闭通道以配置
       
        PWMA_CCMR1 = 0xA1;                                         // 通道模式配置为输入,接编码器 , 滤波器 80 时钟
        PWMA_CCMR2 = 0xA1;                                         // 通道模式配置为输入,接编码器 , 滤波器 80 时钟
        PWMA_CCER1 |= 0x55;                                        // 使能捕获/比较通道1、通道2
       
        //        PWMA_SMCR = 0x01;                                 // 编码器模式 1
        //        PWMA_SMCR = 0x02;                                 // 编码器模式 2       
        PWMA_SMCR = 0x03;                                         // 编码器模式 3
       
        PWMA_PS = 0;
        PWMA_IER = 0x02;                                                 // 使能中断
        PWMA_CR1 |= 0x01;                                         // 使能计数器
        EA = 1;

}
************************************中断26**************************************
void PWMA_ISR() interrupt 26
{
        if (PWMA_SR1 & 0X02)                                // 当捕获中断标志置1
        {
                //cnt_H = PWMA_CCR1H;                                // 读取计数值高8位
                cnt_L = PWMA_CCR1L;                                // 读取计数值低8位
                PWMA_SR1 &= ~0x02;                                // 清零捕获中断标志
                EC11_Handle();                                                        // 处理EC11数据
                P21=~P21;
        }
}
***********************************PWM输出初始化***************************************
void pwm_init(void)
{
        PWMB_CCER1 = 0x00;        //非捕获/比较输出,清零CCER1捕获比较寄存器
        PWMB_CCMR2 = 0x60;        //配置PWM6通道CCMR寄存器
        PWMB_CCER1 |= 0x30;        //使能cc6e cc6p输出通道
       
        PWMB_ARRH = (u8)(PWM_Period >> 8);
  PWMB_ARRL = (u8)PWM_Period;
       
        PWMB_ENO = 0x00;        //清空PWMB输出使能
        PWMB_ENO |= 0x06;        //使能PWMB6输出
       
        PWMB_PS = 0x00;  //高级 PWM 通道输出脚选择位
  PWMB_PS |= Pwm_IO; //选择 PWMB输出通道
       
        //PWMB_BKR = 0x80;        //PWMB通道输出使能
        PWMB_CR1 |= 0x01; //开始计时
}
***********************************PWM输出设置***************************************
void Pwm_set(u16 cc)
{
        if(cc){
                PWMB_BKR = 0x80;
                lighth*=70;        //100均分周期Pwm_period     Pwm_period = 6999;
                PWMB_CCR6H = (u8)(cc >> 8); //设置占空比时间
                PWMB_CCR6L = (u8)(cc);
        }else PWMB_BKR = 0x00;  //关闭PWMB输出使能
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-08-01 07:33:38
已绑定手机

87

主题

5785

回帖

1万

积分

超级版主

DebugLab

积分
10386
发表于 昨天 17:57 | 显示全部楼层
PWMA和PWMB是相互独立的,互不影响,唯一的区别是PWMA支持互补输出,PWMB不支持
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-08-01 10:06:57

762

主题

1万

回帖

1万

积分

管理员

积分
18302
发表于 昨天 18:28 | 显示全部楼层
可以
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-01 04:36:15

3

主题

17

回帖

109

积分

注册会员

积分
109
发表于 昨天 23:53 | 显示全部楼层
那我的代码应该怎么修改呢,我现在还不清楚是哪里出了问题
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 14:57 , Processed in 0.119310 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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