ESP32C3驱动舵机

舵机的控制

舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。

编程原理

ESP32C3针对LED的控制,提供了6个独立的PWM生成器,可实现占空比自动渐变,最大精度14位。本程序采用13位精度,角度值取整数。实现了从-90°到90°的舵机信号输出,每秒偏转10°。

#include "driver/ledc.h"

#define SERVO_MIN_PULSEWIDTH_US (1000) // Minimum pulse width in microsecond
#define SERVO_MAX_PULSEWIDTH_US (2000) // Maximum pulse width in microsecond
#define SERVO_MAX_DEGREE        (90)   // Maximum angle in degree upto which servo can rotate
#define SERVO_FREQUENCY         (50)  //PWM frequency
static uint32_t convert_servo_angle_to_duty(int angle)
{
    uint32_t us;
    if((angle > SERVO_MAX_DEGREE) || (angle + SERVO_MAX_DEGREE < 0)){
        angle = 0;
    }
    us = SERVO_MIN_PULSEWIDTH_US + (angle + SERVO_MAX_DEGREE) * (SERVO_MAX_PULSEWIDTH_US - SERVO_MIN_PULSEWIDTH_US) / (2 * SERVO_MAX_DEGREE);
    //printf("angle: %d  us:%d\r\n",angle,us);
    return (int)(SERVO_FREQUENCY*us*8191/1000000);//仅针对LEDC_TIMER_13_BIT
}
//舵机每秒钟完成10°的偏转,从负90°至正90°共180°。信号频率50hz,未采用平滑过渡。
void servo_control_task(void){

#define SERVO_LS_CH0_GPIO       (5)
#define SERVO_LS_CH0_CHANNEL    LEDC_CHANNEL_0

    uint16_t duty;//from 0 to 8*1024-1
    ledc_timer_config_t servo_timer = {
        .duty_resolution = LEDC_TIMER_13_BIT, // resolution of PWM duty
        .freq_hz = SERVO_FREQUENCY,            // frequency of PWM signal
        .speed_mode = LEDC_LOW_SPEED_MODE,    // timer mode
        .timer_num = LEDC_TIMER_1,            // timer index
        .clk_cfg = LEDC_AUTO_CLK,             // Auto select the source clock
    };
    ledc_timer_config(&servo_timer);

    ledc_channel_config_t servo_channel = {
            .channel    = LEDC_LS_CH0_CHANNEL,
            .duty       = 0,
            .gpio_num   = LEDC_LS_CH0_GPIO,
            .speed_mode = LEDC_LOW_SPEED_MODE,
            .hpoint     = 0,
            .timer_sel  = LEDC_TIMER_1,
            .flags.output_invert = 0
    };

    // Set LED Controller with previously prepared configuration for servo control
    ledc_channel_config(&servo_channel);

    do{
        for(int i=(0-SERVO_MAX_DEGREE) ; i<=SERVO_MAX_DEGREE;i++){
            duty = convert_servo_angle_to_duty(i);
            //printf("Servo is on %d degree\r\n",i);
            ledc_set_duty(servo_channel.speed_mode, servo_channel.channel, duty);
            ledc_update_duty(servo_channel.speed_mode, servo_channel.channel);
            vTaskDelay(100/portTICK_PERIOD_MS);
        }
        
        for(int i=SERVO_MAX_DEGREE; i>=(0-SERVO_MAX_DEGREE);i--){
            duty = convert_servo_angle_to_duty(i);
            //printf("Servo is on %d degree\r\n",i);
            ledc_set_duty(servo_channel.speed_mode, servo_channel.channel, duty);
            ledc_update_duty(servo_channel.speed_mode, servo_channel.channel);
            vTaskDelay(100/portTICK_PERIOD_MS);
        }
    }while (1);
}

void app_main(void)
{
    servo_control_task();
}

以前买过几个小舵机不知道在哪个角落吃灰,手头没有找到,用示波器看了下波形,没问题。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Blinker ESP32C3 是一款基于 ESP32C3 开发的物联网解决方案,它能够帮助用户实现设备与云端的连接和通信。 Blinker ESP32C3 提供了丰富的功能,使得用户可以方便地构建智能设备并加入到物联网中。它支持多种传感器和执行器,例如温湿度传感器、开关、继电器等,可以满足各种不同的应用场景需求。 Blinker ESP32C3 的优点在于其简单易用的开发和部署过程。它提供了完整的软硬件方案和示例代码,开发者只需按照文档指引进行简单的配置和编程,即可实现设备的连接和数据交互。同时,Blinker ESP32C3 还提供了跨平台的移动端 APP 和 Web 控制台,用户可以通过这些工具来管理和控制设备。 另外,Blinker ESP32C3 还支持OTA(远程升级)功能,用户可以利用这一功能来远程升级设备的固件,无需人工干预。这个功能非常有用,可以帮助用户及时修复和改进设备的功能。 总之,Blinker ESP32C3 是一款功能强大且简单易用的物联网解决方案。它能够帮助用户快速构建智能设备,并实现设备与云端的连接和通信。无论是个人项目还是商业应用,Blinker ESP32C3 都能够提供可靠的解决方案。 ### 回答2: blinker esp32c3是一款基于ESP32-C3芯片的物联网开发板,具有内置WiFi和蓝牙功能。它采用了迅捷的双核处理器,可在较低的功耗下实现高性能的应用。该开发板还配备了丰富的外设接口和引脚,可连接各种传感器和执行器,实现灵活多样的物联网应用。 blinker esp32c3支持Blinker智能家居平台,通过与Blinker app配合使用,用户可以方便地实现物联网设备的远程控制和监测。同时,Blinker平台还提供了丰富的应用和功能模块,用户可以通过简单的拖拽操作就能快速定制个性化的物联网应用。 这款开发板还支持Arduino编程环境,开发者可以使用C++语言编写代码,实现各种功能。同时,ESP-IDF编程工具链也可以用于高级开发,提供了更丰富的底层功能和灵活性。 blinker esp32c3物联网应用开发领域有着广泛的应用,可以用于智能家居、工业自动化、农业监测、环境监测等各种场景。该开发板具有易用性、稳定性和高性能的特点,可以帮助开发者快速搭建物联网系统,实现智能化的控制和监测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值