舵机的控制

舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为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_0uint16_t duty;//from 0 to 8*1024-1ledc_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 controlledc_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();
}

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

ESP32C3驱动舵机相关推荐

  1. 启明云端分享|直接用ESP32-S2和ESP32-C3驱动1.54寸串口屏,有哪些区别呢,他们的亮点又有哪些呢

    以上两组图分别是ESP32-S2和ESP32-C3驱动1.54寸串口屏的规格尺寸(后面我们统称为WT-1.54S系列和WT-1.54C系列) 首先 WT-1.54S系列和WT-1.54C系列刷新频率有 ...

  2. Micropython教程之TPYBoard开发板驱动舵机教程(萝卜学科编程教育)

    2019独角兽企业重金招聘Python工程师标准>>> 大家应该都看到过机器人的手臂啊腿脚啊什么的一抽一抽的在动弹吧...是不是和机械舞一样的有节奏,现在很多机器人模型里面的动力器件 ...

  3. 【STM32】实战2—用STM32产生PWM信号驱动舵机MG996R(一)

    目录 0 参考资料出处 参考博客 1 实验预期效果 2 硬件学习 2.1 舵机MG996R 3 STM32CubeMX的相关配置与接线 3.1 配置定时器TIM3 3.2 stm32原理图 3.3 舵 ...

  4. STM32CuBeMX驱动舵机

    舵机 舵机(Servo),由直流电机.减速齿轮组.传感器和控制电路组成的一套自动控制系统.其控制方式为PWM控制,通过调节控制信号的占空比来实现舵机转动指定角度. 舵机控制 驱动舵机的PWM信号周期需 ...

  5. WEMOS D1 R1/R2 [ESP8266] + PCA9685 驱动舵机

    WEMOS D1 R1/R2 [ESP8266] + PCA9685 驱动舵机 PCA9685 16-Channel 12-BIT PWM Driver,某些淘宝卖家只是标注了16路舵机驱动模块. P ...

  6. arduino驱动MG996舵机+stm32f103驱动舵机

    2020/12/16更新stm32f103驱动舵机方式 舵机基本信息 舵机的控制信号周期为20MS的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5MS,相对应的舵盘位置为0-180度.也就是说周 ...

  7. 阿里云python轻应用学习笔记(四)---haas100通过python轻应用驱动舵机

    摘要:舵机是常用的执行器,haas100具有pwm功能,那么python轻应用编程驱动舵机能不能实现呢?本文就一步步带您做一遍. 硬件:haas100,SG90舵机 软件:win7 x64,串口助理 ...

  8. MSP432驱动舵机串口输出角度

    MSP432驱动舵机串口输出角度 备注:我用的TI官方launchpad的MSP432P401R开发板 1.舵机需要50Hz基准的PWM,占空比是0.025~0.125.如何产生PWM,当然是定时器了 ...

  9. P16[6-4]:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)

    1.接线原理图: 注:红线接5V,不是3.3V(电压小,带不动) 实物图: PWM驱动舵机:按下按键,舵机输出轴角度变化,OLED显示该角度. 2.代码部分如下: 主函数代码部分:

最新文章

  1. java spring框架 注解_史上最全的java spring注解
  2. 在nodejs中操作mongodb
  3. java学习(一)多态
  4. Django 【第一篇】基础
  5. 用canvas画一个刮刮卡
  6. 论文撰写-LaTex 教程+模板
  7. 抖音小程序达人入驻壁纸微信小程序安装教程
  8. import torch报错画图问题Matplotlib created a temporary config/cache directory at /tmp/matplotl
  9. C#学习笔记之线程安全
  10. 邮箱smtp服务-QQ邮箱163邮箱(保姆级图文)【杂记】
  11. 惯性导航系统可替代基于GPS的跟踪
  12. 导入 xlsx php,php如何使用phpexcel类导入excel表格数据
  13. 2021年汽车半导体行业研究报告
  14. 2019年蓝桥杯C/C++ B组试题 部分题目答案
  15. 上课第一天初感。。。
  16. CM部署CDH安装组件到scm时报错: Cause:Table ‘scm.CM_VERSION‘ doesn‘t exist
  17. 什么是内联电子商务_什么是电子商务
  18. 浏览器兼容性问题总结
  19. 全球及中国浮区硅晶圆行业发展格局分析及投资前景调研报告2022-2028年
  20. 课程linux实验报告,Linux操作系统课程实验报告.doc

热门文章

  1. UFD203A101 3BHE019361R0101电 工理论、电子技术、信息处理、控制理论、电力系统分析
  2. jpg和png的区别
  3. (二)Pgcluu监控
  4. 密码学-侧信道论文梳理-A Highly Efficient Correlation Power Analysis on PRINT cipher
  5. 【经济学】【综合篇】经济机器是怎样运行的
  6. Hadoop-HA高可用架构分布式环境搭建教程
  7. 关于网易云信聊天室 FAQ
  8. 阿里云学生机mysql初始密码
  9. 数据库实战20_获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和received,没有分配奖金的员工不显示对应的bonus类型btype和received
  10. Shell Programming