1月 27, 2022

可変速度PWMファンコントローラの構築方法

この記事では、簡単なCプログラムを使用してpwmファンコントローラ(DC)を構築する方法と、Launchpad RM57Lマイクロコントローラ開発キットを含むいくつかの部品を紹介します。 それはユーザーが効率的に騒音レベルおよびパワー消費量を減らすためにPWMファンの速度を変えることを可能にします。 このプロジェクトでは、温度センサーが取り付けられている物体(この場合は、小型の熱電モジュールを冷却するために使用されるCPUヒートシンク)の温度を 以下は、デスクトップCPUクーラーで使用されているファンコントローラのデモです。

ファンスピードコントローラの構築方法を学ぶ前に、さまざまな速度制御方法がどのように機能するかを学ぶのに役立ちます。 抵抗速度コントローラとPWMファンコントローラの二つの重要な技術について説明します。

Resistive Speed Controllers

Resistive speed controllersは、電源からモータへの電流の流れに抵抗することによって、特定のファンモータの速度を制御します。 これは、ポテンショメータとトランジスタ、または別のバリスタ回路の組み合わせを使用して行うことができます。 前者の技術は非常に簡単に構築できますが、トランジスタを通過する電流のかなりの部分を焼き払う原因となります。 したがって、それは非効率的です。 一方、PWMは、毎秒何度もフル電流をオン/オフにパルスします。 トランジスタはまだいくつかの電気を無駄にしますが、それほど多くはありません。

PWM Speed Controllers

パルス幅変調は、モータ速度、ランプの明るさなどの制御をエネルギー効率の良い方法で容易にする、はるかに複雑で優れた、ますます一般的 PWMモータコントローラの主な理由は、家電製品の効率を向上させるだけでなく、可能な限り低速で動作させることによってノイズレベルを低減するこ

TI Launchpad RM57L MCU development kitを使用してこのファンコントローラを構築しました(送信してくれたTIに感謝します)が、このコードは安価なLaunchpad TMS57012、またはLaunchpad TMS57004Launchpadsでも

pwmファンコントローラの構築方法を学ぶとき、さまざまな技術/方法とその長所と短所を理解したり、実行する方法を学ぶのに役立ちます。 このように、あなたは正確に使用するかを知っているよ、といつ。

この記事では、電気工学の経験があり、トランジスタ、センサー、および上記の他のすべての機器を安全に接続する方法を知っていることを前提としてい あなた自身の責任でこのプロジェクトを試してみてください。

目次

  1. パーツリスト。
  2. 開発環境の準備。
  3. コーディングを始めましょう!

このスライドショーにはJavaScriptが必要です。

パーツリスト

すべての価格は米ドルで表示されています。

  1. 2n6284g NPN Darlington Bjtトランジスタ。 BJTはバイポーラ接合トランジスタを意味します(DC電流利得が750であるため便利です)。
  2. 三つの12kOhm1/2ワットの抵抗器。
  3. ねじ込み端子またはバーコネクタ付きジャンクションボックス。
  4. Texas Instruments Launchpad RM57L MCU(RM57L843)開発キット。
  5. B値が3435の10kOhm NTCサーミスタ。 “NTC”は、温度が上昇するたびに抵抗が減少することを意味します。
  6. 40mm x40mm(またはそのサイズが見つからない場合はそれ以上)トランジスタ用のヒートシンク。
  7. 開発キットのピンをトランジスタに接続し、トランジスタを電源に接続するためのジャンパー線/ピンプラグ(ブレッドボードを使用している場合を除く)。 これらは通常$3-6の範囲にあります。
  8. 12または5ボルトの電源。
  9. 12ボルトCPUファン、または5ボルトのラップトップファン(このプロジェクトは、PWMをサポートする三線式または四線式ファンを対象としています)。 これらは通常、$10-$20の範囲です。
  10. CPUクーラー(ヒートシンクとファンが含まれています)またはファンとそれで冷却することができるホットオブジェクトの他の組み合わせ。 これはファンのコントローラーが自動的にそれ自身を冷却するのを見ることを可能にしファンを締めます。 私はファンを内蔵したCPUクーラーを使用しました。 それは究極のテストです!

