[技术问答] HC32L176 处理 编码器信号的问题,求指导

[复制链接]
 楼主| re9527 发表于 2023-1-17 17:45 | 显示全部楼层 |阅读模式
本帖最后由 re9527 于 2023-1-17 17:45 编辑

       求高手指导。
      小弟在使用HC32L176处理编码器信号,不能正常工作。
      现象是单片机能对编码器信号计数,电机停止,计数停止,但电机反向时,计数方向不变。感觉是只对编码器的一路信号在计数,另外一路没起作用,所以电机反向但计数方向没改变。
      有两个疑问:1、手册里写的是CH0A/CH0B,实际电路里编码器信号接入了TIM3的CH2A/CH2B,不知接入这两个通道还能不能使用编码器计数功能?                         2、编码器计数时如何使能CHA/CHB两路输入?我的程序里看起来有一路输入没起作用。
      测试程序如下,都放在main函数里的。
  1. int32_t main(void)
  2. {
  3.   static uint16_t num;
  4.     App_ClockCfg();      //时钟初始化
  5.    
  6.     uint16_t                        u16ArrValue;
  7.     uint16_t                        u16CntValue;   
  8.     stc_gpio_cfg_t            stcTIM3Port;   
  9.     stc_tim3_mode23_cfg_t        stcTim3BaseCfg;
  10.     stc_tim3_m23_input_cfg_t     stcTim3PortCapCfg;   
  11.     stc_tim3_m23_master_slave_cfg_t  stcTim3MSCfg;

  12.     //结构体初始化清零
  13.     DDL_ZERO_STRUCT(stcTIM3Port);   
  14.     DDL_ZERO_STRUCT(stcTim3BaseCfg);
  15.     DDL_ZERO_STRUCT(stcTim3PortCapCfg);   
  16.     DDL_ZERO_STRUCT(stcTim3MSCfg);
  17.       
  18.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能   
  19.     Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE);   //Timer3外设时钟使能
  20.    
  21.     ///<TIM3 的模式23功能初始化
  22.     stcTIM3Port.enDir  = GpioDirIn;
  23.     Gpio_Init(GpioPortE, GpioPin12, &stcTIM3Port);
  24.     Gpio_SetAfMode(GpioPortE,GpioPin12,GpioAf1);   //PE12设置为TIM3_CH2B,输入
  25.     Gpio_Init(GpioPortE, GpioPin13, &stcTIM3Port);
  26.     Gpio_SetAfMode(GpioPortE,GpioPin13,GpioAf1);   //PE13设置为TIM3_CH2A,输入
  27.         
  28.     stcTim3BaseCfg.enWorkMode    = Tim3WorkMode2;     //锯齿波模式
  29.     stcTim3BaseCfg.enCT          = Tim3Timer;         //定时器功能,计数时钟为内部PCLK
  30.     stcTim3BaseCfg.enPRS         = Tim3PCLKDiv64;     //PCLK/64
  31. //    stcTim3BaseCfg.enCntDir      = Tim3CntDown;         //记数方向,似乎不影响
  32.     Tim3_Mode23_Init(&stcTim3BaseCfg);                        //TIM3 的模式23功能初始化
  33.      
  34.     ///<TIM3端口输入初始化
  35. //    stcTim3PortCapCfg.enCHxACmpCap   = Tim3CHxCapMode;        //CHA通道设置为捕获模式,似乎不影响
  36. //    stcTim3PortCapCfg.enCHxACapSel   = Tim3CHxCapRise;    //CHA通道上升沿捕获使能,似乎不影响
  37.     stcTim3PortCapCfg.enCHxAInFlt    = Tim3FltNone;  //不滤波
  38. //    stcTim3PortCapCfg.enCHxAPolarity = Tim3PortPositive;      //正常输入输出,似乎不影响
  39. //    stcTim3PortCapCfg.enCHxBCmpCap   = Tim3CHxCapMode;        //CHB通道设置为捕获模式,似乎不影响
  40. //    stcTim3PortCapCfg.enCHxBCapSel   = Tim3CHxCapRise;    //CHB通道上升沿捕获使能,似乎不影响
  41.     stcTim3PortCapCfg.enCHxBInFlt    = Tim3FltNone;  //不滤波
  42. //    stcTim3PortCapCfg.enCHxBPolarity = Tim3PortPositive;      //正常输入输出,似乎不影响
  43.     Tim3_M23_PortInput_Cfg(Tim3CH2, &stcTim3PortCapCfg);   //端口输入初始化
  44.    
  45.     ///<TIM3从模式设置
  46.     M0P_TIM3_MODE23->MSCR_f.IA0S = 1;      //TIM3 A通道选择 CH0A CH1A CH2A XOR(实际硬件接入TIM3的CH2A)
  47.     M0P_TIM3_MODE23->MSCR_f.IB0S = 1;      //TIM3 B通道选择 内部触发TS选择信号 (实际硬件接入TIM3的CH2B,但这里只能选0即CH0B,1即当前选择。选0不能正常计数)         
  48.     stcTim3MSCfg.enMasterSlaveSel = Tim3SlaveMode;  //从模式
  49.     stcTim3MSCfg.enSlaveModeSel = Tim3SlaveCodeCnt1;  //正交编码计数模式1,对CHA边沿计数
  50.     stcTim3MSCfg.enTsSel= Tim3Ts6IAFP;    //TIM3_CH2A外部输输入滤波后的相位选择信号。编码器需要CHA/CHB两路信号,这里只能选一路,另外一路信号怎么选中?
  51.     Tim3_M23_MasterSlave_Set(&stcTim3MSCfg);
  52.       
  53.     u16ArrValue = 0xFFFF;
  54.     Tim3_M23_ARRSet(u16ArrValue, TRUE);                       //设置重载值,并使能缓存
  55.     u16CntValue = 0;
  56.     Tim3_M23_Cnt16Set(u16CntValue);                           //设置计数初值
  57.    
  58.     Tim3_ClearAllIntFlag();                                   //清中断标志
  59.     Tim3_Mode23_EnableIrq(Tim3CA0Irq);                        //使能TIM3 CB0比较/捕获中断
  60.     Tim3_Mode23_EnableIrq(Tim3UevIrq);                        //使能TIM3 Uev更新中断
  61.     EnableNvic(TIM3_IRQn, IrqLevel1, TRUE);                   //TIM3中断使能
  62.    
  63.     Tim3_M23_Run();      //TIM3运行。
  64.    
  65.     while (1)
  66.     {      
  67.       num = Tim3_M23_Cnt16Get();      
  68.     }
  69. }



手册里设置说明

手册里设置说明
2.png
3.png
 楼主| re9527 发表于 2023-1-19 12:04 | 显示全部楼层
已解决。这款芯片编码器只能接在定时器的第一个通道,即CHA\CHB.
麻花油条 发表于 2023-1-28 11:13 来自手机 | 显示全部楼层
学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

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