树莓派控制舵机云台

学习记录

手上有一套电赛时候买的舵机云台。扭矩15KG。型号为LD-1501MG。

舵机

两个LD-1501MG舵机角度范围都是180度。
控制的PWM波周期为20ms。
角度与正脉冲宽度映射如下所示。
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;

工作电压6-7.4V,实际使用中,空转时5V可驱动。

代码

直接上代码。

/*************************************************************************
    > File Name: sopwm.c
    > Author: admin
    > Mail: 
    > Created Time: 2020年01月03日 星期五 18时43分25秒
    > Modified Time:2020年01月03日 星期五 21时34分38秒
 ************************************************************************/

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>
#include <stdlib.h>


#define pwm_pin 1    

int main (void)
{
    wiringPiSetup ();               
    
    int temp = 0;

    if(0 !=softPwmCreate (pwm_pin, 0, 200))
    {
        printf("WP!\n");
        exit(0);
    }
    
    
    temp = 10;
    while(1)
    {
        temp = temp + 5;
        if(temp > 25)
            temp = 5;
        softPwmWrite(pwm_pin,temp);
        printf("%d\n", temp);
        delay(1000);
    }

    return 0 ;
}

分析

代码功能很简单,产生一个周期为20ms,正脉冲宽度从0.5ms到2.5ms变化的PWM波。
关于PWM波的使用可以看我的另一篇博客树莓派 PWM输出

STM32微控制器驱动Ld-1501MG舵机通常需要设置脉冲宽度调制(PWM)信号来控制舵机的转动角度。以下是一个基本的伪代码示例,假设你已经初始化了GPIO和TIM(定时器): ```c #include "stm32f1xx_hal.h" #define DEG_TO_PULSES(angle) ((angle * 180 / PWM_MAX_ANGLE) + 1) // PWM范围通常是0-2047 void setServoAngle(int angle) { uint16_t duty_cycle = DEG_TO_PULSES(angle); GPIO_InitTypeDef gpio_init; TIM_OCInitTypeDef tim_oc_init; // 初始化GPIO作为PWM输出 gpio_init.Pin = GPIO_PIN_1; // 例如,如果你的PWM输出连接到GPIOB的PIN1 gpio_init.Mode = GPIO_MODE_AF_PP; gpio_init.Pull = GPIO_NOPULL; gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; gpio_init.Alternate = GPIO_AF1_TIMx; // 替换为你的TIMx外设 HAL_GPIO_Init(GPIOB, &gpio_init); // 初始化TIMx的通道用于PWM输出 tim_oc_init.OCMode = TIM_OCMODE_PWM1; // 输出模式1 tim_oc_init.Pulse = (PWM_MAX_DUTY_CYCLE - duty_cycle); // 高电平时间 tim_oc_init.OCPolarity = TIM_OCPOLARITY_HIGH; // 正向占空比 tim_oc_init.OCNPolarity = TIM_OCNPOLARITY_NONE; tim_oc_init.OCFastMode = TIM_OCFAST_ENABLE; tim_oc_init.IDeactivate = DISABLE; // 不禁用计数器 tim_oc_init-channelN = &tim Oc1Init; // 需替换为实际TIM通道N HAL_TIM_OC_Init(&htim); // htim代表你的TIM实例 // 设置PWM周期和频率 uint16_t prescaler = (CPU_CLOCK_HZ / 1000000) / PWM_FREQUENCY - 1; HAL_TIM_ConfigPeriod(&htim, prescaler); // 开始PWM输出 HAL_TIM_PWM_Start(&htim, channelN); } // 示例调用 setServoAngle(90); // 调节舵机转到90度位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值