Arduino 电平转换 升压 OUTPUT与9V/12V元件通讯

缘由

网络上有很多怎么让Arduino的5V电平转换成3.3V电平,从而和工做在3.3V下的芯片相互沟通的教程。可是若是想驱动高于5V电压的芯片,就找不到教程了。所以今天我来介绍一种方式,能让Arduino的OUTPUT口和须要5~12V的电子元件进行通讯。下文以12V为例。git

效果

  • 可以达到单向(从Arduino到12V芯片)通讯的目的
  • Arduino引脚输出的电平会被取反,即Arduino输出HIGH,芯片却收到LOW,反之亦然。

硬件准备

  1. Arduino一个
  2. 开关型NPN三极管(8050便可)一个
  3. 4.7K,10K电阻各一个(貌似不是这个阻值也能够,只要不要过小便可)

电路链接

面包板图:网络

(假设右边那个nano是咱们须要驱动的12V的东西)oop

原理图:测试

软件开发

必定要记住:Arduino引脚输出的电平会被取反,即Arduino输出HIGH,芯片却收到LOW,反之亦然!只要知道这一点,剩下的事情和开发普通OUTPUT引脚都差很少了。ui

咱们先弄一个测试工程试试看。spa

在测试工程中,咱们用万用表的电压表(20V挡位)来模拟12V芯片,即万用表红线接图中蓝线,万用表黑线接地(图中黑线)。由于芯片的INPUT模式至关于一个电压表,因此能够这么替代来看效果。当12V芯片应当收到HIGH时,咱们的万用表上就会出现接近12V的电压;收到LOW则出现0V。.net

创建一个ino工程,代码以下:3d

#define TEST_PIN 7

void setup(){
    pinMode(13,OUTPUT);
    pinMode(TEST_PIN,OUTPUT);
}

void loop(){
    digitalWrite(13,!digitalRead(13));
    digitalWrite(TEST_PIN,!digitalRead(TEST_PIN));
    delay(2000);
}

链接电路,查看效果。若是一切正常,你将会看到,当ino上的小灯亮起的时候,万用表显示0V;熄灭时显示12V。code

原理说明(针对没基础的人)

三极管这东西高中物理竟然不教...所以我自学研究了半天才勉强搞懂一点点。感受不少书/教程讲的都太复杂了,像什么阿尔法值,贝塔值,放大倍数什么的,真正应用的时候不必定用得上,所以我这里简单讲一讲三极管用得上的部分。blog

三极管有两种类型,NPN和PNP,我这里讲一讲NPN,即这篇文章中用到的那种。首先,咱们要记住这张图和它的三个引脚对应的说法:C(集电极),B(基极),E(发射极)(想搞懂名称的本身看原理去)。

咱们首先来看有箭头的那一条路径(B->E):这条路最简单,彻底不用考虑C端发生了什么,而是几乎能够当作一个B->E的二极管。B电压大于E必定程度(即B到E有足够大的电势差,通常是0.3V之类),就会有电流,反之则没有。咱们的电路中,B接的是Arduino引脚。所以,当Arduino HIGH时,BE有5V电位差,可是有一个限流电阻,所以有微小的电流;反之没有。

而后再看另外一条路径,C->E:这一条就悲催的多了,彻底被B->E那一条管着。若是BE没有电流,无论发生什么,CE都不会有电流,这是能够当作C、E之间断开了。若是BE有电流,才会容许CE产生电流。在咱们的电路中,BE有电流则CE连通,即C点接地,因而12V芯片收到LOW;反之,收到HIGH。其实这一部分单独看,就是一个上拉电阻。图见下。

顺便说一下“电流倒灌”的问题:若是如今三极管的部分换成一块导体,那么很明显,C电压高于B,所以会有灌入B的电流,从而形成Arduino出各类各样的问题。可是咱们的电路中没有这个问题(确实实践测试过了),这是由于三极管能够帮助B不被倒灌。可是据传说,若是C电压高于B太多,那么倒灌照样会发生。若是真的发生倒灌,一个(可能)可行的策略是在B处安装一个整流二极管,不让电流倒着流动。

鸣谢

感谢阿古(古做坊坊主)在在电路方面的指导!

相关文章
相关标签/搜索