PR 記事には広告が含まれています
スポンサーリンク
Translate

PFS122マイコンでニキシー管用DCDCが動作しました

スポンサーリンク

PFS122にDCDCコンバータのプログラムを移植して、無事にタップドインダクタを使ったニキシー管用DCDCが動作しました。

スポンサーリンク

これまでの経緯

Padauk PFS123マイコンを使ってタップドインダクタの昇圧回路の動作確認ができました。

タップドインダクタ昇圧回路の実験
高電圧を生成することができるタップドインダクタ昇圧回路で、ニキシー管の電源が作れないか実験をしてみました。タップドインダ...

回路の小型化のためPFS123の6ピンマイコンを購入しましたが、届いたのはPFS122でした。多くの業者に当たってみましたが、PFS123の6ピンマイコンは入手できないことがわかりました。

PFS123の6ピンマイコンが入手できなくなりました
ニキシー管用のDCDCコンバータの制御に使う予定の、6ピンパッケージのPFS123が入手できないことがわかりました。これ...

そこで、PFS122マイコンでDCDCコントローラの機能を実現しようとします。しかし自作したPadaukマイコン書き込み機では、読み出しはできたのですが、書き込みができません。

そのため様々なPadaukマイコンにプログラムを書き込むことができる、Easy PDK Programmerを作ることにしました。Easy PDK Programmerが完成し、PFS122にプログラムが書き込めることまで確認しました。

Padakuマイコンの書き込み機EasyPDKProgrammerが動作しました!
PCBWayから基板が到着したので早速組み立てて、Padaukマイコンの書き込み機を作りたいと思います。PCBWayから...
スポンサーリンク

プログラムが動作するか検証

PFS122にプログラムが書き込めることはわかっているのですが、書き込んだプログラムが動作するかはまだ調べていません。そこで、LEDが点滅するプログラムを書き込んで、動作するか確かめたいと思います。

プログラム

#include <pdk/device.h>
#include <stdint.h>
#include "auto_sysclock.h"
#include "delay.h"

#define LED1_BIT         4
#define LED1_PORT        PA
#define LED1_PORTCONT    PAC
#define LED2_BIT         3
#define LED2_PORT        PA
#define LED2_PORTCONT    PAC

#define LED1_ON()     LED1_PORT &= ~(1 << LED1_BIT)
#define LED1_OFF()    LED1_PORT |= (1 << LED1_BIT)
#define LED2_ON()     LED2_PORT &= ~(1 << LED2_BIT)
#define LED2_OFF()    LED2_PORT |= (1 << LED2_BIT)

void main() {
    PDK_USE_FACTORY_IHRCR_16MHZ();
    PDK_USE_FACTORY_BGTR();
    AUTO_INIT_SYSCLOCK();
    CLKMD &= ~CLKMD_ENABLE_WATCHDOG;  // Disenable WDT

    LED1_PORTCONT |= (1 << LED1_BIT);          // Set LED pin as output
    LED2_PORTCONT |= (1 << LED2_BIT);          // Set LED pin as output
  
    LED1_OFF();
    LED2_OFF();

    while(1)
    {
        LED1_ON();
        _delay_ms(200);
        LED1_OFF();

        LED2_ON();
        _delay_ms(200);
        LED2_OFF();
    }
}

PA3とPA4ポートにLEDを接続し、それらのLEDが踏切のように交互に点滅するプログラムを作りました。

[env:development]
platform = https://github.com/kohacraft/platform-padauk.git ; ボードのリポジトリ
board = PFS172 ; 使うマイコンの選択
framework = easypdk ; ヘッダーとかを追加
board_build.f_cpu = 1000000
extra_scripts = post:extra_script.py

platformio.iniファイルの「board」はPFS122の古い型番であるPFS172を指定します。

これでコンパイルします。

書き込み

Easy PDK ProgrammerとPFS122を接続します。

easypdkprog -n PFS122 write firmware.ihx

easypdkprogを使って、マイコンにプログラムを書き込みます。

実行

電源とLEDを接続すると、LEDが交互に点滅しました。PFS122にプログラムが書き込めて、正常に動作することが確認できました。

スポンサーリンク

PFS123からPFS122に変更

プログラムの移植

PFS123で制作したプログラムをPFS122に移植します。PWMを生成するTimer2の使い方が変更になりました。

