使用Arduino控制大疆GM6020无刷电机:

话不多说直接上代码

#include <Servo.h>
Servo myservo;        //创建一个舵机控制对象// Arduino自带的Servo函数库只可以同时控制两个模拟舵机;//且最好使用D9 D10脚;//若需要控制多个舵机则需要用pwm功能;//使用Servo类最多可以控制8个舵机
int pos = 1840;             // 该变量(pos)用于存储舵机角度位置
char num;
int i = 0;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~朴实的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void setup()
{ Serial.begin(19200);myservo.attach(9);     // 该舵机由arduino第九脚控制
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~朴实的分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void loop()
{ num = Serial.read();switch(num){case '1':pos = 1840;myservo.writeMicroseconds(pos);delay(20);break; /* 可选的 */case '3':pos = 1210;myservo.writeMicroseconds(pos);delay(20);break; /* 可选的 */case '4':pos = 1425;myservo.writeMicroseconds(pos);delay(20);break; /* 可选的 */case '0':pos = 1635;myservo.write(pos);delay(20);break; /* 可选的 *//* 您可以有任意数量的 case 语句 */default : /* 可选的 */myservo.writeMicroseconds(pos);delay(20);break;}
}

具体的编程思想是模拟50HZ的PWM波来完成对GM6020电机的控制,笔者的代码并不是非常好,建议大家使用定时器Timer来完成模拟这样Arduino就可以做更多事了,而非将全部的资源都用来模拟PWM波

如果大家觉得有帮助的话可以点个赞!


2021.9.9
由于项目需要,又用了一下GM6020,更新一下代码,可以不用模拟PWM波直接用它自带的Servo库即可(Servo库本身就是用的定时器实现的控制),但是需要设置一下占空比的范围,我用的是ESP32,用Arduino的话改一下就行了

#include <ESP32Servo.h>
#define OUT_X 17       // 伺服馬達X的輸出腳
Servo servoX;
int pos = 0, temp = 0;
void setup() {// put your setup code here, to run once:servoX.attach(OUT_X, 1000, 2000);    // 設定伺服馬達的接腳Serial.begin(115200); //设置串口波特率9600
}void loop() {// put your main code here, to run repeatedly:while(!Serial)//检测是否有串口接通{} if(Serial.available()>0) //判断是否具有输入{pos=Serial.parseInt(); //接收数据if (pos != 0){Serial.println(pos);servoX.write(pos); //定义舵机的转动角度}}
}

如果GM6020没反应的话,可以拨一下电机底座上决定ID号的拨码开关就行了


2022.2.9
最近经过测试,使用3508电机时我发现上面那个使用ESP32Servo库的程序时好时坏,经过思考我发现,问题出在了串口通讯上面,库本身是能够发出正确的PWM波的,但是由于我们使用串口控制的缘故,导致程序需要的等待我们发出串口的指令,这样ESP32Servo库发出PWM波的周期就不正确了,这也是为什么我最开始第一次更新的那个程序可以正常工作而后面这个有的时候可以而有的时候不可以,最前面的那个Arduino的那个程序,因为在无论何时都是满足50HZ的发布频率,因为我们使用了delay去模拟,所以电调才能一直接收到正确频率的PWM波信号,这个3508很娇贵,你必须先按照他的要求发送给PWM波把他骗过去,后面就是你想咋发就咋发了,程序代码如下:

#include <ESP32Servo.h>
// #include <SPI.h>
// #include <Wire.h>
#define OUT_X 15       // 3508的輸出腳Servo servoX;
int pos = 1500, temp = 0, flag = 2000;
void setup() {// put your setup code here, to run once:servoX.attach(OUT_X, 1000, 2000);    // 設定3508的接腳Serial.begin(115200); //设置串口波特率115200// 3508初始化while(flag > 1430)  // 我使用的这个3508是1430的脉宽的时候静止,这一段的意义是按照C620要求的发布速率发布{                      // pwm波先把电调给骗过去,然后后面你给他发什么他就会干什么servoX.write(flag--);Serial.println(flag);delay(20);}
}void loop() {while(!Serial)//检测是否有串口接通{}if(Serial.available()>0) //判断是否具有输入{temp=Serial.parseInt(); //接收数据if (temp != 0){pos = temp;Serial.println(pos);servoX.write(pos); //定义3508的转动速度的PWM脉宽}}
}

另附测试代码,不是串口控制,是直接控制,建议这样做比较合适

#include <ESP32Servo.h>
#define OUT_X 15       // 3508的輸出腳
Servo servoX;
int pos = 90, temp = 0;
void setup() {// put your setup code here, to run once:servoX.attach(OUT_X, 1000, 2000);    // 設定3508的接腳servoX.setTimerWidth(20);Serial.begin(115200); //设置串口波特率115200
}
uint16_t flag=1500;
void loop() {// put your main code here, to run repeatedly:while(flag < 2000){servoX.write(flag++);  // 理论上1500停止 1000顺时针最大速度 2000逆时针最大速度中间是线性的delay(10);}while(flag > 1000){servoX.write(flag--);delay(10);}
}

使用ESP32的话为了不阻塞性延时loop函数,建议使用FreeRTOS创建一个task来专门处理此事

使用Arduino ESP32 通过PWM波控制大疆GM6020以及3508无刷电机(更新)相关推荐

  1. Arduino ESP32通过PWM控制无源蜂鸣器

    Arduino ESP32通过PWM控制无源蜂鸣器 相关篇<ESP32在Arduino开发环境中的PWM的使用方法> ESP32通过PWM控制无源蜂鸣器发出声音. 有源和无源蜂鸣器知识科普 ...

  2. Arduino ESP32利用PWM实现板载LED呼吸灯效果

    Arduino ESP32利用PWM实现板载LED呼吸灯效果 LEDC简介 LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的.它具有16个通道,可以生 ...

  3. STM32:利用PWM波控制飞盈电调过程和注意事项

    STM32:利用PWM波控制电调过程和注意事项 在进行模型控制的过程中,如四旋翼无人机等,需要用到电机,这些电机需要通过电调来控制电机的转速.在电调模块中带有的说明书一般都是利用遥控器进行控制,有些情 ...

  4. PWM波控制舵机实验

    PWM波控制舵机实验 硬件连接 首先是舵机的引线,一般为三线控制(没有接触过不是三线的),红色为电源,棕色为地,橙黄色为信号.控制舵机的时候,需要不断的给PWM波才能使得舵机在某个角度有扭矩 控制原理 ...

  5. PWM波控制舵机总结

    文章转载自 https://www.cnblogs.com/zhoubatuo/p/6138033.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的 ...

  6. PWM波控制LED灯的亮暗

    在做蓝桥杯第九届省赛题的时候,遇到了这样一个题目:实现4个不同等级的LED亮度分布. 这个要求我们可以联想到第七届的省赛题,控制PWM波的输出,我们在这里也可以应用相同的原理,就是通过定时器来达到LE ...

  7. 妙算2使用Onboard-SDK控制大疆210V2无人机(模拟器中 )

    一.硬件连接 1.使用无人机自带的USB-USB连接无人机210与电脑,连接方式如下图.大疆210无人机上设置如下图所示: A.绿色三角所指的开关,拨动到靠近USB接口的一侧,也就是现在图片中白色接线 ...

  8. FreeRTOS基础(二):STM32G4系列运行FreeRTOS驱动8路PWM波控制多个路舵机

    一.TIM2和TIM3配置,基于STM32CubeMX HCLK主时钟配置成72MHz 二.8路PWM初始化配置,50Hz PWM输出 注意:添加启动命令 /* TIM2 init function ...

  9. python控制大疆无人机_大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机...

    使用Tello-Python-master示例程序控制Tello EDU 上篇文章我们应该可以掌握使用socket调试工具操控Tello EDU无人机,那么本篇文章我们将使用"正宗" ...

最新文章

  1. python for
  2. SSRS动态设置文本框属性
  3. MiniGUI.cfg 文件详解
  4. c语言删除一行程序代码,删除C语言程序中所有的注释语句的实现代码
  5. 若依框架前端问题总结
  6. 阿里测试人员:8年经验分享自学软件测试学习路线
  7. 在asp.net 中实现只允许数字输入的文本框
  8. 【表盘识别】基于matlab GUI二值化指针式表盘识别【含Matlab源码 275期】
  9. python取字符串首字母_python字符串操作
  10. mybatis学习1
  11. 【PMP】PMBOK 笔记 第12章 项目采购管理
  12. SVAC1.0帧间预测技术分析
  13. 打造自己个性的notepad ++
  14. 计算机专业试讲10分钟教案,10分钟试讲教案模板.doc
  15. 基于PLC的实验室设备远程监控方案
  16. ​ 每周一书《数学之美 第二版》分享!
  17. cup过高是什么意思_CPU占用过高怎么办? 每日一答
  18. 第八次CCF计算机软件能力认证
  19. 案例分析|名创优品是如何通过精细化管理获得火速扩张的?
  20. 机器“读懂”放射学报告

热门文章

  1. Qt 之 QLCDNumber
  2. 2020年焊工(技师)考试内容及焊工(技师)考试申请表
  3. 计算机常见故障任务书,CAK6132A数控车床常见故障诊断与处理任务书.doc
  4. js选出给定数组中所有的偶数/奇数/n的倍数(filter)
  5. 第一章 行列式 第七节 克拉默法则
  6. [创业之路-48] :动态股权机制 -3- 静态股权分配 VS 动态股权分配
  7. 一个老股民的炒股心得
  8. 语义分割标记单张图片
  9. 牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02
  10. 《流畅的python》学习笔记之python是什么类型的语言?