PFS122にDCDCコンバータのプログラムを移植して、無事にタップドインダクタを使ったニキシー管用DCDCが動作しました。
これまでの経緯
Padauk PFS123マイコンを使ってタップドインダクタの昇圧回路の動作確認ができました。

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

そこで、PFS122マイコンでDCDCコントローラの機能を実現しようとします。しかし自作したPadaukマイコン書き込み機では、読み出しはできたのですが、書き込みができません。
そのため様々なPadaukマイコンにプログラムを書き込むことができる、Easy PDK Programmerを作ることにしました。Easy PDK Programmerが完成し、PFS122にプログラムが書き込めることまで確認しました。

プログラムが動作するか検証
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を使って、マイコンにプログラムを書き込みます。
実行
電源と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」と表示されました。プログラムが動作し、無事に高電圧が発生しています。
動作に至るまで何度かプログラムを修正したのですが、昇圧回路からマイコンを取り外して、書き込み機にセットし、プログラムを書き込み。書き込み機からマイコンを取り外して、昇圧回路にセット。というルーチンを何度も繰り返さないといけません。
以前の書き込み機で作った、ターゲットにマイコンを接続したまま書き込みができる、インサーキット書き込み機能が、この書き込み機にも必要だと感じました。

特性測定
負荷抵抗を変化させて、出力電圧、消費電流、効率を求めてみました。6mA程度まで出力でき、効率は50%台となりました。それほど良い効率ではありませんが、ニキシー管を光らせるための電源ができました。
基板の作成
KiCadで基板の作成
回路が決定したので、KiCadで基板を作成します。親基板にこのモジュールをはんだ付けできるように、基板の端面にもはんだ付けできる面が作られる、端面スルーホールを設けました。
部品を実装しやすいように、10枚面付けして1枚の基板データにします。
PCBgogoに基板を発注
今回の基板には端面スルーホールがありますが、端面スルーホールがあっても製造費用が安いPCBgogoに基板を発注します。
基板のサイズ、枚数、面付けを指定します。あとは基板の色を金属面の仕上げを指定します。たくさん設定項目がありますが、他はデフォルトのままで大丈夫です。
追加オプションの中で、「端面スルーホール」を指定します。
メタルマスクも一緒に作ってもらいます。枠があると重くてしかも邪魔なので枠なしにします。また、適当なサイズにカットしてもらいます。カットは「ご要望」の欄に書きます。PCBgogoは日本語でもOKです。
画面右の「カートに入れる」をクリックします。
ガーバーファイルをアップロードするウィンドが表示されます。「ガーバーデータを入稿」をクリックしてファイルをアップロードし、「確認」をクリックします。
PCBgogoによる基板データのチェック(レビュー)が始まります。数分から数時間で完了し、完了したとのメールが届きます。
データのチェックが完了すると、右下の「レジに進む」がクリックできるようになります。
発送手段を選択し、右側の「支払い」をクリックします。PayPalの画面が表示されるので、そこで支払いを完了させます。
これで、基板の発注は完了です。
基板発注完了
紆余曲折ありましたが、ようやく基板の発注まで進みました。届いたらマイコンにプログラムを書き込んで、基板に部品を実装しようと思います。
コメント