2025 (c) S.Yoshimoto
プリント基板の設計(作図)にはDesignSparkを使用しました。
DesignSparkは無償版もあり、下記の特色を持ち、使い易いアプリです。
DesignSparkでの作図が完成したら、ガーバー形式でファイルに出力します。
ガーバー形式ファイルをプリント基板製造会社に送り、プリント基板を製造してもらいます。
下図は出来上がったプリント基板です。

プリント基板に部品を実装します。
アンプの殆ど全ての部品がプリント基板上に収められています。

プログラムの作成にはマイクロチップ社が提供する開発環境MPLAB_Xとプログラム書き込み・接続用ハードPICKit3を用います。
開発環境MPLAB_Xは無償です。
下図はPIC16F1823のPin機能を設定するGUIです。

3つのPinをAD変換入力に、4つのPinをデジタルI/Oに指定しています。
この設定により、機能設定初期化の関数とAD変換入力関数が自動生成されます。
この他にもタイマーとその割り込み処理もGUIで設定し、タイマー処理の関数を自動生成しています。
自動生成されたプログラムに保護機能の処理を書き加えて完成させます。
下記は私が書き加えたプログラムの主要部分です。
83 while (1) 84 { 85 // Add your application code 86 //sense Power supply voltage 87 ttt = ADC_GetConversion( channel_AN2 ) ; 88 if( ttt < powerv ) Vflg = 1; 89 90 Pflg = 0; 91 //sense Lout offset 92 offsetv = ADC_GetConversion( channel_AN4 ) ; 93 if( offsetv > U_MAXOFFSETV ) Pflg = 1; 94 if( offsetv < U_MINOFFSETV ) Pflg = 1; 95 96 //sense Rout offset 97 offsetv = ADC_GetConversion( channel_AN5 ) ; 98 if( offsetv > U_MAXOFFSETV ) Pflg = 1; 99 if( offsetv < U_MINOFFSETV ) Pflg = 1; 100 101 //sense Lch over current 102 if( RC2 == 0x1 ) Vflg = 1; 103 104 //sense Rch over current 105 if( RC3 == 0x1 ) Vflg = 1; 106 107 if ( Vflg == 1 ) { 108 RC4 = 0x0 ; //Cut Output 109 __delay_ms( 2000 ) ; 110 } 111 else { 112 if( Pflg == 1 ) { 113 RC4 = 0x0 ; //Cut Output 114 __delay_ms( 2000 ) ; 115 } 116 else { 117 RC4 = 0x1 ; //Connect Output 118 __delay_ms( 100 ) ; 119 } 120 }
例えば
ttt = ADC_GetConversion( channel_AN2 ) ;
はGUIでAD変換AN2に設定したPinから電圧を読み取り、電圧値を変数tttに格納します。
ADC_GetConversion()は自動生成されたAD変換入力関数です。
RC4 = 0x1 ; //Connect Output
はGUIでデジタル出力に設定したRC4ピンに1(5V)を出力します。
完成したプログラムをコンパイルしPIC16F1823に書き込みます。
保護プログラムが書き込まれたPIC16F1823を基板上の14pinICソケットに挿し込みます。
自動生成されたプログラムの内、処理を書き加えて完成させた main.c と tmr0.c を掲載します。
main.c
tmr0.c
筺体に
を取り付けて配線を行います。
下図は組み立てが完了したアンプの内部写真です。

出力オフセット調整用可変抵抗器 V101、V201にて出力端子のDC電圧を±10mV以内に調整します。
電源投入後の温度変化により出力オフセット電圧は変化しますので、20分程度後に再調整します。