找回密码
 立即注册
查看: 170|回复: 5

PWM编码器模式范例程序

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-05-21 08:27:41
已绑定手机

12

主题

19

回帖

245

积分

中级会员

积分
245
发表于 2025-4-16 18:45:08 | 显示全部楼层 |阅读模式

image.png

image.png

  • 配置PWMA_CCER1 = 0x55;是对B6,B4 ,B2,B0位进行操作,但是编码器应该工作在输入模式,应该是0x33才对。如果分析的有问题,请大佬指出。
回复

使用道具 举报 送花

3

主题

717

回帖

145

积分

等待验证会员

积分
145
发表于 2025-4-16 18:48:00 | 显示全部楼层
关于您提到的PWM编码器模式配置问题,首先需要明确的是,PWM编码器模式的具体配置取决于所使用的微控制器或处理器的寄存器定义及其功能描述。以下是对您提出的问题的专业分析:

1. 寄存器配置分析
您提到的PWMACCER1寄存器,其配置值0x55和0x33分别对应不同的位操作。具体来说:
0x55的二进制表示为01010101,这意味着对B7、B5、B3、B1位进行了置位操作。
0x33的二进制表示为00110011,这意味着对B6、B5、B2、B1位进行了置位操作。

2. 编码器模式的工作机制
在PWM编码器模式下,通常需要配置相关的输入捕获通道以捕获编码器的脉冲信号。具体配置可能包括:
输入捕获模式:将PWM通道配置为输入捕获模式,以捕获编码器的脉冲信号。
极性配置:根据编码器的信号极性,配置捕获通道的极性。
滤波器配置:根据需要配置输入信号的滤波器,以消除噪声。

3. 配置值的合理性
根据您提供的信息,0x33的配置值可能更符合编码器输入模式的需求,因为它对B6、B5、B2、B1位进行了置位操作,这些位可能对应输入捕获通道的使能和极性配置。

4. 具体配置建议
为了确保编码器模式正常工作,建议您参考所使用的微控制器或处理器的参考手册,确认PWMACCER1寄存器的具体位定义及其功能。以下是一个可能的配置步骤:

1. 使能输入捕获通道:根据编码器连接的PWM通道,使能相应的输入捕获通道。
2. 配置极性:根据编码器的信号极性,配置捕获通道的极性。
3. 配置滤波器:根据需要配置输入信号的滤波器。
4. 启动PWM模块:启动PWM模块,开始捕获编码器的脉冲信号。

5. 示例代码
以下是一个可能的配置示例代码:
  1. c
  2. // 假设PWMACCER1寄存器的位定义如下:
  3. // B7: 保留
  4. // B6: 通道3输入捕获使能
  5. // B5: 通道3输入捕获极性
  6. // B4: 通道2输入捕获使能
  7. // B3: 通道2输入捕获极性
  8. // B2: 通道1输入捕获使能
  9. // B1: 通道1输入捕获极性
  10. // B0: 保留
  11. // 配置PWMACCER1寄存器为0x33
  12. PWMACCER1 = 0x33; // 使能通道1、通道2、通道3的输入捕获,并配置极性
  13. // 其他相关配置
  14. // 例如,配置滤波器、启动PWM模块等
复制代码

6. 总结
在配置PWM编码器模式时,务必参考所使用的微控制器或处理器的参考手册,确保寄存器的配置值符合实际需求。您提到的0x33配置值可能更符合编码器输入模式的需求,但具体配置仍需根据实际情况进行调整。

希望以上分析对您有所帮助。如有进一步问题,欢迎继续讨论。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-05-21 08:27:41
已绑定手机

12

主题

19

回帖

245

积分

中级会员

积分
245
发表于 2025-4-16 18:50:47 | 显示全部楼层
国芯人*** 发表于 2025-4-16 18:48
关于您提到的PWM编码器模式配置问题,首先需要明确的是,PWM编码器模式的具体配置取决于所使用的微控制器或 ...

好的好的 碉堡了 太强了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1919