大きなファン(デスクトップCPUの冷却に一般的に使用される小さな80mmファンよりも大きい)に電力を供給する場合は、トランジスタにヒートシンクを それはかなりの量の熱を発生させます。

開発環境の準備

RM57L843開発キットは、このPWMファンコントローラの心臓部です(これらのマイクロコントローラの動作方法はArduinoとあまり変わらない). このpwmファンコントローラを構築するための最初のステップは、MCUをプログラム/フラッシュするために使用する開発環境を設定することです。

付属のケーブルを使用してLaunchpad RM57L development kitをコンピュータのUSBポートに接続し、Texas Instrumentsアカウントを作成してCCS IDEをダウンロードできます。 この演習にはHALCoGenも使用します。 HALCoGenは、GUIを使用してMCUを簡単に設定できるHALコードジェネレータです。 この場合、それを使用して、アナログ-デジタルコンバータ(MibADC)とHETタイマモジュールを構成します。

HALCoGenとCCSをダウンロードし(CCSのTIアカウントにログインしていることを確認してください)、以下の手順に従ってHALCoGenプロジェクトを作成します。

まず、HALCoGenで新しいプロジェクトを作成し、”Rm57Lx”開発キットを選択すると、画面の右側にそのバリアントのリストが表示されます。 この場合、rm57L843ZWTの変種は1つだけです。 それを選択し、以下に示すようにプロジェクトに”PWM”という名前を付けます。 “場所”フィールドにプロジェクトのパスを入力し、それをメモして、”OK”をクリックします。 CCSプロジェクトを同じディレクトリに保存します。 PWMプロジェクトは、作業ディレクトリの下にあるPWMという名前のフォルダにあり、RM57Lという名前になります.

HALCoGen

の”新規プロジェクト”画面のスクリーンショットHALCoGenで”PWM”という名前の新しいプロジェクトを作成します。 ここでADCとHETモジュールを設定します。

PWMファンコントローラを構築するには、小さな電気のオンとオフを発振するタイマーを設定し、その周波数を設定する必要があります。

次に、”Driver Enable”タブを選択し、以下のようにチェックボックスをオンにしてADC1およびHET1ドライバを有効にします。 アナログ-デジタル-コンバータ(ADC)を使用して、アナログ温度センサーの読み取り値を温度を決定するために使用できるデジタル値に変換し、ファン-コントロー ハイエンドタイマー(HET)は、単純なBJTトランジスタを制御するために使用されるPWM信号を生成するために使用されます。

システムリソース(RAMやフラッシュメモリなど)を節約するために、残りのドライバのチェックを外すことをお勧めします。

enable-adc-and-het-drivers

HALCoGenでHET1およびADC1ドライバを有効にします。

今度は、pwmファンコントローラのアナログ-デジタルコンバータ(Launchpad RM57L MCUに組み込まれています)を設定します。 ADC1タブに移動し、FiFoサイズを1に設定します。 また、温度センサーを接続するものであるため、ピン7を有効にするを選択します。 ピン7は、Launchpad開発キットの下側に’AI1_7’とマークされています。

アナログ-デジタル変換の仕組み

ADC1設定のスクリーンショット

het1タブに進み、ファンコントローラのPWMタイマRM57L開発キットに内蔵されているファンコントローラのPWMタイマと、ファンのトランジスタの電源を制御するhetピンを設定し、次のスクリーンショットに示すように次の操作を行います。

Pwm0-7タブを選択し、PWM0のDutyフィールドを0に設定します。 これにより、PWM信号のデューティサイクルが0に設定されるため、制御しているファンのデューティサイクルが0に設定されます。 デューティサイクルが0の場合は、ファンがオフになることを意味します。 それを置く別の方法は次のとおりです:電源がオンになる時間の割合は0です。

