问答

汇集网友智慧,解决技术难题

21ic问答首页 - 华大HC32L136系列单片机 正交编码器有谁用过

华大HC32L136系列单片机 正交编码器有谁用过

chunxulele2021-10-03
回答 +关注 25
21901人浏览 56人回答问题 分享 举报
56 个回答
  • 从未使用过这种正交编码器
  • 我认为任何写得不太清楚的东西都和stm一样,不容易反复写。
  • 那是按按钮的编码器吗?
  • 我的意思是,你可以用中断来做到这一点,
  • 在电动机和步进电机的控制系统中,正交编码器用于精确测量电机的旋转角度和速度,以实现精准的控制和反馈。
  • 这个材料不熟悉,可以请原厂看一下吗?
  • 库里似乎没有,找代理FAE也没提过,自己跟着寄存器搓了下

    1. void Encoder_Init() {
    2.     stc_gpio_cfg_t stcGpioCfg = {0};

    3.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能

    4.     stcGpioCfg.enDir = GpioDirIn;
    5.     stcGpioCfg.enDrv = GpioDrvL;
    6.     stcGpioCfg.enPu = GpioPuEnable;
    7.     stcGpioCfg.enPd = GpioPdDisable;
    8.     stcGpioCfg.enOD = GpioOdDisable;
    9.     stcGpioCfg.enCtrlMode = GpioAHB;

    10.     Gpio_Init(ENCODER_GPIO_Port, ENCODER_A_PHASE_Pin, &stcGpioCfg);
    11.     Gpio_SetAfMode(ENCODER_GPIO_Port, ENCODER_A_PHASE_Pin, GpioAf4);

    12.     Gpio_Init(ENCODER_GPIO_Port, ENCODER_B_PHASE_Pin, &stcGpioCfg);
    13.     Gpio_SetAfMode(ENCODER_GPIO_Port, ENCODER_B_PHASE_Pin, GpioAf6);

    14.     stc_tim3_mode23_cfg_t stcTim3BaseCfg = {0};

    15.     Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE);   //Timer3外设时钟使能

    16.     stcTim3BaseCfg.enWorkMode = Tim3WorkMode2;             //锯齿波模式
    17.     stcTim3BaseCfg.enCT = Tim3Timer;                 //定时器功能,计数时钟为内部PCLK
    18.     stcTim3BaseCfg.enPRS = Tim3PCLKDiv2;             //PCLK/2
    19.     stcTim3BaseCfg.enCntDir = Tim3CntUp;                 //向上计数,在三角波模式时只读

    20.     Tim3_Mode23_Init(&stcTim3BaseCfg);                        //TIM3 的模式23功能初始化

    21.     // see RM_HC32L13x系列参考手册_Rev2.35 14.2.7 正交编码计数功能
    22.     M0P_TIM3_MODE23->MSCR_f.SMS = 6;
    23.     M0P_TIM3_MODE1->FLTR_f.FLTA0 = 0b100;
    24.     M0P_TIM3_MODE1->FLTR_f.FLTB0 = 0b100;
    25.     M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA = 0b11;
    26.     M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB = 0b11;

    27.     Tim3_M23_Cnt16Set(encoder_central_count);

    28.     Tim3_M23_Run();

    29.     encoder_check = true;
    30. }

    31. uint16_t Encoder_GetCnt() {
    32.     return Tim3_M23_Cnt16Get();
    33. }

    34. void Encoder_SetCnt(uint16_t cnt) {
    35.     Tim3_M23_Cnt16Set(cnt);
    36. }
  • 华大HC32l13x系列定时器正交编码功能说明- CSDN博客
  • 我也遇到了和OP一样的问题,你解决了吗?
  • Which series have this feature

您需要登录后才可以回复 登录 | 注册