控制直流电机比较简单,主要利用L298n构成H桥来控制电机正反转。。
器件:
L298N模块1块;arduino uno 1块;直流电机 1个。
http://s14/bmiddle/001ANLlQgy6IptPAsTb7d&690UNo 通过L298n控制直流电机" TITLE="Arduino UNo 通过L298n控制直流电机" />
接线:
L298n除了控制部分和电机输入电源线各2根外,输入In1~In4,分别对应输出OUT1~OUT4.
接直流电机时OUT1、2接电机1的两条电源线;OUT3、4接电机2。这里只用了一个直流电机所以直接out1、2.
输入端还有两条线EnA、EnB分别用于输入pwm波对两个电机调速。
In1:High,In2:Low 时,电机正传(其实无所谓方向正负)。反之,反转。
In1--》P13;in2--》p12;
EnA--》P11(需要可以输出pwm波的端口)
程序:
对网上找的的程序进行修改,实测可用:
#define motor1pin1
13
//定义IN1引脚
#define motor1pin2
12
//定义IN2引脚
#define motor1pwm
11
//定义ENA引脚(我的是Mega2560的板子)
#define motor2pin1
9
//定义IN3引脚
#define motor2pin2
8
//定义IN4引脚
#define motor2pwm
10
//定义ENB引脚
unsigned long lastMillis =0;
unsigned long currentMillis =0;
unsigned long lastMicros =0;
unsigned long currentMicros =0;
unsigned long intervalMillis =0 ;
unsigned long intervalMicros =0;
void motor(int motorpin1,int motorpin2,int motorpwm,int
val) //定义一个电机转动函数
{
pinMode(motorpin1,OUTPUT);
//输出第一个引脚
pinMode(motorpin2,OUTPUT);
//输出第二个引脚
digitalWrite(motorpin2,0);
//将第二个引脚置低
digitalWrite(motorpin1,1);
//将第一个引脚抬高
analogWrite(motorpwm,val);
//给EN引脚设定模拟值,设定转速
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i;
currentMicros=micros();
intervalMicros = currentMicros -
lastMicros;
Serial.println(intervalMicros);
lastMicros=currentMicros;
// for(i=100;i<=255;i++)
//让电机的转速从100到255转动,A,B转速不一样,完成转向
// {
// //
motor(motor2pin1,motor2pin2,motor2pwm,255);
//电机B保持255匀速转动
//
motor(motor1pin1,motor1pin2,motor1pwm,i);
//电机A从100到255转动
//
delay(500);