以前、別の頁で「ラジオは作るより安い完成品を買った方が得。」と書いた記憶があります。
しかしながら、最近、真空管ラジオにはまっています。
真空管ラジオと言っても電池管を使ったポータブルのものだけです。
完成したラジオは電池を使用するのですが、実験や調整はCVCC電源があると便利ですので製作しました。
仕様は0〜72V、0〜20mAとしました。
大分前に「あれば便利な機材」の頁で温度記録計を紹介しましたが、その後作り直したのでケースが残骸となりました。
不燃ゴミとして出す予定でしたが、もったいないのでケースとして流用することにしました。
液晶表示器の切り欠き穴があるので、そのままB電源の電圧電流を表示することにしました。
回路図をクリックすると拡大表示されます。
拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。
A電源は電圧固定で電流は短絡保護があるだけです。
電圧は実測で1.435V、短絡電流は560mAでしたので500mA位、流せます。
負荷に接続したダイオードは出力電圧が1.6Vになると電流が流れ始めますが無くても良いです。
平滑コンデンサーが多数並列になっているのは手持ちの関係です。
回路図をクリックすると拡大表示されます。
拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。
B電源は電圧、電流を0から可変するので多少複雑な回路になっています。
PIC16F1823は電圧、電流の表示のみに使用し、制御には使っていません。
回路図では液晶表示器以外のコネクタを省略しています。
部分的には100V程度の電圧が掛かるところがあるので素子の耐圧、耐電力には十分注意します。
プログラムはソースファイルをそのまま表示します。
コンパイラはMikoroCですがディレールーチン以外の組み込み関数は使用していません。
電圧電流の表示だけですのでチップを抜いても電源としては動作するはずです。
A/D変換部分で電圧、電流を補正していますが、今回製作したハードに合わせ込んであるので再現性はありません。
////////////////////////////////////////////////
// 電池管ラジオAC電源 global.h //
// 2017/03/06 PIC16F1823 MikroC Ver 6.0.0 //
////////////////////////////////////////////////
#ifndef _GLOBAL_H
#define _GLOBAL_H
///// 型の短縮名称
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
///// Lcd
#define lcd_port LATC
#define lcd_rs LATC.B5
#define lcd_stb LATC.B4
extern void lcd_data(char);
extern void lcd_cmd(char);
extern void lcd_clear(void);
extern void lcd_str(char *);
extern void lcd_init(void);
///// A/d
typedef union{
int adw;
char adb[2];
}ADDATA;
extern ADDATA addata;
extern int adV;
extern int adI;
extern uchar adf;
extern void ad_init(void);
extern void ad_conv(void);
#endif
////////////////////////////////////////////////
// 電池管ラジオAC電源 adconv.c //
// 2017/03/06 PIC16F1823 MikroC Ver 6.0.0 //
////////////////////////////////////////////////
#include "global.h"
static uchar ad_cnt; //A/D変換回数
static long Vbuff; //電圧変換バッファ
static long Ibuff; //電流変換バッファ
int adV; //電圧変換結果(10倍値)
int adI; //電流変換結果(10倍値)
int deltaV; //電圧補正値
int deltaI; //電圧補正値
uchar adf; //A/D完了
void ad_init(void){
FVRCON = 0x83; //A/D REF=4.096V
ANSELA = 0x3; //CH0,CH1
ADCON0 = 0x1; //AD使用
ADCON1 = 0x93; //右詰め、Fosc/8、FVR
ad_cnt = 0;
Vbuff = 0;
Ibuff = 0;
deltaV = 1020; //電圧補正(合わせ込み)
deltaI = 1200; //電流補正(合わせ込み)
}
void ad_conv(void){
ADDATA addata;
ADCON0 = 0x1; //CH0 ON
Delay_ms(1);
ADCON0.GO = 1; //start
while(ADCON0.GO);
addata.adb[0] = ADRESL;
addata.adb[1] = ADRESH;
Vbuff += (long)addata.adw;
ADCON0 = 0x5; //CH1 ON
Delay_ms(1);
ADCON0.GO = 1; //start
while(ADCON0.GO);
addata.adb[0] = ADRESL;
addata.adb[1] = ADRESH;
Ibuff += (long)addata.adw;
ad_cnt++;
if(ad_cnt == 64){ //64回の平均
Vbuff = Vbuff >> 6; //1/64
Vbuff = Vbuff * 4L * 29L; // * 1bit4mV * ゲイン逆数(=電圧mV)
Vbuff = Vbuff * deltaV / 1000L; //表示合わせ込み
adV = Vbuff / 100L; //電圧値の10倍
Vbuff = 0;
Ibuff = Ibuff >> 6; //1/64
Ibuff = Ibuff * 4L / 10L; // * 1bit4mV * ゲイン逆数(=電流値の10倍)
Ibuff -= 30L; // オフセットを引く(合わせ込み)
if (Ibuff < 0) Ibuff = 0;
Ibuff = Ibuff * deltaI / 1000L; //表示合わせ込み
adI = (int)Ibuff;
Ibuff = 0;
ad_cnt = 0;
adf = 1;
}
}
////////////////////////////////////////////
// LCDLIB4L.C (SC1602,2004 4BIT BUS) //
// 2017/03/06 MikroC //
////////////////////////////////////////////
//指定ポートの下位4ビットに接続
//ピンアサインは global.h に記述
#include "global.h"
////////// 1文字表示
void lcd_data(char asci){ //asci: 書き込みデータ
lcd_rs = 1; //データの書込操作
lcd_port = (asci >> 4 & 0x0f) | (lcd_port & 0xf0); //書込データ上位(ポート上位保存)
asm NOP; //NOP
lcd_stb = 1; //ストローブ立ち上げ;
asm NOP; //NOP
asm NOP; //NOP
lcd_stb = 0; //ストローブの立ち下げ
lcd_port = (asci & 0x0f) | (lcd_port & 0xf0); //書込データ下位(ポート上位保存)
asm NOP; //NOP
lcd_stb = 1; //ストローブ立ち上げ
asm NOP; //NOP
asm NOP; //NOP
lcd_stb = 0; //ストローブの立ち下げ
Delay_us(40); //40uS
}
////////// コマンドの書込
void lcd_cmd(char cmd){ //cmd: コマンド
lcd_rs = 0; //コマンドの書込操作
lcd_port = (cmd >> 4 & 0x0f) | (lcd_port & 0xf0); //書込データ上位(ポート上位保存)
asm NOP; //NOP
lcd_stb = 1; //ストローブ立ち上げ;
asm NOP; //NOP
asm NOP; //NOP
lcd_stb = 0; //ストローブの立ち下げ
lcd_port = (cmd & 0x0f) | (lcd_port & 0xf0); //書込データ下位(ポート上位保存)
asm NOP; //NOP
lcd_stb = 1; //ストローブ立ち上げ
asm NOP; //NOP
asm NOP; //NOP
lcd_stb = 0; //ストローブの立ち下げ
Delay_us(40); //40uS
}
/////// 全消去関数
void lcd_clear(void){
lcd_cmd(0x01); //消去コマンド出力
Delay_ms(2); //2mS
}
/////// 文字列出力関数
void lcd_str(char *str){
while(*str != 0x00) //文字列の終わり判定
{
lcd_data(*str); //文字列1文字出力
str++; //ポインタ+1
}
}
///////// 初期化コマンドの書込
void lcd_incmd(int cmd){ //cmd: 初期化コマンド
lcd_rs = 0; //コマンドの書込操作
lcd_port = (cmd >> 4 & 0x0f) | (lcd_port & 0xf0); //初期化コマンド(ポート上位保存)
asm NOP; //NOP
lcd_stb = 1; //ストローブ立ち上げ
asm NOP; //NOP
asm NOP; //NOP
lcd_stb = 0; //ストローブの立ち下げ
Delay_ms(5); //5mS
}
///////// 初期化
void lcd_init(){
Delay_ms(20); //20mS
lcd_incmd(0x30); //8bit mode set
lcd_incmd(0x30); //8bit mode set
lcd_incmd(0x30); //8bit mode set
lcd_incmd(0x20); //4bit mode set
lcd_cmd(0x28); //DL=0 4bit mode,5x7dot
lcd_cmd(0x0c); //display on C=D=1 B=0
lcd_cmd(0x06); //entry I/D=1 S=0
Delay_ms(20); //20mS
Delay_ms(20); //20mS
lcd_cmd(0x1); //clear
}
////////////////////////////////////////////////
// 電池管ラジオAC電源 qrad_acp.c //
// 2017/03/06 PIC16F1823 MikroC Ver 6.0.0 //
////////////////////////////////////////////////
//CLOCK 4MHz
// _FCMEM_OFF, _IESO_OFF, _BOD_ON, _CPD_OFF, _CP_OFF,
// _MCLEAR_ON, _WDT_OFF, _INTRC_IO,
#include "global.h"
void dispVI(int VI){
uchar n1,n2,n3;
n1 = VI / 100;
VI = VI % 100;
n2 = VI / 10;
n3 = VI % 10;
if(n1) lcd_data(n1 + 0x30);
else lcd_data(' ');
lcd_data(n2 + 0x30);
lcd_data('.');
lcd_data(n3 + 0x30);
}
void main(void){
OSCCON = 0x6a; //INTR 4MHz
OPTION_REG = 0x7f;
WDTCON = 0x11; //256mS ,ENABLE
asm CLRWDT; //WDT CLR
WPUA = 0x34;
TRISA = 0x3f;
TRISC = 0;
ad_init();
lcd_init();
Delay_ms(40);
while(1){
asm CLRWDT; //WDT CLR
ad_conv();
if (adf){
lcd_cmd(0x84); //表示位置
dispVI(adV);
lcd_data('V');
lcd_cmd(0xc4);
dispVI(adI);
lcd_str("mA");
adf = 0;
}
}
}
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
| A電源基板/td> | B電源基板 | 装置外観 | 表示 |
最初の写真はA電源基板でB電源基板の下にあります。
電圧は固定で現状1.435Vです。
2枚目の写真はB電源基板です。
手直しを予想して余裕を持った大きさにしています。
3枚目の写真は装置外観です。
B電圧、電流の表示器、A電圧、B電圧の出力端子と出力オンオフスイッチ、B電流、電圧の設定ボリュームが
配置されています。
電源スイッチは背面にあります。
4枚目の写真は電圧、電流を最大に設定し、約3.3KΩの負荷を接続した時の電圧、電流の表示です。
短絡電流は25mA程度です。
基本的な動作は確認しましたが、まだ電源として使い込んだ訳ではありません。
今後新しい電池管ラジオを製作するとき評価されると思います。
現状の問題点として、電圧を10V以下に設定すると僅かなリップル(20mVp−p程度)が出ます。
これくらいなら問題は無いと思いますしB電圧を10V以下に下げることは、まず無いと思います。
とりあえず完成とします。
今回、回路が少々複雑になり、製作が面倒です。
もう少し、簡単な回路に出来ないかと検討しました。
そこで頭に浮かんだのがテキサスのTL783Cという3端子レギュレータです。
LM317という電圧可変の3端子レギュレータが一般的に使われていますが、これの高電圧版です。
ネットで検索したところ秋月電子で扱っていました。(2017年3月現在)
「出力段がパワーMOSFETを使用した最新設計。次世代型可変3端子....」と解説されています。
ところが、手持ちの1983年版テキサスリニアICデータブックに既に記載があるので、実際はかなり古典的な半導体
です。
出力段は当時からMOSFETになっています。
最新の半導体は評価が定まっていないので、短期間で消えていくものも多いのですが、古い半導体が未だに販売されている場合、
設計が優れていていて現在でも使われているか、当時、大量に使われていてデッドストックが大量にあるかのいずれかです。