回帖

4309

积分

荣誉版主

无情的代码机器

积分
4309
发表于 2025-4-16 19:06:47 | 显示全部楼层
输入捕获流程里确实没提要用CC1NE,看输入捕获单独用例没配置这个。
你看的这个正交编码器用例没用过,应该不是单纯的捕获用例吧。
截图202504161905288451.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-05-21 08:27:41
已绑定手机

12

主题

19

回帖

245

积分

中级会员

积分
245
发表于 2025-4-16 19:29:13 | 显示全部楼层
erci*** 发表于 2025-4-16 19:06
输入捕获流程里确实没提要用CC1NE,看输入捕获单独用例没配置这个。
你看的这个正交编码器用例没用过,应该 ...

这个PWMCCER1=0x55;在互补PWM里面也是这么写的 我感觉互补那个代码是对的,这个应该是有问题的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-05-21 08:27:41
已绑定手机

12

主题

19

回帖

245

积分

中级会员

积分
245
发表于 2025-4-16 21:17:25 | 显示全部楼层
void PWMA_init(void)
{
    P2M0 &=~0X05;
    P2M1 &=~0X05;
    PWMA_PS = 0X0a;//选择P20 P22输入捕获引脚 
  
    PWMA_PSCRH = 0X00;
    PWMA_PSCRL = 0X00;
    PWMA_ARRH =0XFF;
    PWMA_ARRL = 0XFF;
    PWMA_CNTRH = 0;
    PWMA_CNTRL = 0;
    PWMA_SMCR = 0X02;
    PWMA_CCMR1 = 0x01+(10<<4);//0xa0
    PWMA_CCMR2 = 0x01+(10<<4); 
    PWMA_SMCR = 0X03;
    PWMA_CCER1 = 0X33;//使能输入捕获 
    PWMA_CCER2 = 0X33;
    //PWMA_IER = 0X06;
    PWMA_CR1 |=0X01;
}

void PWMB_init(void)
{
    P0M0 &=~0X0a;
    P0M1 &=~0X0a;//设置捕获输入为准双向口
    PWMB_PS=0X00;//P01 P03输入捕获引脚 
    PWMB_PSCRH = 0X00;
    PWMB_PSCRL = 0X00;
    PWMB_ARRH = 0XFF;
    PWMB_ARRL = 0XFF;
    PWMB_CNTRH = 0X00;
    PWMB_CNTRL = 0X00;
    PWMB_SMCR = 0X03;//02是只捕获一路,03是捕获两路
    PWMB_CCMR1 = 0x01+(10<<4);
    PWMB_CCMR2 = 0x01+(10<<4);
    PWMB_SMCR = 0X03;
    PWMB_CCER1=0X33;
    PWMB_CCER2=0X33;

    PWMB_CR1 |= 0X01;
}

  • main.c


uint16_t encoder_dataA,encoder_dataB;
SYS_Init();
PWMB_init();
PWMA_init();
printf("Hello World !\n");

while (1)
{
if(flag)
{
encoder_dataB=(PWMB_CNTRH<<8)+PWMB_CNTRL;
encoder_dataA=(PWMA_CNTRH<<8)+PWMA_CNTRL;
if(encoder_dataA)
printf("encoder_dataA = %d\n",encoder_dataA);
if(encoder_dataB)
printf("encoder_dataB = %d\n",encoder_dataB);
flag=0;
}
}

  • 使用的时候,使用一个定时器定时去读取寄存器的值即可。这个代码经过测试,可以同时捕获两路正交编码器的值。在AI8051U上.只需要修改PWMB_PS,PWMA_PS选择对应的管脚,即可实现对应IO输入捕获,只有PWMA_1P PWMA_2P 这两个可以捕获一路正交编码器信号。PWMB_5P,PWMB_6P这两个可以捕获一路正交编码器信号。
  • 使用两路正交编码器以后,就不能再使用PWMA和PWMB做PWM输出了。

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 18:19 , Processed in 0.148736 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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