SF90舵机介绍

在Tout(定时器溢出时间)=20 ms  arr=200   psc=7200  条件下  每计一个数的时间为0.1ms   

则在此条件下  0—180 °  计数5—25  存在线性关系

CCRx = (1.0/9.0)* angle + 5.0;     

通过在sg90.c文件中  写sg90_angle_set(uint16_t angle)的函数来实现角度与ccr值的转换    

下面为sg90.c文件代码

#include "sg90.h"

TIM_HandleTypeDef  tim3_handle={0};
//初始化函数init函数
void tim3_init(void)
{
    TIM_OC_InitTypeDef pwm_config = {0};
    
    
    tim3_handle.Instance = TIM3;     
    tim3_handle.Init.Period = 200 -1;
    tim3_handle.Init.Prescaler= 7200-1;
    tim3_handle.Init.CounterMode = TIM_COUNTERMODE_UP;   //向上计数
    HAL_TIM_PWM_Init(&tim3_handle); //时基工作参数配置
    
    pwm_config.OCMode = TIM_OCMODE_PWM1 ;  //设置PWM的的模式 有两种模式 模式1和模式2
    pwm_config.OCPolarity = TIM_OCPOLARITY_HIGH;  //在模式选定完成后,选择有效电平为高电平 还是低电平
    pwm_config.Pulse =100;   //设置CCR的初值 一般情况下随便设置
    HAL_TIM_PWM_ConfigChannel(&tim3_handle,&pwm_config,TIM_CHANNEL_1);  //第三个参数是选择渠道   
    HAL_TIM_PWM_Start(&tim3_handle,TIM_CHANNEL_1 );
}



//msp初始化函数
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM3)
    {
     //①定义初始化结构体
    GPIO_InitTypeDef gpio_initstruct;
       //打开时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();   //打开GPIO的时钟
    __HAL_RCC_TIM3_CLK_ENABLE();  //打开定时器的时钟
    //调用GPIO初始化函数
    gpio_initstruct.Pin = GPIO_PIN_6 ;                         //LED1、LED2对应的引脚
    gpio_initstruct.Pull = GPIO_PULLUP;                        //上拉   
    gpio_initstruct.Mode =GPIO_MODE_AF_PP;                //推挽复用输出
    gpio_initstruct.Speed =GPIO_SPEED_FREQ_HIGH;              //高速
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);
        
        
    }

}


//修改CCR寄存器值
void tim3_compare_set(uint16_t val)
{

    __HAL_TIM_SET_COMPARE(&tim3_handle,TIM_CHANNEL_1,val);
    
}
void sg90_init(void)
{
    tim3_init();
}

void sg90_angle_set(uint16_t angle)
{
    uint16_t CCRx = (1.0/9.0)* angle + 5.0;    //根据线性关系进行角度和ccr值的转换  角度0—180   ccr为 5—25 可得该公式   并进行强转  浮点数转化为整数 
    tim3_compare_set(CCRx);
       
}


主函数为

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "sg90.h"




int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();
    sg90_init();  //  确保Tout为 20ms  
    //uint16_t i =0;
    while(1)
    { 
        
        
        
        sg90_angle_set(0);
        delay_ms(1000);
        sg90_angle_set(20);
        delay_ms(1000);
        sg90_angle_set(40);
        delay_ms(1000);
        sg90_angle_set(90);
        delay_ms(1000);
        sg90_angle_set(180);
        delay_ms(1000);
         
//        for(i=5;i<=25; i++)
//      {  
//       tim3_compare_set(i);


//       delay_ms(100);
//      }
//      for(i=5;i<=25; i++)
//      {  
//       tim3_compare_set(30-i);


//       delay_ms(100);
//      }
     
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值