[应用相关] STM32读取伺服电机编码器信号

[复制链接]
 楼主| 自动化陈稳 发表于 2020-12-26 22:50 | 显示全部楼层 |阅读模式
本人所搭建的平台包括电源,STM32F103开发板,copley驱动器和maxon伺服直流电机,开发板通过驱动器读取电机编码器的信号,所用定时器为定时器8,同时读取编码器AB相,自动重装载值为3999,故电机轴旋转一圈,定时器从0计数到3999,但由于电机前端安装有减速箱,即输出轴为减速器的轴,减速比为128:1,故输出轴旋转一圈,定时器8的计数值应为128X4000=512000。
 楼主| 自动化陈稳 发表于 2020-12-26 22:52 | 显示全部楼层
  1. void TIM8_Encoder_Init(void)
  2. {
  3.      GPIO_InitTypeDef  GPIO_InitTypestruct;
  4.      TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitTypestruct;
  5.      TIM_ICInitTypeDef  TIM_ICInitTypestruct;
  6.      NVIC_InitTypeDef  NVIC_InitTypestruct;
  7.      
  8.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_TIM8,ENABLE);
  9. //    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  10.      GPIO_InitTypestruct.GPIO_Mode=GPIO_Mode_IPD;
  11.      GPIO_InitTypestruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
  12.      GPIO_InitTypestruct.GPIO_Speed=GPIO_Speed_50MHz;
  13.      GPIO_Init(GPIOC,&GPIO_InitTypestruct);

  14.      TIM_TimeBaseInitTypestruct.TIM_Period=3999;
  15.      TIM_TimeBaseInitTypestruct.TIM_Prescaler=0;
  16.      TIM_TimeBaseInitTypestruct.TIM_CounterMode=TIM_CounterMode_Up;
  17.      TIM_TimeBaseInitTypestruct.TIM_ClockDivision=TIM_CKD_DIV1;
  18.      TIM_TimeBaseInitTypestruct.TIM_RepetitionCounter=0;
  19.      TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitTypestruct);
  20.      
  21.      TIM_EncoderInterfaceConfig(TIM8,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);  
  22. //  TIM_ICStructInit(&TIM_ICInitTypestruct);
  23.      TIM_ICInitTypestruct.TIM_Channel=TIM_Channel_1;
  24.      TIM_ICInitTypestruct.TIM_ICFilter=15;
  25. //    TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
  26.    TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_Rising;

  27. TIM_ICInitTypestruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  28.      TIM_ICInitTypestruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
  29.      TIM_ICInit(TIM8,&TIM_ICInitTypestruct);

  30. //    TIM_ICInitTypestruct.TIM_Channel=TIM_Channel_2;
  31. //    TIM_ICInitTypestruct.TIM_ICFilter=15;
  32.      TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
  33. //  TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
  34. //    TIM_ICInitTypestruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  35. //    TIM_ICInitTypestruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
  36. //    TIM_ICInit(TIM8,&TIM_ICInitTypestruct);

  37. //  TIM8->CR1&=~(3<<5);
  38. //    TIM8->CCMR1|=1<<0;
  39. //    TIM8->CCMR1|=1<<8;
  40. //    TIM8->CCER&=~(2<<0);
  41. //    TIM8->CCER&=~(1<<5);


  42.      NVIC_InitTypestruct.NVIC_IRQChannel=TIM8_UP_IRQn;
  43.      NVIC_InitTypestruct.NVIC_IRQChannelCmd=ENABLE;
  44.      NVIC_InitTypestruct.NVIC_IRQChannelPreemptionPriority=0;
  45.      NVIC_InitTypestruct.NVIC_IRQChannelSubPriority=0;
  46.      NVIC_Init(&NVIC_InitTypestruct);
  47.      
  48.      TIM_ARRPreloadConfig(TIM8,ENABLE);
  49.      TIM_ClearFlag(TIM8,TIM_FLAG_Update);
  50.      TIM_ClearITPendingBit(TIM8,TIM_IT_Update);
  51.      TIM_ITConfig(TIM8,TIM_IT_Update,ENABLE);
  52.      TIM_SetCounter(TIM8,0);
  53.      TIM_Cmd(TIM8,ENABLE);   
  54. }
代码如下:
renzheshengui 发表于 2021-1-11 12:55 | 显示全部楼层
硬件上选取的是什么呢
wakayi 发表于 2021-1-11 12:58 | 显示全部楼层
请问驱动芯片选择的是什么啊
wowu 发表于 2021-1-11 13:01 | 显示全部楼层
可以同时读取几路呢
xiaoqizi 发表于 2021-1-11 13:03 | 显示全部楼层
三路以上都可以吧
木木guainv 发表于 2021-1-11 13:21 | 显示全部楼层
普通定时器可以实现吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1379

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

105

主题

1379

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部