Arduino 直流电机程序示例

概述
演示直流电机的控制。

示例程序
PWM控制直流电机
略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了。

// ----------------------------------------------------------------------------
// pwmMotor.ino
// 
// Created 2015-06-11
// By seesea <seesea2517#gmail#com> 
// 
// PWM 控制直流电机转速
// 其实就是之前的 PWM 控制 LED 的程序,完全一样,只是硬件上加上一个三极管用来驱动电机而已
//
// 11 脚接 NPN 三极管的基极,三极管集电极接电机一脚,电机另一脚接外接电源正极,三极管发射极接外接电源负,arduino 的 GND 也接到三极管发射极
// ----------------------------------------------------------------------------

const unsigned char motor  = 11;
const unsigned char sensor = A0;

void setup()
{
    pinMode(motor,  OUTPUT);
    pinMode(sensor, INPUT);
}

void loop()
{
    // 用 map 函数进行范围的映射
    analogWrite(motor, map(analogRead(sensor), 0, 1023, 0, 255));
}

上个接线图和效果图:

H桥控制直流电机

// ----------------------------------------------------------------------------
// hBridgeMotor.ino
// 
// Created 2015-06-11
// By seesea <seesea2517#gmail#com> 
// 
// H 桥控制直流电机演示
// 通过 H 桥控制直流电机的转动方向
// 先顺时针转一秒,再逆时针转一秒,停一秒,重复前述动作
//
// 根据 H 桥实际的电路进行接线。手头没有现成的芯片,用了四个三极管搭的粗糙的 H 桥原型来做的实验
// ----------------------------------------------------------------------------

const unsigned char pinMotorCW  = 10;   // 接控制电机顺时针转的 H 桥引脚
const unsigned char pinMotorCCW = 11;   // 接控制电机逆时针转的 H 桥引脚

// 电机停转
void motorStop()
{
    digitalWrite(pinMotorCW,  LOW);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机顺时针转
void motorCW()
{
    digitalWrite(pinMotorCW,  HIGH);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机逆时针转
void motorCCW()
{
    digitalWrite(pinMotorCW,  LOW);
    digitalWrite(pinMotorCCW, HIGH);
}

void setup()
{
    pinMode(pinMotorCW,  OUTPUT);
    pinMode(pinMotorCCW, OUTPUT);
}

void loop()
{
    motorCW();
    delay(1000);
    
    motorCCW();
    delay(1000);
    
    motorStop();
    delay(1000);
}

手工搭的 H 桥,太乱了就看个效果吧,建议直接用现成的芯片。

PWM + H 桥控制直流电机
同时控制直流电机的方向及转速

// ----------------------------------------------------------------------------
// pwmHBridgeMotor.ino
// 
// Created 2015-06-11
// By seesea <seesea2517#gmail#com> 
// 
// PWM 通过 H 桥控制直流电机
// 既控制电机的转速,也控制电机的方向
// 控制电机顺时针逐渐转快,再逐渐转慢,然后逆时针由慢转快再转慢,又回到顺时针的转动循环
//
// 根据 H 桥实际的电路进行接线。手头没有现成的芯片,用了四个三极管搭的粗糙的 H 桥原型来做的实验
// ----------------------------------------------------------------------------

const unsigned char pinMotorCW  = 10;   // 接控制电机顺时针转的 H 桥引脚
const unsigned char pinMotorCCW = 11;   // 接控制电机逆时针转的 H 桥引脚

// 电机停转
void motorStop()
{
    digitalWrite(pinMotorCW, LOW);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机以参数设定的 pwm 值顺时针转
void motorCW(unsigned char pwm)
{
    analogWrite(pinMotorCW,   pwm);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机以参数设定的 pwm 值逆时针转
void motorCCW(unsigned char pwm)
{
    digitalWrite(pinMotorCW, LOW);
    analogWrite(pinMotorCCW, pwm);
}

void setup()
{
    pinMode(pinMotorCW,  OUTPUT);
    pinMode(pinMotorCCW, OUTPUT);
}

void loop()
{
    unsigned char i;

    // 顺时针由慢到快
    for (i = 0; i < 255; ++i) { motorCW(i); delay(10); } // 顺时针由快到慢 for (i = 255; i > 0; --i)
    {
        motorCW(i);
        delay(10);
    }

    // 逆时针由慢到快
    for (i = 0; i < 255; ++i) { motorCCW(i); delay(10); } // 逆时针由快到慢 for (i = 255; i > 0; --i)
    {
        motorCCW(i);
        delay(10);
    }
}

用三极管搭的简陋 H 桥就看个效果啦,建议直接用现成的芯片。

https://www.cnblogs.com/starsnow/p/4579547.html

坐沙发

发表评论