原理:arduino模拟遥控器
以无人机的无刷电机为例,遥控器与无刷电机进行校准:
1.遥控器将油门打到最大
2.接收机油门输出端口的pwm输出最大,(一般在2000左右)
3.pwm输出到电调
4.给电调上电
5.因为输出到电调的pwm比较大,电调进行校对,设定现在的值为最大值,并发出滴滴声
6.遥控器将油门打到最小
7.接收机油门油门输出端口的pwm输出最小,(一般在1000左右)
8.pwm输出到电调
9.电调设定现在的值为最小值,并发出滴滴滴声
10.慢慢把遥控器往上掰,无刷电机开始转动。
我们用arduino代替遥控器和接收机,只需要arduino去模拟遥控器的pwm输出给电调就好了,不用纠结接收机的pwm具体是多少,因为电调会和arduino的pwm重新校对最大值和最小值。
接线
电调与无刷电机的线接好,不用考虑接线顺序,随便调转接的2根线就能实现正反转。
电调的白线是数据端口接arduion 9号端口。(arduino输出pwm给电调)
电调的红色是电源端口接arduion 的vin端口。(给arduino供电)
电调的黑线是共地端口接arduion 的GND端口。(共地)
假如电调没有红色的电源线,可以不接。但是要而外给arduino供电。
程序
#include <Servo.h>
Servo myservo1;//
int Max=2000; //转速最大时候的pwm
int Min=1000; //转速最小时候的pwm
int pos=Min; //初始转速赋值
int sign=0; //标志位,用于切换转速增大还是减小
void setup() {
myservo1.attach(9); //pwm输出口为9号端口
myservo1.write(Max); //输出定义的pwm最大值,模拟遥控器油门打到最大
delay(5000); //等待电机设定最大值,会滴滴的发出声音
myservo1.write(Min); //输出定义的pwm最小值,模拟遥控器油门打到最小
delay(5000); //等待电机设定最小值,会滴滴滴的发出声音
Serial.begin(9600);
}
void loop() //电机转速从小变大再变小,反复循环. pwm数值会从串口输出。
{
delay(10);
if(sign==0) //让转速逐渐增大,增大到最大速度的一半
{
Serial.println(pos);
myservo1.write(pos); //输出pwm到9号端口
pos++;
if(pos==(Max+Min)/2)
sign=1;
}
if(sign==1) //让转速逐渐减小,减小到电机停止转动
{
Serial.println(pos);
myservo1.write(pos); //输出pwm到9号端口
pos--;
if(pos==Min)
sign=0;
}
}