求助,8h8k64u的PWMA、B两相能否做一路输出一路输入检查
如题,当前状况是使用PWMB_6输出了一路可配置频率及占空比的PWM信号,能否使用PWMA_1p+2p用作编码器输入检测,虽然在低频率的机械编码器上如EC11,使用普通的中断检测会更方便,但PWM有滤波和抖动处理,在使用更高线数的编码器时对时序的影响更小。我遇到的问题是先行配置了PWMB输出了一路方波信号,但无法完成对PWMA的配置,当我取消PWMB的配置语句时 编码器可以正常使用。
相关代码稍后上传
************************************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输出使能
}
PWMA和PWMB是相互独立的,互不影响,唯一的区别是PWMA支持互补输出,PWMB不支持 可以 那我的代码应该怎么修改呢,我现在还不清楚是哪里出了问题
Albsm 发表于 2025-7-31 23:53
那我的代码应该怎么修改呢,我现在还不清楚是哪里出了问题
能否给出完整的工程?
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1779&highlight=pwm%20%E7%A8%8B%E5%BA%8F&page=1&extra=#pid11526
或者参考这部分生成方波的程序进行移植,按道理讲PWMA和PWMB的寄存器都是分开的,不会相互影响。
页:
[1]