電子工作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)