応用回路は以下の様に非常に簡単なります。

図の回路定数で0Vは無理ですが1.25Vから約72V程度まで可変出来ます。
今回、使用を止めたのは「最低負荷電流が15mA」という条件の為です。
手持ちの電源トランス30V0.1Aを両波倍電圧整流して負荷に供給しているので72V出力では、せいぜい30mA程度
しか取れません。
無負荷の時、ICの為に15mA流してしまうと残りは15mAとなってしまいます。
回路図の82Ωに15mA流すとリファレンス電圧に等しくなります。
出力電圧はボリュームの抵抗値×15mA+1.25V(リファレンス電圧)となります。
5.9KΩのボリュームは販売されていないので、1KΩの抵抗+5KΩの抵抗としますが、電圧可変範囲が狭くなって、
最低電圧が16V位になってしまいます。
もう一つ重要な事はボリュームに15mA流れるという事です。
最低でも2Wのボリュームが必要となります。
例えば秋月電子で売られている小型のパネル取り付け用ボリュームは1/8Wですので焼けてしまいます。
モールド型の通信機用ボリュームでも1/4W程度です。
2Wの巻き線型ポテンショメーターは売られていますが高価です。
結局、今回は使用を諦めましたが、電圧可変範囲の広くない用途では便利なICだと思います。