水下机器人之电机控制
分享一下水下机器人的电机控制(针对的是直流无刷电机+双向电调的模式)。 其实一句话就说明白了,频率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的地要和电机的地共到一起。
