電子工作110 – ボリュームによるDC12Vファンやポンプなどの無段階スピード制御装置

Electronics Project 110 – Stepless Speed Controller for USB Fans etc. Using Variable Resistor

 

概要    Introduction

     USB DC5Vは便利だが、利用範囲は限定的。世の中にはDC12Vで動作する機器が多い。今回は既述の電子工作108の装置をUSB機器だけではなく、DC12Vの機器の制御も出来るように改良してみた。ほぼ同じ回路で、DC12Vのファンなどがボリュームの回転に応じて無段階に回転速度が変えられることが分かった。いろいろ応用出来そう。

 

  In this project, I have slightly modified the device that was built in Electronics Project 108 so that it could change the rotational speed of DC12V fan as well as DC5V USB fan steplessly using a variable resistor. For that purpose, a DC12V power supply connector and an output connector for driving a DC12V equipment such as fan, water pump etc. were added to the old device. This newly modified device can drive both DC12V and DC5V USB fans etc., but not both kinds of fan at the same time. To prevent an accidental leakage of DC12V to Vdd (Pin1) of 12F675, a diode 1N4007 was installed in the power line for driving USB fan. The program used for 12F675 is the same as that in Electronics Project 108.

 

回路図   Circuit Diagram

    原則、今回の回路は電子工作108のそれとほぼ同じ、ただ、それにDC12Vの入力と出力端子を加えただけである。既存のUSB DC5Vの回路にDC12Vを加えるので、後者が間違ってもDC5Vの回路に加わらないように注意する必要があった。DC12Vのマイナス端子はDC5VのGNDにつなげられた。DC12Vのファンなどの機器を駆動する場合、トランジスタ2SD2012は発熱するので、割と大きめのヒートシンクを取り付ける必要がある。DC12V機器駆動用の電源としてACアダプタのDC12VからDC17V出力のものを使用してみたが、問題なかった。DC12Vの機器の他に、もちろんUSB5Vの機器の駆動もできる。ただし、同時にはできない。USB機器を使う時は、DC12Vの電源はプラグを抜いて切る。一方、DC12V機器を使う時は、USB機器のケーブルのプラグを装置から抜く。実験中、多分DC12Vが12F675の電源ピン(ピン1)に流れ壊してしまった。逆流を止める目的でダイオード1N4007(1000V1A)を入れた。これで、同じ破壊を防げるかどうか、イマイチさだかではないが。

 

左の写真が完成した装置(プラスチックケースに収納状態)、電子工作108の装置との違いは、DC12Vの入力コネクタと出力端子が加わったこと、更にヒートシンクがトランジスタに装着されたことである。右の写真はケースの蓋を取った時の内部の様子を示す。

Completed device

 

基板の裏側

 

DC12V 1Aのパソコンに使われていたファンを回す時の組合せ。最大回転時にはトランジスタからの発熱によってヒートシンクの温度は60C位まで上昇する。

The device is connected to AC adaptor (Output DC12 –17V) and DC12V fan as shown below.

 

プログラム(電子工作108のものと同じ)    Program (Same as used in Electronics Project 108 described above)

   いつものようにPicBasic Pro(Pbp)というコンパイラを使ってプログラムを作成した。まず、ボリュームVRからの入力電圧値はADC(アナログ-デジタル-コンバータ)が10ビットなので0-1023に変換される。この値を4で割って全体の値を4分の1にする。この状態では、入力値0Vはデジタル 値0、入力値2.5Vでは127、入力値5Vでは255というデジタル値になる(1023/4=255)。これら0-255の値を、PbpのユニークなPWMパルス出力コマンド「PWM Pin, Duty, Cycle」のDutyに入れて出力させるのである。その結果、入力電圧値に対応したPWM出力が得られる。VR回転による入力値変化に対応するためLoopを作成して常時入力電圧変化をチェックするように作成してある。

 

In the program, the input analog voltage data is taken into a 10-bit built-in A/D converter from GP0, which is changed to the digital values 0 – 1023. To use a unique command 'PWM Pin, Duty, Cycle' of PicBasic Pro, it is required to divide 0 – 1023 by 4 so as to get 0 – 255 that can be read into the 'Duty' of the command. As a result, the command can produce the PWM values corresponding to the individual analog values from GP5 in order to turn on/off the transistor 2SD2012 for driving the USB fan. Within ADCloop, any change in Input voltage value at GP0 is continuously checked, and if any, a new 'Duty' value will replace the old one, generating a new PWM value.

'****************** USBFanSpeedControllerVR *******************

'USBFanSpeedControllerVR.pbp 2019.5.14 works!

'Using 12F675 and PicBasic Pro V2.5A

'Internal clock 4MHz

'******** Pin connection ******************

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 7: GPIO.0: input from voltage divider made of Vdd(+5V), GND and 10k-VR

'Pin 6: GPIO.1: not used

'Pin 5: GPIO.2: not used

'Pin 4: GPIO.3: input - reset connected to MCLR via 4.7kR and Vdd

'Pin 3: GPIO.4: not used

'Pin 2: GPIO.5: output - connected to Base of Tr2SD2012 for driving Fan

'********* Program starts from here ***************

ANSEL=%01000001

'sets Fosc/4MHz (bit6-4=100) and GPIO.0 as ADC input (analog)

ADCON0=%10000011

'bit7=1(right justified),bit6=0 (Vdd used as volt reference for ADC),

'bit5-4=00(unimplemented), bit3-2=00(GP0-Anlog Input),

'bit1=1 (starts right away), bit0=1(on operation)

TRISIO=%001001   'GP0 and GP3 - input

CMCON=7                'turns off comparator function

Define ADC_BITS 10     '10-bit ADC used

Define ADC_CLOCK 3     'Internal clock used

Define ADC_SAMPLEUS 50 'Polling is not needed due to use of ADCIN command

 

Vin var WORD        'Storage for ADC data

TrDrive var GPIO.5  'Drive Tr

Vin=0

TrDrive=0

 

ADCloop:

ADCIN 0, Vin  'Read Vin from GPIO.0 (AN0) (range 0 - 1023)

Pause 2  '2ms

 

Vin=Vin/4  'ex. 1023/4=255

PWM GPIO.5,Vin,100

Pause 5  '5ms

Goto ADCloop

 

End

'********* End of Program ***************

'Note:

'melabs U2 Programmer's configurations for 12F675:

'Oscillator - INTOSC, WDTE - Enable, PWRTE - Disable, MCLR - Reset, BODEN - Enable, CD - Not Protected,

'Data EEPROM - Not Protected

 

 

結果とコメント  Comments

1)       予想通り動作する。

2)     ボリュームでモーターの回転速度を無段階に変えられることが分かったのは大収穫。

3)     DC12Vの逆流で12F675を一個壊してしまった。

 

 

Menu Pageへ戻る     (Return to Menu Page)

Top of Pageへ戻る    (Return to Top of Page)