日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32读取伺服电机编码器信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本人所搭建的平臺包括電源,STM32F103開發板,copley驅動器和maxon伺服直流電機,開發板通過驅動器讀取電機編碼器的信號,所用定時器為定時器8,同時讀取編碼器AB相,自動重裝載值為3999,故電機軸旋轉一圈,定時器從0計數到3999,但由于電機前端安裝有減速箱,即輸出軸為減速器的軸,減速比為128:1,故輸出軸旋轉一圈,定時器8的計數值應為128X4000=512000。

代碼如下:

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);? ??
}

總結

以上是生活随笔為你收集整理的STM32读取伺服电机编码器信号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。