☛ 功能说明
利用 Arduino UNO 开发板、 ULN2003 芯片驱动电机控制直流马达转动,并透过 20KΩ 可变电阻来调整直流马达的转速及 Serial Monitor 视窗来观察 PWM 数值的变化。
直流马达调速就是调节两端的电压。使用 PWM 通用的方法控制速度,实际是控制有效电压。此外,关于直流马达正、反转功能,这需要专用的驱动芯片配合控制,比如 L9110,L298 等。
关于 ULN2003 芯片,其内部是达林顿管,宽范围电源供电,大电流输出,适应性较广,内部集成包含二极管,是应用驱动喇叭,电机,继电器等功率器件。
ULN2003A 是一个 7 路反向器电路,即当插入端为高电平时 ULN2003A 输出端为低电平,当插入端为低电平时 ULN2003A 输出端为高电平。由于 ULN2003A 是集电极开路输出,为了让这个二极管起到续流作用,必须将 COM 引脚 ( pin9 ) 接在负载的供电电源上,唯有这样子才可以生成续流回路。同样也可以当做一些电子元件,如伺服电机的稳压电路。
ULN2003 实际上首要有七个反相器组成,在这当中反相器 OC 门,也就是集电极开路。
用 NPN 型三极管解释集电极开路就是集电极当做输出,基极当做插入,发射极接地。在这当中集电极在这里对应 COM 端,可以接 VCC,这样子当基极接低电平时三极管截止集电极输出高电平;基极接高电平时三极管导通集电极输出低电平。如此生成了 MCU 电平反相输出,但反相不是要点,大电流才是要点。ULN2003 的 COM 端接继电器的电源正避免电压击穿电子元件。ULN2003 集电极开路输出,也只能接受到灌入电流。驱动负载电流最高为 500mA,驱动电压最高为 50V。ULN2003 作用说明如下:
ULN2003 是大电流驱动阵列,多用于 C51 单片机、多功能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。插入 5V TTL电平,输出可达500mA/50V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅 NPN 达林顿管组成。该电路的特色如下:ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在 5V 的工作标准电压下它能与 TTL 和 CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器。
ULN2003 是高压大电流达林顿晶体管阵列产品系列,具备电流增益值高、工作标准电压高、温度范围宽、带负载能力强等特色,适用于各种类型需要高速功率较大的驱动的系统。
☛ 使用材料
Arduino UNO R3 开发板 × 1、ULN2003 芯片 × 1、5V 直流马达 × 1、20KΩ 可变电阻 × 1。
☛ 电路图及面包板接线图
☛ 程序码
const int analogInPin = A0; // 模拟输入引脚 const int analogOutPin = 9; // PWM 输出引脚 int sensorValue = 0; // 电位器电压值 int outputValue = 0; // 模拟量输出值 ( PWM ) void setup() { Serial.begin(9600); // 初始化串口参数 } void loop() { sensorValue = analogRead(analogInPin); // 读取模拟量值 outputValue = map(sensorValue, 0, 1023, 0, 255); // 变换数据区间 analogWrite(analogOutPin, outputValue); // 输出对应的 PWM 值 Serial.print("sensor = " ); // 打印结果到串口监视器 Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); delay(2); // 等待 2ms ,确保能稳定读取下一次数值 }