Arduino 直流电机程序示例

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

// ----------------------------------------------------------------------------

// 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桥控制直流电机

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 桥控制直流电机
同时控制直流电机的方向及转速

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 桥就看个效果啦,建议直接用现成的芯片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值