田螺 发表于 2018-5-17 22:08:56

Arduino驱动无刷电机

本帖最后由 田螺 于 2019-1-11 19:43 编辑

        玩无人机的小伙伴应该已经猜到了,电调就是带动无刷电机做运动的家伙,电机需要电调带动
        大家可能会问 不就一个电机吗?有那么麻烦嘛?我可要告诉大家 “无刷电机” 可不像四驱车那种通电就走的喔。当然你无人机用那种电机也不是不可以
        无刷直流电机由电动机主体和驱动器组成,是一种典型的机电一体化产品。由于无刷直流电动机是以自控式运行的,所以不会像变频调速下重载启动的同步电机那样在转子上另加启动绕组,也不会在负载突变时产生振荡和失步。(来源于百度)
        那么问题来了,我有了电源、有了电调、有了电机,那怎么操控它呢?如果你是有钱人的话那就用钱砸吧。买控制器吧也要买遥控器,一套少了200拿不下来 我这种穷逼也只能看着那些拿遥控器的流憨口水了... 既然大家有雅兴来捧我的场,那我就把省钱但不省力的方法共享给大家。

http://bbs.fishc.com/static/image/hrline/4.gif

声明:由于我也是才开是了解无人机这一块所以我不会推荐。
准备:
字典: https://www.arduino.cc/reference/en/#functions(Arduino函数功能查询)

电池
        学习嘛可以卖点便宜的,但也要注意安全哦 搞不好会炸的!不是跟你拉稀摆带!(方言意义是不开玩笑!)注意!注意!注意!

电调

我选接入是T型供电接口
        重点是控制线,分3根 红 黑 白(黄) 红和黑就是给控制器供电电压在4.5-5V,如果你Arduino有单独供电可以直接忽略红色那根。黄色就是信号线了,黑色是负极。

电机

        电机无非就是旋向的问题了,任意倒两根线就可以

接线

        大家可以看到自己单片机接线口有A0 A2....    01 02 03~...   
        带了“A”的就是可以输入的模拟量,我旁边的摇杆就是接在上面控制油门的。
analogRead(pin)
参数
pin:引脚号
value: HIGH or LOW
        这个“~”是PWM引脚,没有“~”只能输出高或低电频,带了“~”就可以控制例如灯泡的亮度
analogWrite(pin, value)
pin: the pin to write to. Allowed data types: int.
value: the duty cycle: between 0 (always off) and 255 (always on). Allowed data types: int
        就两根线,摇杆暂时不接,看上去乱糟糟的影响大家的心情。
黄色<==>pin4
黑色<==>GND
现在万事俱备只欠东风。现在是最圣神的时刻,因为我们要赐予它“灵魂”
void motor(int sp,int times){//脉冲函数
int time_l = times;
int time_h= map(times,0,1020,888,2048);//这个数值就是脉冲的时间
digitalWrite(sp,HIGH);//将电平至高
delayMicroseconds(time_h);//延时脉宽值的微秒数
digitalWrite(sp,LOW);//将电平至低
delayMicroseconds(2000 - time_l / 6);//延时脉宽值的微秒数
}
void setup(){
pinMode(4,OUTPUT);//将指定的引脚配置为输入或输出,这里是设的输出
}
void loop(){
unsigned int rocker;
rocker = analogRead(A0);//摇杆0~1020
//引用脉冲函数
motor(4,rocker);
}
建议大家使用以下代码:
#include <Servo.h>
Servo servo_1;
void motor(int dat){               //放大或缩小数据并写入函数
dat = map(dat,0,9,0,180);
servo_1.write(dat);
}
void setup(){
Serial.begin(9600);
servo_1.attach(8,1000,2000);//pwm引脚8;高电平2000低电平1000
}
void loop(){
int dat = Serial.read();         //以ASCII方式读取
dat-=48;                              //把ASCII简单转一下0~9
if(dat!=-49)                        //当没获取数据Serial.read()函数返回字符”-1“
    motor(dat);
}

        我拍着胸脯告诉你,你没有看错!没有看错!不到20行而且超级简单!我学习的时候在各大论坛查代码查资料。看又看不大懂而且多得起堆堆(头发短见识短)现在我给大家浓缩了一下希望大家能够看的懂。
        安全注意事项提醒:建议大家show的时候不要把转速调太高,我就是例子,在调油门的时候由于操作不当。还按上了螺旋桨结果把我指甲都打破了,恐怕没人有我这么笨了吧....
        说到油门,电调连接上电机首先要做的第一件事就是设置油门行程,方法是:在arduino串口监视器里面先输入字符‘9’再通电调电源,等到声音与平常无控制器通电时不一样时再输入‘0’油门调整完成。

        果真没骗你们吧,只有两根线和很少的代码。至于摇杆的连接我就不写在这里面了,大家一起期待小甲鱼老湿开课吧!

map()函数的用法:
在官方文档里面其实已经写得很清楚了这里我说说我对它的理解。
**** Hidden Message *****

sswy 发表于 2018-5-17 22:22:38

支持

田螺 发表于 2018-5-18 20:11:48

sswy 发表于 2018-5-17 22:22
支持

谢谢!

sswy 发表于 2018-5-19 20:04:59

田螺 发表于 2018-5-18 20:11
谢谢!

谢谢,坚持更新,加油

dddR4 发表于 2018-8-10 18:46:50

支持支持

海绵爱上星 发表于 2018-8-13 13:35:36

反手就是一个支持

btx159632 发表于 2018-10-28 17:19:04

SP

WU651076495 发表于 2018-11-1 18:18:31

有点东西

cat1234 发表于 2019-2-18 15:44:08

谢谢楼主的干货分享

Wunter 发表于 2019-5-14 12:59:18

谢谢

chenweb 发表于 2019-6-29 14:35:42

可以控制无刷电机的正反转么

田螺 发表于 2019-6-30 23:18:25

chenweb 发表于 2019-6-29 14:35
可以控制无刷电机的正反转么

三项任意调换两项即可实现反转

qw675580555 发表于 2019-8-15 10:53:15

支持

Dayongr 发表于 2019-8-26 07:44:07

学习一下,平衡程序

xavieryu 发表于 2019-10-17 20:59:45

支持一下 好代码

zangweipp 发表于 2019-10-27 16:27:22

极为感谢

小韩111 发表于 2020-2-10 11:11:28

您好,请问电机和电调的型号是什么?我自己瞎买的,接口都不对应,实在难受。{:5_100:}能给个链接吗?

田螺 发表于 2020-2-10 12:11:34

小韩111 发表于 2020-2-10 11:11
您好,请问电机和电调的型号是什么?我自己瞎买的,接口都不对应,实在难受。能给个链接吗?

你确定要买的电机型号后可以找客服小姐姐帮你选配电调。我也是随便买的,本来想买小的,结果买大了

小韩111 发表于 2020-2-12 19:40:33

田螺 发表于 2020-2-10 12:11
你确定要买的电机型号后可以找客服小姐姐帮你选配电调。我也是随便买的,本来想买小的,结果买大了

诶,现在疫情这样,我们这里都不让出门了。等之后试试,谢谢{:5_110:}

小韩111 发表于 2020-2-20 17:12:36

您好,我又来请教了,按照您的代码和连接试了,给电调通电后电机有规律的滴滴声,我想到是要调速度,在串口监视器发送9没有什么反应,监视器和电机都没什么变化,请问该怎么解决?方便的话可以加您微信吗?想详细的请教下。{:5_91:}{:5_91:}
页: [1] 2
查看完整版本: Arduino驱动无刷电机