このプロジェクトでは、温度センサーが取り付けられているヒートシンクの温度に従うように、デューティサイクル(したがって、ファンの速度)をプログラムで調整するため、デューティサイクルを0にして開始します。 デューティサイクルが0に設定されている場合、ファンコントローラはファンをオフにします(0は0%に相当します)。 次に、ちょうど”ピン”フィールドの左側にある”有効”チェックボックスのペアをチェックします。 それはPWM信号を可能にします。 これはHet port1,Pin2で、Launchpadの下側に’HET1_2’とマークされています。 最後に:ピリオドフィールドに10,000(カンマなし)を入力します。

このフィールドで使用される単位はマイクロ秒です。 マイクロ秒は100万分の1秒です。 このフィールドを10,000に設定すると、HETタイマは10,000マイクロ秒ごと(0ごと)に電源のオンとオフをサイクルします。時01分) この急速な切換えが原因で、力がファンの滑らかな、連続操作に終って断続的に転換されていることに気づかない。<3704><3065><5019>PWM設定画面。

タイマー’PWM0’を有効にします。

HALCoGen設定を終了するには、Pin0-7タブを選択します。 これは、トランジスタのベースが接続されるRM57Lピンを設定する場所です(もちろん、12k Ωの抵抗を介して)。 出力方向にビット2を設定するには、以下に示すように”ビット2″セクションのDIRチェックボックスをオンにします。 これは私達がファンをつけることを可能にする。 ピンはビットと呼ばれることがあるので、この場合の”ビット2″はHETピン2を意味します。

抵抗とは何ですか?

出力値(下のスクリーンショットではDOUTとマークされています)はピンの状態で、オン(1)またはオフ(0)のいずれかになります。 MCUが最初に起動するときにオフになるように、0に設定されていることを確認します。

HETタイマ設定画面

HET1,ピン2を出力方向に設定します。

“ファイル”>”プロジェクトを保存”を選択し、”ファイル”>”コードを生成”を選択します(またはF5キーを押します)。 コード生成が完了するまで、下部の”出力”ペインを見てください。 今、あなたはCCSの設定に移動することができ、あなたが完了したら、あなたは最終的に部品を収集し、ファンコントローラを構築することができます。

コードしよう!

CCSを起動し、以下に示すようにRM57Lという名前のディレクトリをワークスペースとして選択/作成します。 これは、PWMが表示されるPWMディレクトリのルートに保存されます。hcgファイル。 PWMだよね。hcgはあなたのHALCoGenプロジェクトファイルです。 上記で述べたように、CCSとHALCoGenプロジェクトファイルは、この演習では同じディレクトリにあります。

付属のUSBケーブルを使用してLaunchpad RM57L開発キットを接続します。

右にあるドロップダウンボックスから’Rm57L8X’を選択します。 次に、その下のドロップダウンボックスからXDS110USBデバッグプローブを選択します。 最後に、”空のプロジェクト”を選択し、”完了”をクリックします。

Ccsプロジェクトの作成

プロジェクトエクスプローラペイン(画面の左側にあります)でPWMプロジェクトを右クリックし、PWMプロジェクトディレク これらのRM57Lインクルードファイルは、MCU用のプログラムを書くことがはるかに簡単にするライブラリとドライバで構成されています。

インクルードディレクトリを追加

Hl_Sys_Mainに移動します。/PWM/source/の下の左側にあるプロジェクトエクスプローラペインのcファイル。 そのファイルに、以下のRM57Lコードサンプルを貼り付けます。

ソースコード(Hercules RM57Lコードサンプル)

次のRM57Lサンプルコードは、Code Composer Studioを使用してUsb経由でランチパッドにアップロードできます。 ソースファイルは次のようになります。

温度の測定値は°Cです。

Hl_Sys_Main。C

