分享一下水下机器人的电机控制(针对的是直流无刷电机+双向电调的模式)。
其实一句话就说明白了,频率50hz的方波,1.5毫秒占空比是初始化;假如1~1.5毫秒正转,1.5~2毫秒反转,反之亦然。1.5毫秒占空比是初始化状态,电机不转;以1.5毫秒为界限,增加或者减少电机都会转的越来越快。
我以arduino为例贴出一段代码(arduino有Servo库,比较方便,别的单片机需要生成pwm波,计算占空比,套路是一样的。)
#include <Servo.h>
Servo myservo;//电机控制变量
int value;
void setup()
{
Serial.begin(9600);
myservo.attach(4);//arduino4号数字引脚。
myservo.writeMicroseconds(1500);//初始化,如果不先初始化,电机没有办法旋转。
delay(500);
}
void loop()
{
while(Serial.available() > 0)
{
value = Serial.parseInt();//接收串口发来的整型数据
}
if(value>2000)//限幅,超过这个范围,电机依然不会旋转。
{
value=2000;
}
if(value<1000)
{
value=1000;
}
Serial.println(value);
myservo.writeMicroseconds(value);//将串口发来的数值作用到电机上,实现电机旋转。
}
最重要的一点,arduino的地要和电机的地共到一起。