stm32 PWM驱动舵机

发布者:EuphoricVoyage最新更新时间:2018-06-19 来源: eefocus关键字:stm32  PWM  驱动舵机 手机看文章 扫描二维码
随时随地手机看文章

今天使用stm32控制舵机,调试了许久,总结如下: 

注意事项:


1.PWM周期的设定:初值,20000-1,分频=72-1。周期是:72M/72*20000=20ms 频率=50hz; 

2.这个型号的舵机应该是5VPWM信号输出。而STM32是0-3.3,引起无法驱动。 

更新:原来我上次无法驱动舵机是因为我把舵机的三条线搞错了,大写的尴尬 

VCC——–>红 

GND——–>黑 

DATA——–>白

幸亏我潜意识里吧黑色的当成GND。。。。。。。。不然。。。。


故:以下程序成立。


#include "pbdata.h"



void RCC_Configuration(void);

void GPIO_Configuration(void);

void TIM3_Configuration(void);



int main(void)

{

   u8 led_fx=1;

   u16 led_dt=18000;





   RCC_Configuration(); //系统时钟初始化

   GPIO_Configuration();//端口初始化

   TIM3_Configuration();//定时器和pwm配置 

   while(1)

   {

//       delay_ms(100);

//   if(led_fx==1)

//   {

//      led_dt++;

//   }

//   else

//   {

//     led_dt--;

//   }



//   if(led_dt>19000)  led_fx=0;

//       if(led_dt==18000)   led_fx=1;


     TIM_SetCompare2(TIM3,led_dt);



   }    

}



void RCC_Configuration(void)

{

    SystemInit();

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

}



void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;    

    //LED

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD;

    GPIO_Init(GPIOB,&GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(GPIOA,&GPIO_InitStructure);

}



void TIM3_Configuration(void)

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

    TIM_OCInitTypeDef TIM_OCInitStructure;



    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);



    //定时器初始化

    TIM_TimeBaseStruct.TIM_Period=20000-1;//初值

    TIM_TimeBaseStruct.TIM_Prescaler=71;//预分频

    TIM_TimeBaseStruct.TIM_ClockDivision=0;

    TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上



    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);




    //pwm 初始化

    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;

    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;



    TIM_OC2Init(TIM3,&TIM_OCInitStructure);



    TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);



    TIM_Cmd(TIM3,ENABLE);


}


关键字:stm32  PWM  驱动舵机 引用地址:stm32 PWM驱动舵机

上一篇:stm32控制舵机DS3115转动
下一篇:STM32控制16路舵机控制板PCA9685

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved