ArduinoでLEDを制御するときに本当に抵抗が必要ですか?

ブレッドボードに2つのLEDが点滅しているArduinoUnoを初めて試しています。インターネット上のすべてのチュートリアルで抵抗を使用しているようです。抵抗の機能は知っていますが、ここで本当に重要ですか?これらのLEDは、抵抗がなくても問題なく動作します。

コメント

  • 状況によって異なりますLEDを溶かしたいかどうか。’気にしない場合は、抵抗を省略してください。:-)。

回答

いたずら!:-)抵抗を使用すると言われたら、それは正当な理由です。 今すぐオフにしてください!

抵抗は、LEDの電流を制限するためにあります。あなたはそれを省略します。電流制限はArduinoの出力から来なければならず、それは気に入らないでしょう。抵抗器が何である必要があるかをどのように見つけますか?オームの法則を知っていますか?知らない場合は、大きな文字で書き留めてください。

\ $ V = I \ cdot R \ $

電圧は電流と抵抗の積に等しい。または、

\ $ R = \ dfrac {V} {I} \ $

同じことです。ご存知の電圧:Arduinoは5Vで動作します。しかしLEDの電圧降下もあり、通常は赤色LEDの場合は約2Vです。したがって、抵抗器の場合は3Vのままです。通常のインジケータLEDの公称電流は20mAであり、

\ $ R = \ dfrac {5V-2V} {20mA} = 150 \ Omega \ $

ArduinoUnoは ATmega328 マイクロコントローラー。データシートには、I / Oピンの電流は40mAを超えてはならないと記載されています。これは、一般に絶対最大定格として知られています。電流を制限するものがないため、(低!)出力トランジスタの抵抗。電流は40mAを超える可能性があり、マイクロコントローラが損傷する可能性があります。

edit
ATmegaのデータシートからの次のグラフは、電流制限抵抗なしでLEDを駆動するとどうなるかを示しています。

ここに画像の説明を入力してください

負荷がない場合、出力電圧は予想どおり5Vです。ただし、引き出される電流が大きいほど、出力電圧は低くなり、4mAの負荷が増えるごとに約100mV低下します。これは25 \ $ \ Omega \ $の内部抵抗です。

\ $ I = \ dfrac {5V-2V} {25 \ Omega} = 120mA \ $

グラフはそれほど遠くはなく、抵抗は温度とともに上昇しますが、電流は非常に高いままです。データシートは絶対最大定格として40mAを示していることを忘れないでください。あなたはそれの3倍を持っています。これを長時間行うと、間違いなく I / Oポートが損傷します。そしておそらくLEDも。 20mAのインジケータLEDは、多くの場合、絶対最大定格として30mAになります。

コメント

  • そうではありません。 3で、’ 3 x 2V > 5Vであり、2つ’同じ問題が発生しますが、3Vではなく1Vのドロップのみです。今すぐオフにするために回答に追加しました!
  • ここの回答にその計算を何回書いたか数え切れませんでした。スクリプトが必要です:-)
  • LEDは特定の最大電流で動作するように設計されています。それらを駆動する電圧は、電流が制御されていないことを意味します。ポートは、特定の最大電流を提供するように作られています。それらを短絡または過負荷にすると、ピンまたはIC全体が破壊されたり、わずかな動作上の問題が発生したりする可能性があります。
  • @ JohnR.Strohm ‘業界標準とは呼ばないでしょう。
  • @ JohnR.Strohm-mのように。アリンは、’は業界標準ではないと言います。 Digikeyは、0.4mcdから1000mcdの範囲の10mA公称LEDと0.1mcdから54000mcdの範囲の20mALEDをリストしています。 ‘には線がなく、10mAのLEDがよく見えるという保証はありません。赤色LEDの電圧は通常範囲で1.8Vから2.2Vです。赤色LEDの場合、1.6Vは非常に低いです。

回答

40plot、

抵抗なしでLEDを駆動することは、自分が何をしているのかを理解していない限り、推奨されないことを言わなければなりません。ただし、LEDの動作を理解していれば、抵抗なしで安全に駆動できます。実際のところ、電流制限抵抗なしでLEDを駆動する方が良い場合がよくあります。

抵抗なしでLEDを駆動するのはなぜですか?シンプルで、回路のエネルギー効率を高めます。

PWMを一定のデューティサイクルに設定してLEDを駆動する必要があります(つまり、34%のデューティで5V PWM) 1.7Vの平均電圧を達成するためのサイクル)?

はいおよびいいえ。 PWMの使用は、特定の電圧を印加するのと同じように機能しますが(注意が必要な場合)、より良い方法があります。 PWMアプローチを採用する際に心配すること。

  1. PWMの周波数は重要です。このシナリオでPWMを使用する場合、回路のコンポーネントが一時的に大電流を処理する能力に依存しています。最大の懸念は、LEDが一時的な大電流を処理する方法と、チップの出力回路が一時的に処理できる方法です。大電流。その情報がデータシートに指定されていない場合、データシートの作成者は怠惰でした。しかし!!!その情報がデータシートに指定されている場合は、安全に利用できます。たとえば、次のLED私にとっての最大電流定格は40mAですが、”ピーク順電流”定格も200mAです。電流が10usを超えて200mAに留まることはできません。すっごく…私は1.7V(データシートからのLEDの標準的な順方向電圧)でLEDを駆動できます。34%のデューティサイクルと5Vの電源(34 5Vの%= 1.7V)は1.7Vの平均電圧を生成します。PWMオン時間が10us以下であることを確認する必要があります。 n回の場合、LEDを流れる電流は約58mAに上昇する可能性があります(58mA =ダイオードの1.7Vでの通常の消費電流を34%で割った値)。 58mAは私のLEDの定常電流の最大値である40mAを18mA上回っています。最後に… LEDを安全に駆動するには33.3kHz以上のPWM周波数が必要です(33.3kHz = [10us ON時間を34%で割ってPWM周期を取得する]の逆数)。 REALITYでは、PWMを安全に使用して、より遅いPWM周波数でLEDに電力を供給することができました。理由は次のとおりです。データシートは通常、コンポーネントの有効な運用シナリオのすべてを指定しているわけではありません。ベンダーは、コーナーでの使用のためのコンポーネントの使用の特定とサポートに時間を費やしたくないため、これらのシナリオを指定していません。たとえば、私のLEDを使用して、LEDを40mAで永久に動作させることができ(40mAは定常電流の最大定格です)、LEDを200mAで10us動作させることができれば、99.99999%の確信が持てます。 LEDを100mAで10usより長く、おそらく20usに近い期間、安全に動作させます。

注:すべてのコンポーネントは、最大定格を超える一時的な電流スパイクを、現在のスパイクは小さいです。一部のコンポーネントは他のコンポーネントよりも寛容であり、運が良ければそのコンポーネントはデータシートには、電流のスパイクをどれだけうまく処理できるかが明記されています。

  1. PWMの電圧は重要です。説明ではなく例でポイントを示します。前に参照したLEDを使用すると、33.3kHz、5Vで34%のデューティサイクルが安全であることがわかります。ただし、電圧が12Vの場合、 LEDに同じ量の電流が流れるように計算をやり直す必要があります。デューティサイクルを14.167%(1.7Vを12Vで割った値)に下げる必要があり、最小PWM周波数を14.285kHzに下げる必要があります([の逆数] 10usを14.167%で割った値])。ただし、、これは懸念事項です。5Vシナリオでは、5Vを10usと12Vのシナリオでは、10usに12Vを印加しています。その10usの間に電圧を2倍以上にしたので、いくつかの結果が必要です。そうです!私のLEDデータシートには、高さを知るために必要なデータがありません。 LEDを損傷する前に10usに使用できる電圧の10us。確かに10usの1000VはLEDを揚げますが、10usの5VがLEDを揚げるかどうか、または10usの12Vを知るにはどうすればよいですか?仕様がない場合は、リスクを冒しています。したがって… 10usの5Vは危険ですが、おそらく安全です。

注:回路にコンデンサを追加してPWMを平均化し、この問題を解消することができます。

  1. LEDを接続した出力ピンの機能にも注意する必要があります。最も重要なパラメータは最大出力電流です。 Arduino Unoの場合、40mAだと思います。平均電圧がLEDを流れる電流を40mA未満に保つPWMデューティサイクルを選択する必要があります。どの電圧がその量の電流を生成するかを知るために、LED IV曲線(電流対電圧プロット)を見る必要があります。一般的なLEDの場合、0.7V(LEDから光を放射するために必要な通常の最小電圧)から1.25Vの間の電圧がほぼ確実に安全です。なぜ1.25Vはおそらく安全なのですか?さて、ほとんどのLEDは、電流制限抵抗がなくても、1.25Vで40mAを超えることはありません。電圧をかけすぎた場合に誰かを保護するのに役立つもう1つのことは、Arduinoのデジタル出力回路が独自の出力インピーダンスを持つことです。その出力インピーダンスは低くなりますが、20オームの出力インピーダンスでも無視できない量の保護を提供します。arduinounoのデジタル出力インピーダンスは約250オームです。簡単に言えば、1.0VでPWMを使用してLEDを駆動した場合高周波では、一般的なLEDの場合、ArduinoUnoのデジタル出力を損傷する可能性はゼロです。

  2. PWMアプローチは、オープンループ方式でLEDを駆動します。 (1を使用することも同様です。PWMなしの7V電源)。 適切な値の平均電圧をLEDに印加して、LEDをオンにしますが、損傷するほど高くはありませんLED。残念ながら、ON(そして見るのに十分明るい)から損傷したLEDまでの電圧の範囲は非常に狭いです(私のLEDのその範囲は約0.7Vです)。適用していると思われる1.7Vが常に1.7Vになるとは限らない理由はさまざまです…

a。周囲温度の変化。 LEDも入った密閉ボックス内のモータードライバー、電圧レギュレーターなど。これらの他のコンポーネントがエンクロージャー内の周囲温度を25℃から50℃に上げることは珍しいことではありません。この温度上昇は、LEDや電圧レギュレーターなどの動作を変更します。かつて安全だった1.7Vはより長く1.7Vになり、2.5Vで揚げていたLEDが2.2Vで揚げるようになります。

b。供給電圧の変化。あなたの供給がバッテリーだったらどうしますか。バッテリーが消耗すると、電圧が大幅に低下します。少し使用した9V電池でうまく機能するように回路を設計したが、新しい9V電池を追加した場合はどうでしょうか。新品の9V鉛蓄電池の実際の電圧は、通常9.5Vです。 PWMに使用される5Vを提供している回路によっては、その追加の0.5Vによって5VPWMが5.3Vに上がる可能性があります。充電式バッテリーを使用していた場合はどうなりますか?それらは、放電サイクル全体を通してさらに広い範囲の電圧を持っています。

c。 EMIからの誘導電流のような他のシナリオがあります(モーターがこれを行います)。

電流制限抵抗を使用すると、これらの問題の多くを回避できます。

PWMを使用してLEDを駆動することはあまり良い解決策ではありませんが、電流制限抵抗を必要としないより良い方法はありますか?

はい!ご家庭のLED電球で行うことを行ってください。電流コントローラーでLEDを駆動します。LEDの定格電流を駆動するように電流コントローラーを設定します。

適切な電流コントローラーを使用します。 、を大幅に増やすことができ、LEDのオープンループ駆動に関連する問題のほとんどを心配することなく、LEDを安全に駆動できます。

欠点: 電流コントローラーが必要で、回路の複雑さが10倍になりました。ただし落胆しないでください。電流コントローラーIC、LEDドライバーICを購入するか、独自の電流制御ブーストコンバーターを作成できます。それほど難しいことではありません。忙しいスケジュールから少し時間を取って、ブーストコンバーターとバックコンバーターについて学びます。電源の切り替えについて学びます。これらはコンピューターに電力を供給し、非常にエネルギー効率が高いものです。次に、ゼロから構築します。または、安価なICを購入して、ほとんどの作業を行ってください。

もちろん、すべての電子設計と同様に、回路を改善するためにできることは常にたくさんあります。の図3を確認してください。 PDFをフォローして、最近の家庭用LED電球でさえどれほど複雑になるかを確認してください…

http://www.littelfuse.com/~/media/electronics/design_guides/led_protectors/littelfuse_led_lighting_design_guide.pdf.pdf

要約:どの程度のリスクを許容するかを自分で決める必要があります5V PWMを使用してLEDを駆動すると、問題なく動作する可能性があります(特に、PWM方形波を平滑化し、PWM周波数を最大化するためにコンデンサを追加する場合)。恐れすぎて、電子機器を外に押し出さないでください。彼らの通常の操作の条件を悪化させることは、あなたがそれをするときに知らされ、あなたが取っているリスクを知っていることです。

楽しんでください!

参考:多くの人々がすぐに答えに飛びつくことに驚いています、 “電流制限抵抗を使用する必要があります”。これは意図的なものですが、安全すぎるアドバイスです。

誤った

コメント

  • I ‘この回答が貴重な設計アドバイスであると多くの人が考えていることに驚いています。 PWMを使用して電流制限なしでLEDを駆動することは、OPが行っていることと同じように、LEDにとって悪いことです。さらに、クレイジーのようにEMIとVCCリップルを生成します。
  • @DmitryGrigoryev、私は完全に対処できなかったことに気づきましたデジタル出力の最大出力電流。それをカバーするために新しい弾丸を追加しました。 PWMは、電流制限抵抗なしで誰かがLEDを安全に駆動できるようにします。 EMIおよびVCCリップルは、デジタル信号で負荷を駆動するたびに発生しますが、これは一般的であり(Hブリッジ、ブーストコンバーター、ホビーサーボ制御など)、PWMを回避する理由はほとんどありません。必要に応じてEMIおよびVCCリップルを処理するための合理的なソリューションが存在します。ほとんどの人は、’ PWMでLEDを駆動することによって発生する少量のEMIおよびVCCリップルを気にしません。

回答

提案されているように組み込みのプルアップ抵抗を使用できますここ

プルアップ抵抗は、入力として構成されたピンに接続されたLEDを暗く点灯するのに十分な電流を供給します。

コメント

  • LEDの場合ではなく、ボタンに使用できますが、LEDの場合は出力を壊す危険性
  • 安全でない場合、公式ドキュメントがそう言う理由は何ですか? (私も’試してみましたが、説明どおりに機能しました。)
  • OUTPUTまでお読みください。直列抵抗が必要であると述べています:”これは、LEDを明るく点灯させるのに十分な電流です(’直列抵抗を忘れないでください) 、または多くのセンサーを実行しますが、ほとんどのリレー、ソレノイド、またはモーターを実行するには十分な電流がありません。 ”
  • @MenelaosVergis INPUT_PULLUPモードのピンでこれを行うのは安全ですが、OUTPUTモードのピンで行うのは安全ではありません。これは、両方のセクションを読んだ場合(およびこの回答の引用された抜粋から)、ドキュメントで明らかです。

回答

簡単な答えは、はい、いいえです。それはあなたのarduinoに依存し、あなたのLEDの色に依存します。たとえば、3.3Vボードでは、LEDの順方向電圧がかなり高いため、小さな緑色のLEDと直列に抵抗を必要としません。これを参照してください。内部抵抗は約25オームです。(3.3-3)/ 25 = 12mAを取るので、これでも問題ありません。UNOボードで使用される328p atmelプロセッサのピンあたりの最大電流である40mAを超えないようにしてください(ただし、別の話になる可能性がある328pの派生物を使用します)。ただし、5Vで動作するarduinoの場合、順方向電圧がはるかに低い赤外線LED(通常は1.2V、(5-1.2)/ 25 = 150mA)で問題が発生します。これは間違いなく多すぎるため、次のような電流リミッターを使用してください。これらのタイプのLEDを駆動するための抵抗として。 Arduinoボードのピン13(またはバリアントの別のピン)には、すでにLEDと抵抗が直列に接続されています。また、ボードへの電源の最大定格は通常200mAであり、このレベルを下回っている必要があり、ピンのグループごとに特定の量を超えるmAを引き出すことはできません。これはここ。多くのLEDを駆動したい場合は、多重化を行うマトリックスLEDドライバーの使用を検討してください。たとえば、MAX7219CNGドライバーのデモを行っている私のYouTubeエリアを参照してください。しかし、ArduinoUnoも多重化を行うことができます。YouTubeで4つの7セグメントLEDを備えた私のIR温度計を参照してください。ハッピーハッキング。