/* USER CODE BEGIN (1) */#include "HL_het.h" //The HET library we'll use for PWM.#include "HL_adc.h" //The ADC library we'll use to read the sensor./* USER CODE END */void main(void){/* USER CODE BEGIN (3) */adcData_t adc_data; //ADC Data Structure.adcData_t *adc_data_ptr = &adc_data; //ADC Data Pointer.unsigned int value; //The ADC value is stored in this variable.float resistance; //The resistance of the thermistor at the current temperature reading;float degperohm = 0.003267974; //Degrees per ohm of resistance.unsigned int temperature; //The temperature in degrees Celsius.hetInit(); //Initialize the HET module.adcInit(); //Initialize the ADC module.while(1) //ADC conversion loop.{ adcStartConversion(adcREG1, 1U); //Start conversion on ADC 1. while(!adcIsConversionComplete(adcREG1, 1U)); //Keep looping until the conversion is complete. adcGetData(adcREG1, 1U, adc_data_ptr); //Store conversion into ADC pointer value = (unsigned int)adc_data_ptr->value; resistance = 1000 * (4096 / value); temperature = degperohm * resistance;//Adjust the fan speed based on the temperature readings obtained above. pwmStart(hetRAM1, pwm0); if (temperature < 40) { pwmSetDuty(hetRAM1, pwm0, 0U); //0% duty cycle. Fan is switched off. } else if (temperature >= 40 && temperature <= 42) { //If the temp is between 40°C and 42°C, set the fan to 20%. pwmSetDuty(hetRAM1, pwm0, 20U); //20% duty cycle. Fan Speed 1. } else if (temperature >= 42 && temperature <= 44) { pwmSetDuty(hetRAM1, pwm0, 30U); //30% duty cycle. Fan Speed 2. } else if (temperature >= 44 && temperature <= 46) { pwmSetDuty(hetRAM1, pwm0, 40U); //40% duty cycle. Fan Speed 3. } else if (temperature >= 46 && temperature <= 48) { pwmSetDuty(hetRAM1, pwm0, 50U); //50% duty cycle. Fan Speed 4. } else if (temperature >= 48 && temperature <= 50) { pwmSetDuty(hetRAM1, pwm0, 60U); //60% duty cycle. Fan Speed 5. } else if (temperature >= 50 && temperature <= 52) { pwmSetDuty(hetRAM1, pwm0, 70U); //70% duty cycle. Fan Speed 6. } else if (temperature >= 52 && temperature <= 54) { pwmSetDuty(hetRAM1, pwm0, 80U); //80% duty cycle. Fan Speed 7. } else if (temperature >= 54 && temperature <= 56) { pwmSetDuty(hetRAM1, pwm0, 90U); //90% duty cycle. Fan Speed 8. } else if (temperature >= 56 && temperature <= 58) { pwmSetDuty(hetRAM1, pwm0, 100U); //100% duty cycle. Fan Speed 9 (full speed). } else if (temperature > 65) { //65 //Code to display a temperature warning. 65 °C is a bit hot, warn the user. } else if (temperature > 70) { //Code to shut the device down (70 °C just won't do, shut it off). }} //End of ADC conversion loop./* USER CODE END */}

このページへのリンクを含めることを条件に、このRM57Lコードを再配布することを歓迎します。

常に/*ユーザーコードの開始*/と/*ユーザーコードの終了*/コメントの間にコードを配置して、HALCoGenがプロジェクトを変更した後にコードを削除しないようにします。

ヒートシンクの温度は、CPUまたは冷却しているデバイスの温度よりも低くなることを常に覚えておいてください。 これは、ヒートシンクが70℃の場合、CPUはそれよりもさらに高温になることを意味します。 また、このpwmファンコントローラを設計して、CPU温度を直接測定し、サーミスタをその上に配置することもできます。 これは、ヒートシンクの温度がCPUの温度よりもゆっくりと遅れているため、より正確です。

