陈正杰 发表于 2015-2-11 11:42:53

STM32F0 伺服电机AB相驱动方法

#define TIMx TIM1
#define TIMx_BASE TIM1_BASE

void eTime1OutpcaptureInit(void)
{
/* (1) Enable the peripheral clock of Timer x */
/* (2) Enable the peripheral clock of GPIOA */
/* (3) Select alternate function mode on GPIOA pin 8 */
/* (4) Select AF2 on PA8 in AFRH for TIM1_CH1 */
//复用功能管脚是每4位一个输出
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; /* (1) */
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; /* (2) */
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER8)) | (GPIO_MODER_MODER8_1); /* (3) */
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9)) | (GPIO_MODER_MODER9_1); /* (3) */
GPIOA->AFR |= 0x02; /* (4) */
GPIOA->AFR |= 0x02<<4; /* (4) */
/* (1) Set prescaler to 3, so APBCLK/4 i.e 12MHz */
/* (2) Set ARR = 12000 -1 */
/* (3) Set CCRx = ARR, as timer clock is 12MHz, an event occurs each 1 ms */
/* (4) Select toggle mode on OC1(OC1M = 011),
disable preload register on OC1 (OC1PE = 0, reset value) */
/* (5) Select active high polarity on OC1 (CC1P = 0, reset value),
enable the output on OC1 (CC1E = 1)*/
/* (6) Enable output (MOE = 1)*/
/* (7) Enable counter */

TIMx->PSC |= 3; /* (1) */
TIMx->ARR = 12000 - 1; /* (2) */

TIMx->CCR1 = 12000 - 1; /* (3) */
TIMx->CCMR1 |= TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_1; /* (4) */
TIMx->CCER |= TIM_CCER_CC1E; /* (5)*/

TIMx->CCR2 = 6000 - 1; /* (3) */
TIMx->CCMR1 |= TIM_CCMR1_OC2M_0 | TIM_CCMR1_OC2M_1; /* (4) */
TIMx->CCER |= TIM_CCER_CC2E; /* (5)*/

TIMx->BDTR |= TIM_BDTR_MOE; /* (6) */
TIMx->CR1 |= TIM_CR1_CEN; /* (7) */
}

这个是利用F0的TIM1来做伺服电机AB相位差驱动电机的方法,实际使用的F0 TIM1的输出比较模式

NEXEN1106 发表于 2015-2-11 14:14:39

没有测试,先帮楼主顶一下
页: [1]
查看完整版本: STM32F0 伺服电机AB相驱动方法