Author Archive
STM32F103でUSB-HIDキーをつくる(1)
by cronos on 10月.28, 2018, under HID_KeyBoard, Make
はじめに
電気CADの多くは機能が盛りだくさんで、主要な機能こそボタンとして並んでいるものの、ちょっとでも込み入った操作になると途端にメニュー階層の奥深くを彷徨う事になります。 これでは仕事になりません。
いままでは外付けテンキー+キーカスタマイズソフトを使っていましたが、ソフトがOSの更新に追従しなくなり、使えなくなってしまいました。
そこで、この際自分好みのカスタムキーを作ろうと思いUSB-HIDキーボードを作り始めたのでその記録です。
部品調達
aitendo店頭で購入しました。 amazonでも扱いがあるようです。
石はSTM32F103C8です。 72MHzで回るCortex-M3がボードになってUSD2前後から手に入ります。
ソフト関係
STM32CubeMX ピン配置とペリフェラル、クロックなどの設定をすると各種開発環境用のプロジェクトファイルを吐き出してくれる便利なツールです。
IDEの指定は、Project Settings – Tookchain / IDE から”TrueSTUDIO”を選びました。
諸々の設定が終わったところで、Project – Generate Code すれば、指定した環境用のプロジェクトが出来上がります。
TrueSTUDIO 開発環境です。デバッガとの連携も出来ます。
使う時に更新をチェックして常に最新に保った方が良さそうです。 今回もCubeMXから出てきたprojectがHALライブラリのリンクに失敗する問題でビルド出来ませんでしたが、最新版に更新することで回避出来ました。
設定
CubeMXでプロジェクトを作ります。 デバイスはSTM32F103C8を指定します。
外付けクリスタル用にRCCのHSE/LSEを設定します。
USBは、Device(FS)を有効にする事と、MiddleWares(左ペイン上側)の”USB_DEVICE”から、”Human Interface Device Class (HID)”を選びます。
クロックはPLLの逓倍数(PLLMul)をx9にして、USB Prescalerを/1.5にするだけでした。
今はひとまずこのくらいです。
本題
前フリが長くなりましたがやっとコード書きです。
STM32F103C8 HID keyboard とかでググって記事を探します。
ひとまず文字を出したかったのでベタ書きですが、ShiftやAltなど付加キーと、押下するキーコード、ディレイタイムを考慮出来るようにしてみています。
https://github.com/crono2250/stm32_USB_HID_CustomKey/
あー、複数キー押しっぱで何かする みたいなの考慮出来てなかったな、何か方法考えなくちゃ。
ということで、1秒おきにエディタに”Hoge”と書かれました。ぱちぱち。
PCに接続されるキーボードが1つならこれで問題ないんですが、予めCapsLockがされていたり、Shiftを別のキーボードで押されていたりすると、小文字が出ません。 対応面倒くさそうなので後回し。
あと、キーバインド固定の1打鍵1キャラしか出てこないキーボードを作るなら買ってきますよね。 指定のキーにキー、待ち時間、同時押し、諸々を考慮したシーケンスの登録が必要になります。 ただそれってキーボード相手にどうデータを送るんじゃ。 どうもNumLockやCapsLock、ScrollLockのLED用情報を使ってデータ転送する方法があるようです。要調査&実験。
[PSoC Advent Calendar 2016 14日目] 絶縁PSoCライタ
by cronos on 12月.14, 2016, under PSoC
こんにちは。 cronosです。
PSoC Advent Calendar 2016 14日目の記事です。
http://www.adventar.org/calendars/1796
PSoCまつり2016に参加した後の反省会の中で出たお話。
「cronosさん、次は絶縁PSoCライタとかどうですかね?」
C「おーいいですね! 3週間頂ければ作りますよ!」
…などと、気軽に請けてしまったところからお話は始まります。
PSoCアドベントカレンダなので、PSoCを使う話を書くべき所ではありますが
PSoCを使うためのツールの紹介と、その製作過程について書いてみたいと思います。
●PSoCライタとは
CypressのPSoCシリーズは、PSoC1, PSoC3,PSoC4そしてPSoC5LPと多くの種類があります。
PCで開発した回路やプログラムを書き込むツール、開発中にデバッグをするツールとしてPSoCライタというものがあります。
・絶縁PSoCライタ・デバッガ
KitProg1をベースに、ターゲットとPCの間をトランスで完全に絶縁したPSoCライタ・デバッガ(以降PSoCライタと呼びます)です。 ケースに入った完成品として最安(JPY6000, USD60)のツールです。
PSoC3/4/5LPに対応しています。(1はサポートしていません。)
ターゲット側電源はターゲットから供給してもらいます。ライタから電源を供給するモードはサポートしません。 なぜならターゲット基板にも電源回路が載っていて、その電源の出力側から供給する形になるため最悪は電源回路を壊してしまう恐れがあるためです。 また、USBで十分な電力を供給出来ないターゲット(USBで供給出来ない電力を消費するターゲットは沢山ありますね。)に対して供給しようとすることで、デバッガ自体を破損したりターゲットの動作が不安定になったりとあまり良い事が起こらないためです。
サイズはminiProg3の約2/3です。
USBコネクタには入手が難しくなりつつあるminiUSBコネクタに代えてmicroUSBコネクタを採用しています。
現在、絶縁PSoCライタ・デバッガはモータを含むメカトロ系の開発、工場のライン投入用ツールとして利用されています。
スイッチサイエンス様のマーケットプレイスにて販売しており、近日英語サイトでも公開される予定です。
http://ssci.to/3053
・miniProg3
Cypressの純正品では、miniProg3という製品があります。(USD89)
この製品は、1.5〜5.5Vで動作するPSoC1,3,4,5LPを対象にしたツールです。
SWD, JTAG, I2Cの3つのI/Fを持っていて、ターゲットに電源を供給する機能も持っています。
http://japan.cypress.com/documentation/development-kitsboards/cy8ckit-002-psoc-miniprog3-program-and-debug-kit
今まで私も開発にはminiProg3を購入して利用していました。
実は少し前までBluetoothマウスの開発キット(USD60くらい)にminiProg3が入っていました。
miniProg3を購入するには、このキットを買うのが一番安い方法でした…が、この度製品の終息がアナウンスされてしまいました。
・KitProg
その他にも、CypressさんからCY8CKIT-059というPSoC5LPの評価ボードがUSD10と格安で販売されています。 これにプログラマ・デバッガ機能が付いていて、ターゲットと切り離して単体のデバッガとして使う事が出来ます。(KitProg1と呼ばれています)
しかし、このKitProg1はそのままでは電源電圧が5V固定です。
3.3V電源のターゲットでは基板を改造する必要があります。
●製作過程
・ケース探し
最初はケースを探しました。
aliexpressなどで”plastic enclosure”で検索して、サイズ・価格・クオリティのバランスが取れるものを徹底的に探します。
今回は元々USBドングルのような使い方を想定している小型ケースを採用しました。
サンプルが届き、採寸をしたら3D CAD上でモデルを作ります。
使っているCADはOnShapeです。 https://www.onshape.com/jp
・基板設計、試作
ケースの内寸に合う形の基板外形を3D CADで作り、基板CADにインポートします。
設計した回路に従って基板の設計を進めます。
・部品調達、基板製造、部品搭載
この辺りを纏めているのは全て外注だからです。
部品調達・基板製造・部品搭載は、全て深圳の部品商、深圳の基板工場で完結しています。
一部日本から送り込む部品もありましたが、基本的に深圳の部品商から直接工場に送り込んでいます。
電車通勤の移動時間を利用して先方とコミュニケーションをして、見積もりを貰い発注します。
支払いはpaypalを利用しました。(5%程度の手数料が掛かってしまいますが。)
その他の送金方法として銀行間送金(T/T)が有りますが、窓口まで行かなければならない事と想像以上に手数料が高い事から見送りました。
・ボード着荷
ニヤニヤが止まりません。 この日をどれだけ楽しみに待った事か。
ボードの実装品質をチェックしてから通電、ブートローダをマイコンに書き込みんだ後にPSoC Programmerでファームウェアを送り込みます。
幸い、全数良品とする事が出来ました。
・ケース加工
ケースの一部がコネクタに干渉する事が分かっていたので、CNCフライスを利用して削る加工を行います。 ちなみにケースも深圳から調達しています。
・最終組立、出荷検査
ケースにひたすらボードを入れ、検査用ターゲットに接続して動作を確認します。
完成です。 結構手間が掛かるでしょう?
もう少しお時間をいただく事になると思いますが、スイッチサイエンス様を通じて海外発送も出来るように準備を進めています。 → 海外発送に対応しました: https://international.switch-science.com/catalog/3053/
テストプローブ
by cronos on 12月.13, 2015, under 未分類
ボードの検査を自動化したくて、環境整備を行っています。
基板1枚ごとに手動で5ステップの操作を行っていました。
(ループバック接続、2次側電源OFF)
1. TeraTermを接続
2. PCからテキスト送る → 応答が無い事を確認
3. 2次側電源ON
4. PCからテキスト送る → 応答があり、同じキャラクタが帰って来る事を確認
5. 2次側電源OFF
↓
ここまでを自動化。
あとは基板に信号を繋ぐテスト端子の整備だけ。
テストプローブを作るメーカさんは何社かあって、そこに作っていただく事も考えましたが、どうしてもお値段が…。
最近、amazonでポゴピン(スプリング付き端子)が売られていると教えて貰い
試しに調達してプローブを作ってみました。というのが今日の記事。
PSoC5_EVB [R3]
by cronos on 10月.01, 2014, under PSoC
PSoC5_EVB [R2]の廉価版、[R3]を作りました。
ここではR2とR3の差分について纏めてみたいと思います。
こんなフォーマットで行きますね。
●変更点
[R2]: R2での仕様
[R3]: R3で変更された仕様
●デバイス価格
[R2]: \6,000.-
[R3]: \4,700.- (頑張った!)
●PSoCデバイス
[R2]: CY8C5868LTI-LP038 (Flash:256kB, SRAM:64kB, EEPROM:2kB)
[R3]: CY8C5267LTI-LP089 (Flash:128kB, SRAM:32kB)
●USB I/F
[R2]: CP2102-GM http://bit.ly/1rt9UKm
[R3]: PSoC5LP USB I/F (w/BootLoader)
●電源
[R2]: 電源端子(3.3V~15V)
[R3]: 電源端子(3.3V~15V) , USBバスパワー
●クロック
[R2]: 外付け16MHz クリスタルオシレータ
[R3]: PSoC5LP内蔵OSC (オシレータ外付け可)
●I/O電源
[R2]: 3.3V固定
[R3]: 3.3V or 外部入力電圧(1.8~5.5V, EXTピンに供給、バンク毎の設定)
●付属品
[R2]: ヘッダピン セット
[R3]: なし
…とまぁ、ざっくり上記のような差分があります。
メモリを32kB以上使っていたりしていなければ、以前のR2のプロジェクトが
デバイス指定の変更だけで動く可能性があります。
★UARTを使っていると、若干手を入れる必要が出てきます。
1. USB_UARTに置き換えていただく
USB_UARTに置き換えることで、PCからシリアルポートして
認識させる事が出来ます。
USB_UARTでの通信例については、サンプルプログラムを公開しています。
2. 外付けでUSBシリアルを繋いでいただく
外付け回路が付いてしまいますが、ピンアサインの変更だけで済みます。
コードの変更は0で済むでしょう。
近日、スイッチサイエンスさんで頒布する事が出来ると思います。
ぜひご検討ください。
あ、そうそう。サンプルプログラム、回路図その他は、以下リンクにあります。
ここ。
しごと、やめました。
by cronos on 9月.30, 2014, under 未分類
2ch電圧源。
by cronos on 9月.22, 2014, under PSoC, 未分類
微小電流源を別件で試作していて、評価のために細かく設定出来る
電圧源が欲しくなったので、横道に逸れて作ってみた。
手持ちで有った16bit 2chのDACの出力を任意に設定する方向で。
全体の制御はPSoC5LPで行って、エンコーダとOLEDで表示と設定を。
LiPOバッテリを内蔵して、残量管理と充電も出来るように。
概ね完成したので、後で資料を纏めて記事を書いてみよう。
電流源の方は、200pA~20mA辺りまでリニアな様子。
割り込み処理
by cronos on 5月.19, 2014, under PSoC
割り込み処理を書くのだ。
いつも前プロジェクトを使い回しているので
テンプレを作ってblogに残して置こうと思う。
☆下準備
System/Interrupt を回路図に置いて、OEという名前を付ける。
☆コード
CY_ISR(OE_isr) {
SD_Access_Write(SD_Access_Read()?(0):(1));
}
void main()
{
OE_Start();
OE_StartEx(OE_isr); // 出力許可SW押下検出
CyGlobalIntEnable; // Enable all interrupts by the processor.
for(;;) {}
}
//——————————————
おやくそく0
回路図上で、hogeで宣言した割り込み端子の
割り込みハンドラはhoge_isr。
おやくそく1
CY_ISR(hoge_isr); は、main()より前に置く。
おやくそく2
hoge_Start();と
hoge_StartEX(hoge_isr);の順番だいじ。
[ PSoC5-EVB ] 試作。
by cronos on 4月.07, 2013, under PSoC
以前、PSoC5の味見を目的にユニバーサル基板にQFNのPSoC5を載せて
SDカードをシリアルポート経由で読み書きするようなテスト回路を作って遊んだ。
SDカードの読み書きが出来るってのはとても素晴らしい事だと思ったので
PSoC5(3も載るけどね)用のDIP化ボードを作ってみた。
CPUはPSoC5 (3も、5LPも載るよ)
USB-UART I/F搭載(非絶縁)
MicroSDカードスロット搭載
SDカードアクセスLED x1 (GPIOへ接続)
デバッグ用LED x2 (GPIOへ接続)
電源3.3~15V入力(逆接続保護回路内蔵)
3.3V 0.8A出力 DC-DCコンバータ搭載
クリスタルオシレータ(16.0MHz)搭載
基板サイズは25 x 50mm
とまぁ、手持ちの回路総動員で、なるべくコンパクトになるように目指した。
外に出るGPIOは24本で、3.3Vの電源出力もある。
今回もSeeed Studioの基板製造サービスを使ったのだけど
最近Seeedさん、4層基板を始めたので今回はそれを使ってみた。
なので両面基板の時に常に悩みの種となる電源配線が相当ラクになった。
10pinのJTAG対応I/Fを載せたのだけど、デバッガとの間にケーブルは必要だわ
地味に場所喰うわであんまり良いこと無かったので、次のリビジョンを起こす時は
5pinのSWD対応I/Fで設計しようと思ってる。
今の所、頒布と同時に回路図、PSoC Creatorのプロジェクト一式を公開する予定。
みんなに便利に使って貰えたら幸い。
8/27追記
PSoC5ボードの情報を纏めたページを作りました。
ここ。
[DCDC180-HP] でけた。
by cronos on 4月.07, 2013, under SW電源
以前、切手(くらいの)サイズのニキシー管用昇圧電源を作った。
あの時は180V 1W出力だったんだが、今作ろうとしているプロジェクトには
出力が不足するようなので、もうちょっとパワーが取れる電源を
作ろうかなと始めてみた。
1Wのは電源をUSBから取る前提で設計したので5V入力だった。
変換効率は約75%くらい。
今回は、出力が大きくなるので入力電圧を上げ、12Vとしてみた。
ダイナミック点灯で使う事を前提として設計したので、出力Cはフィルムで。
効率としては80%前後を期待して。
ちょうど、秋月で売ってる小さいブレッドボードに乗っかるサイズ。
ICのデータシートの数式から、約10Wの出力が取れる計算だったんだが
出来上がってみたら、ぴったり半分の出力しか出ない。
よく式を見てみたら、出力電力を計算する式が電力を1/2するの抜けてる。
インダクタを充電する時、電流は右肩上がりの三角波になるのだけど
そこを矩形波としてモデリングしてるんだ。 そりゃエネルギ倍になるわ。
という事で約5W出力、変換効率は概ね計算通りの83%前後。
私の目的には合っていないので作り直しだけど、頒布はしてみようと思う。
[ PSoC5 ] ソフト書き。
by cronos on 2月.13, 2013, under PSoC
さてさて、しばらく時間が開いちゃいましたが。
UART(と、その周辺)の前プロジェクトからの移植とか
ChaNさんのFatFSの移植なんぞをやってました。
とは言っても、FatFSの移植は一人の知識ではどうしようも無かったので
東大f-tecさんのblogからプロジェクトを頂いて、微修正で実装させて頂きました。
ありがとう、東大f-tecの人!
という事で、現状のソースをプロジェクトごと公開しときます。
UART I/F ~ ストリングバッファ+コマンドI/Fサンプル
上記 + fatfs(R0.08b) 上記 + fatfs(R0.09b)
共にPSoC Creator2.2で作成したものです。
MCUはCY8C5247LTI-089です。