用双向电调驱动水下电机的各种方法

无刷电机和电子调速器连接示意图


一边是电机的三根线 一边是电调的供电线和信号线。

从电机的接线PCB上把电机的ABC相线引出,并胶封接线口,防水绝缘,接线过程中要确保各处接线的可靠。
电机的三根线接电调的三根线,连线顺序随意,连线顺序影响电机的转向; 一根线不同,调换另外两根线的接线可以改变电机的转动方向。

一般的商品电调使用遥控器加接收机的方式来设置和控制电机的转速。
接收机标准的输入信号格式是周期为50HZ的PPM信号,一帧PPM信号长度为20ms,每个通道信号脉宽0~2ms,变化范围在1ms~2ms对应油门在0~100%间的变化。经由接收机解码后产生不同脉宽的PWM信号给多路电调。


不使用遥控器加接收机的方式,也可以直接用单片机产生多路PWM控制给电调来调整电机的转速。这里以STM32为例,STM32的定时器最多可以同时产生30路的PWM输出,完全满足rov电机控制方面的需求。

把STM32的PWM输出引脚连接到电调的信号线上,接下来要做的就是配置STM32的PWM输出50Hz的方波;这里采用的是固定频率调节占空比的方式来调节转速。

STM32控制PWM的几个主要寄存器:PSC(预分频寄存器); ARR(自动重装载寄存器); CCR(比较寄存器);
后由公式计算: Fout=Ftclk/(PSC+1)(ARR+1);
Fout:PWM输出频率
Ftclk:定时器的输入时钟频率
而决定占空比的就是ARR和CCR寄存器
在TIMER的向上计数 输出比较极性为高 PWM1模式下: 占空比=CCR/ARR;
ARR不变只要改变CCR寄存器中的值就可以改变PWM的占空比;

商品电调一般都有启动保护,防止一上电电机就在高速下转动,要先将油门调到最低进行初始化,并不是上电后直接给PWM信号就能让电机转动起来。


也就是上电后要PWM模拟油门范围设定油门行程后才能正常启动电机。
例如:50Hz的信号, 将1ms高电平设为零点油门信号,2ms高电平为最大油门,1~2ms高电平对应的油门范围就是0~100%;
每次电调上电后会自动检测输入的油门信号,然后执行相应的油门模式;

不同品牌的电调会有不同的提示音,来表示当前电调的状态;根据不同电调的说明书来调整程序的设置;

几种常见的电机无法启动情况和解决办法:
上电后电机无法启动,且无任何声音;可能是电源接头接触不良,这时要检查各处的接线,检查是否存在短路断路情况,重新插好电机的插头或更换接头;
上电后电机无法启动,发出“哔-哔-、哔-哔-、哔-哔-”的警示音(每两声间隔时间为1秒),可能是电调的供电电压不正常,检查供电电压是否在电调的正常工作电压范围内;
上电后电机无法启动,发出“哔-哔-、哔-哔-、哔-哔-”的警示音(每两声间隔时间为2秒),可能是电调无油门信号输入,这时要检查的是单片机和电调信号线的连接是否有接触不良的情况,排除了接线的原因后就要看单片机是否有PWM输出,输出的PWM是否是我们想要输出的频率;
上电后电机无法启动,发出“哔、哔、哔、哔”急促单音,可能是油门未归零或者是油门行程设置过小,这时就要修改电调的初始化程序,重新设置油门行程;
上电后电机无法启动,发出其他提示音,可能是设置油门行程的初始化程序延时不对,电调进入到编程模式;
电机反转,电调输出线和电机线连接的线序错误,将三根输出线中的任意两根线对调即可改变电机的转向;

首先要确保各处的接线可靠,然后看单片机的PWM是否正确输出,再根据电调反馈的提示音很快就可以找到问题出现在哪。

3 个赞

内容不错,要好好学习一下!

淘宝有售双向的无刷电机电调,也有无刷电机测试仪,不过还是有用户对驱动有一些困惑。

无刷电机测试仪这样用(图片是网上的,下次拍了换上):


不过rovmaker的电调没有BEC,需要给舵机测试仪单独供电。
电池连接电调,电调连接电机,电调的信号和地连接测试仪,给测试仪供电,选择测试仪驱动模式。

以下是用arduino驱动无刷电机的方法:简单来说是用arduino代替无刷电机测试仪产生pwm信号给电调。

这里的pwm信号是通过arduino上server库输出的pwm,是脉冲宽度调制,不是arduino默认的pwm,默认的是通过占空比模拟一个模拟量。

rovmaker的双向电调默认设置是1000到2000,1500是停转,两边是正反转,越向两边转速越高,转速最高分别是1000和2000,1ms~2ms对应两边100%最高油门,1.5ms是停转。

示例使用 rovmaker.taobao.com 的电机和电调,图片是网上找来的,也下才拍了再换吧~。
整体连接方式:

连接电机和电调的三根线(注意端子和电流),三根线的顺序不用在意,如果随意调换两根,电机则反转。
连接电调的正负两根线到电池,注意使用动力锂电池,空气中运转电流很小,在水中会变高很多。
连接电调的信号线(黑色是地,白色是信号)
黑色连接arduino的gnd,白色连接arduino随意的一个digital引脚,这里是pin12

arduino程序(要自己改一下~):

#include <Servo.h>
Servo esc_signal;
void setup()
{
esc_signal.attach(12); //定义电调信号线所接的引脚
esc_signal.write(30); //ESC arm command. ESCs won’t start unless input speed is less during initialization.
delay(3000); //ESC initialization delay.
}
void loop()
{
esc_signal.write(55); //Vary this between 40-130 to change the speed of motor. Higher value, higher speed.
delay(15);
}

注意先连接电池到电调,给电调供电,再给arduino供电。
如果先给arduino供电,电调可能会错过arduino开机进行的初始化步骤,这个时候可以按一下arduino的复位,重新进行初始化。

还可以加上旋钮:

程序(也要自己改一下~):

#include <Servo.h>

Servo esc;
int throttlePin = 0;

void setup()
{
esc.attach(9);
}

void loop()
{
int throttle = analogRead(throttlePin);
throttle = map(throttle, 0, 1023, 0, 179);
esc.write(throttle);
}

以上两个程序都需要调节输出和校准哦~~

电调初始化过程:
电调点击连接后,电机发出哔哔哔的声音,代表已经上电。
给最大油门,哔一声,给最小油门,哔一声。
结束。
声音大概是,哔哔哔~哔~哔~

2 个赞

原来以前有过这个内容的帖子~

帖子链接跳转:
点击这里

1 个赞

电调有使用说明书吗?
第一次用电调,试了几次发现是上电,哆来咪 的音调,任选1-2ms方波脉冲(最小没试),哔一声,1.5ms方波脉冲,哔一声,然后就可以控制电机转动了。
如果一上电就是1.5ms方波脉冲,哆来咪3声后 会连续哔哔两声,然后可以控制电机。
这个电调是不需要设置最大最小油门,中位解锁吗?
不太懂,求告知。

昨天电机到了,我用树莓派的RIp.GPIO库调试了一天多,有哔哔声,但电机就是转动不了,楼主,能不能帮我解决一下,谢谢。