void main() {

    //Timer2
    PAC |= ( 1 << PWM_OUT);
    TM2C = (uint8_t)(TM2C_CLK_IHRC | TM2C_MODE_PWM | TM2C_OUT_PA3);
    TM2S = (uint8_t)(TM2S_PWM_RES_6BIT);
    TM2B = PWM_DEFAULT;
    ROP = (uint8_t)(ROP_TMX_6BIT | ROP_GPC_PWM );

    //for Comparator
    PAC &= ~( 1 << COMP_IN);
    PADIER &= ~( 1 << COMP_IN);
    GPCC = (uint8_t)(GPCC_COMP_PLUS_PA4 | GPCC_COMP_MINUS_BANDGAP_1V2 | GPCC_COMP_ENABLE | GPCC_COMP_OUT_TO_TM2CLK);

ついでに、PFS122に内蔵されているADコンバータを使って、過負荷の検知をするようにしました。出力電圧が40V程度低下すると、PWMを停止します。

    //for A/D
    initADPin( ADPIN_PA4 );
...
    adc = getADC( ADPIN_PA4 );
    adc_ave = ( adc_ave << 3 ) - adc_ave + adc;
    adc_ave >>= 3;

    if( adc_ave < OVER_LOAD_TH )
    {
        //Cut off
        pwm = 0;
        TM2B = pwm;
            
        for(uint8_t i=0 ; i<25 ; i++)
        {
            LED_OFF();
            _delay_ms(200);
            LED_ON();
            _delay_ms(200);
            
            //kick WDT
            __wdreset();
        }
        adc_ave = 1600;
    }

回路にPFS122を組み込み

タップドインダクタ昇圧回路にPFS122を組み込みました。

電源投入

テスターに「175V」と表示されました。プログラムが動作し、無事に高電圧が発生しています。

動作に至るまで何度かプログラムを修正したのですが、昇圧回路からマイコンを取り外して、書き込み機にセットし、プログラムを書き込み。書き込み機からマイコンを取り外して、昇圧回路にセット。というルーチンを何度も繰り返さないといけません。

以前の書き込み機で作った、ターゲットにマイコンを接続したまま書き込みができる、インサーキット書き込み機能が、この書き込み機にも必要だと感じました。

Padaukマイコン インサーキット書き込み機を作り直してます
Padaukマイコンは、中華製のとても安価なマイコンです。実機で動作させながらプログラムを開発できるよう、インサーキット...

特性測定

負荷抵抗を変化させて、出力電圧、消費電流、効率を求めてみました。6mA程度まで出力でき、効率は50%台となりました。それほど良い効率ではありませんが、ニキシー管を光らせるための電源ができました。

スポンサーリンク

基板の作成

KiCadで基板の作成

回路が決定したので、KiCadで基板を作成します。親基板にこのモジュールをはんだ付けできるように、基板の端面にもはんだ付けできる面が作られる、端面スルーホールを設けました。

部品を実装しやすいように、10枚面付けして1枚の基板データにします。

PCBgogoに基板を発注

今回の基板には端面スルーホールがありますが、端面スルーホールがあっても製造費用が安いPCBgogoに基板を発注します。

基板のサイズ、枚数、面付けを指定します。あとは基板の色を金属面の仕上げを指定します。たくさん設定項目がありますが、他はデフォルトのままで大丈夫です。

追加オプションの中で、「端面スルーホール」を指定します。

メタルマスクも一緒に作ってもらいます。枠があると重くてしかも邪魔なので枠なしにします。また、適当なサイズにカットしてもらいます。カットは「ご要望」の欄に書きます。PCBgogoは日本語でもOKです。

画面右の「カートに入れる」をクリックします。

ガーバーファイルをアップロードするウィンドが表示されます。「ガーバーデータを入稿」をクリックしてファイルをアップロードし、「確認」をクリックします。

PCBgogoによる基板データのチェック(レビュー)が始まります。数分から数時間で完了し、完了したとのメールが届きます。

データのチェックが完了すると、右下の「レジに進む」がクリックできるようになります。

発送手段を選択し、右側の「支払い」をクリックします。PayPalの画面が表示されるので、そこで支払いを完了させます。

これで、基板の発注は完了です。

スポンサーリンク

基板発注完了

紆余曲折ありましたが、ようやく基板の発注まで進みました。届いたらマイコンにプログラムを書き込んで、基板に部品を実装しようと思います。