各ADC値はファンコントローラの温度測定値のデジタル表現であり、各値範囲は冷却するために一定量の気流を必要とする温度範囲を表します。 このサーミスタの場合、ADC値が低いほど温度が高くなり、その逆も同様です。 このコードは、アナログ-デジタルコンバータの値を摂氏温度の温度測定値に変換するように更新されました。

シナリオ例: 310から320のADC値の範囲は、テスト対象(ヒートシンク、したがってCPU)が熱くなっていることを示すため、ファンを最大80%まで回すことを保証するのに十分 ただし、ヒートシンク/ファンが十分に大きい場合、この速度はほとんどの場合必要ではありません。 これは、より大きなヒートシンクを活用したい場合があります一つのケースです。

一方、340~350のADC値の範囲は、ヒートシンクが少し暖かく、ファンが非常に低い設定(20%)で動作するだけであることを示している可能性があるため、この設定では 頻繁な速度変動を避けるために、正確なADC値ではなく、ADC値の範囲に基づいてデューティサイクルを設定しました。 私は非常にあなたがリアルタイムで起こってすべてを見ることができるように、コンピュータにアナログ-デジタルコンバータの測定値を送信UARTルーチ それはデバッグを容易にし、また有益です。

PWMのための有用な適用は下記のものを含んでいますが、限られません:

  1. 改善された効率および減らされた騒音レベルのためのエアコンおよび冷却装置圧縮機の速度制御。
  2. LEDランプ調光。
  3. HEV/電気自動車の速度制御。
  4. 換気扇コントローラー。
  5. 電気、ガスを救い、道で車によって引き起こされる騒音公害を減らすことができるラジエーターファンのコントローラー。 騒音低減は、場合によっては夜間に人々がよりよく眠るのを助けることさえできます。

上記のすべてのアプリケーションにはPWMに対応したファンが必要です。 残念ながら、すべてのファンがこのために構築されているわけではありません。

Hardware Setup

冒頭で述べたように、この記事はトランジスタの使い方や、センサーをLaunchpadに安全に接続する方法を知っていることを前提に書かれています。

サーミスタをADCポート1ピン7に接続し、トランジスタをRM57L開発キットのHETポート1ピン2に接続します。 CPUクーラー(ヒートシンク+内蔵ファンコンボ)を使用している場合は、ヒートシンクに温度センサーを挿入します(センサー端子がヒートシンクに接触しないようにし ヒートシンクファンをコントローラに接続します。 以下にリンクされているチュートリアルは、ファン、ADCピン、トランジスタの設定方法を学ぶのに役立ちます。

Sparkfunは、アナログからデジタルへの変換、およびADCセンサー接続の基本的な例をここで説明しています(私のセンサーにはポテンショメータが行う3つではなく、2つのリードがあることを除いて、このプロジェクトで使用したものです)。 ここではトランジスタについても説明している。

あなたはそれを習得したら、あなたは時間がないのあなたのファンコントローラを起動して実行することができます!

Sensor

RM57L MCU development kitのADCは、サーミスタ(または使用している温度センサー)によって引き起こされるアナログ電圧変動を、上記のvalue変数に格納されているデジタ ADCの値は使用しているセンサーに依存しているため、センサーのドキュメントの仕様を使用して温度測定値を度に変換する必要があります。

このプロジェクトに使用されたセンサーは、uxcell3435B10kOhmサーミスタでした。 サーミスタは、その抵抗を温度によって変化させるように設計された抵抗器です(通常の抵抗器よりもはるかに多く)。 サーミスタの定格が10kOhmの場合、それは抵抗が10kOhmであることを意味します25°C.

NB:特定のサーミスタの抵抗は温度によって直線的に変化しないため、サーミスタのメーカーは温度対抵抗チャートを提供し、この問題に対処するSteinhart-Hart方程式で使用するためのA、B、Cの値を提供することがあります。

CCSバージョンで正常にテストされたコード:

コメントを残す

メールアドレスが公開されることはありません。