回答

stevenvhからの回答は、何をする必要があるかを説明していますが、電圧降下抵抗を焼き尽くさないように、LEDの両端の電力損失も計算する必要があります。たとえば、供給電圧が5Vで、抵抗の順方向電圧が1.0Vの場合、4Vが低下します。220オームの抵抗を使用すると、18mAの電流(I = V / R)と電力が得られます。 72mWの損失(P = IV)。

0402インペリアルサイズ(1005メートル)の抵抗器は通常1 / 16W、つまり62.5mWです。したがって、この場合、これは機能しません。抵抗器が過熱し、動作寿命が短くなるため、定格が1 / 10Wの0402抵抗、またはより大きな0603抵抗に変更する必要があります。

このような計算を行う場合は、必ず回路図に追加して、レビューアは作業を簡単に再確認できます。

順方向電圧(したがって抵抗値)はLEDの関数であり、LEDの色が異なれば値も異なることに注意してください。特に青色のLEDには高い順方向電圧(〜3.0V typ)。したがって、4つの異なるLEDを同じ輝度にしようとしている場合は、各LEDに対して計算を繰り返す必要があります。実際に正しく行うには、定格電流での各LEDの光学特性を確認し、それに応じて調整します。

回答

はい!それはできます。

言われていることは正しいのですが….別の方法があります。5VでLEDを駆動するよりエネルギー効率の高い方法です。

これは少し文書化されておらず、解決策がLEDを損なうかどうかは不明ですが、実行できます。実際に実行しています。

ハードウェアによるPWMの使用:

#include <avr/io.h> #include <util/delay.h> void pwm_init() { // initialize TCCR0 as per requirement, say as follows TCCR0 |= (1<<WGM00)|(1<<COM01)|(1<<WGM01)|(1<<CS00); // make sure to make OC0 pin (pin PB3 for atmega32) as output pin DDRB |= (1<<PB3); } void main() { uint8_t duty; duty = 1; // duty cycle = 0.39% of the time (depends on the oscillator.) // initialize timer in PWM mode pwm_init(); // run forever while(1) { OCR0 = duty; } } 

PWMは、ソフトウェアとavrsタイマーを使用してシミュレートすることもできます。lufaライブラリ内に次のような例があります。 LEDNotifier.c

私の結論:5VでLEDを駆動することは可能です。

長所:抵抗は必要ありません。ある程度のエネルギー節約も(〜50%)

短所:コンポーネントにストレスがかかっているかどうか、およびその寿命の短縮についてはわかりません。

スタンフォード大学でもこの実験を行い、彼のサイトに情報を投稿した人がいます。

コメント

  • これは’良い考えとは思えません。’ ‘長時間使用していなくても、コントローラーから’の定格よりも多くの電流を供給している可能性があります。
  • 前述のように、これは累積されていません。ArduinoUNO出力IOは約40ma〜50maを駆動できます。これは一定です。より多くの電流で非常に短いパルスを確実に処理できます。ウィキペディア。
  • Arduino環境では、対応するピンにanalogWrite()を配置すると、PWMをより簡単に取得できます。これが良い考えかどうかはわかりませんが、少なくともIR LEDの場合、’データシートでは、100%未満のデューティサイクルでかなり高いピーク電流を許容するのが一般的です。 。
  • I ‘ LEDの効率が低下するため、抵抗ベースのソリューションと比較して、エネルギー節約がマイナスになると確信しています。電流が増加するにつれて。
  • @ScottSeidmanなぜ’それは良い考えではないのですか?ほとんどの人が抵抗なしでLEDを使用することは推奨されないと信じているからですか?この答えは調査を証明し、スタンフォード大学のような非常に敬意を表する情報源であり、私が実験できることから、それは機能します。反対票を投じた人は偏見があると言っているので、私は間違いなく反対票を投じた投稿が大好きです。なんというパラドックス…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です