打印
[应用相关]

STM32读取伺服电机编码器信号

[复制链接]
700|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
自动化陈稳|  楼主 | 2020-12-26 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人所搭建的平台包括电源,STM32F103开发板,copley驱动器和maxon伺服直流电机,开发板通过驱动器读取电机编码器的信号,所用定时器为定时器8,同时读取编码器AB相,自动重装载值为3999,故电机轴旋转一圈,定时器从0计数到3999,但由于电机前端安装有减速箱,即输出轴为减速器的轴,减速比为128:1,故输出轴旋转一圈,定时器8的计数值应为128X4000=512000。

使用特权

评论回复
沙发
自动化陈稳|  楼主 | 2020-12-26 22:52 | 只看该作者
void TIM8_Encoder_Init(void)
{
     GPIO_InitTypeDef  GPIO_InitTypestruct;
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitTypestruct;
     TIM_ICInitTypeDef  TIM_ICInitTypestruct;
     NVIC_InitTypeDef  NVIC_InitTypestruct;
     
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_TIM8,ENABLE);
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

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

     TIM_TimeBaseInitTypestruct.TIM_Period=3999;
     TIM_TimeBaseInitTypestruct.TIM_Prescaler=0;
     TIM_TimeBaseInitTypestruct.TIM_CounterMode=TIM_CounterMode_Up;
     TIM_TimeBaseInitTypestruct.TIM_ClockDivision=TIM_CKD_DIV1;
     TIM_TimeBaseInitTypestruct.TIM_RepetitionCounter=0;
     TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitTypestruct);
     
     TIM_EncoderInterfaceConfig(TIM8,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);  
//  TIM_ICStructInit(&TIM_ICInitTypestruct);
     TIM_ICInitTypestruct.TIM_Channel=TIM_Channel_1;
     TIM_ICInitTypestruct.TIM_ICFilter=15;
//    TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
   TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_Rising;

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

//    TIM_ICInitTypestruct.TIM_Channel=TIM_Channel_2;
//    TIM_ICInitTypestruct.TIM_ICFilter=15;
     TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
//  TIM_ICInitTypestruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
//    TIM_ICInitTypestruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
//    TIM_ICInitTypestruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
//    TIM_ICInit(TIM8,&TIM_ICInitTypestruct);

//  TIM8->CR1&=~(3<<5);
//    TIM8->CCMR1|=1<<0;
//    TIM8->CCMR1|=1<<8;
//    TIM8->CCER&=~(2<<0);
//    TIM8->CCER&=~(1<<5);


     NVIC_InitTypestruct.NVIC_IRQChannel=TIM8_UP_IRQn;
     NVIC_InitTypestruct.NVIC_IRQChannelCmd=ENABLE;
     NVIC_InitTypestruct.NVIC_IRQChannelPreemptionPriority=0;
     NVIC_InitTypestruct.NVIC_IRQChannelSubPriority=0;
     NVIC_Init(&NVIC_InitTypestruct);
     
     TIM_ARRPreloadConfig(TIM8,ENABLE);
     TIM_ClearFlag(TIM8,TIM_FLAG_Update);
     TIM_ClearITPendingBit(TIM8,TIM_IT_Update);
     TIM_ITConfig(TIM8,TIM_IT_Update,ENABLE);
     TIM_SetCounter(TIM8,0);
     TIM_Cmd(TIM8,ENABLE);   
}
代码如下:

使用特权

评论回复
板凳
renzheshengui| | 2021-1-11 12:55 | 只看该作者
硬件上选取的是什么呢

使用特权

评论回复
地板
wakayi| | 2021-1-11 12:58 | 只看该作者
请问驱动芯片选择的是什么啊

使用特权

评论回复
5
wowu| | 2021-1-11 13:01 | 只看该作者
可以同时读取几路呢

使用特权

评论回复
6
xiaoqizi| | 2021-1-11 13:03 | 只看该作者
三路以上都可以吧

使用特权

评论回复
7
木木guainv| | 2021-1-11 13:21 | 只看该作者
普通定时器可以实现吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

1220

帖子

1

粉丝