2022年07月02日

FPGA入門に最適なicestudio

今回はFPGA入門に最適なicestudioを紹介します。FPGAの開発をする場合、一般的にはメーカ提供のFPGAの開発環境をインストールしますが、開発環境のディスク容量が大きく、パッケージの追加等、インストール作業自体もなかなかハードルが高いのが現状です。

今回紹介するicestudioはメーカが提供する開発環境ではなく、OSSのプロジェクトの1つとしてFPGAの開発環境が開発、提供されています。対応しているFPGAは主にLattite社のiCE40系列、ECP5系列となっていますが、様々なiCE40系列の開発ボードに対応しています。今回はAliexpressで購入したIcesugar-nano開発ボードでicestudioを使ってみました。Icesugar-nano開発ボードはボード上にFPGA書き込みアダプタ、USBシリアル変換機能のマイコンが実装されているため、別に書き込みアダプタ等を購入せずに単体で書き込みや動作確認、デバッグ等を行うことが可能です。

話をIcesugar-nanoから戻して、icestudioの特徴は下記の通りです。
・一言でArduino IDEのFPGA版というイメージ
・Linuxはもちろんのこと、Windows、Macでも動作
・icestudioだけで論理合成、書き込みに対応
・インストールサイズが0.5GB前後と小さい
・評価ボードのサンプルが充実
・ブロックでの記述に対応、Verilogにも対応
・Verilogが分からなくとも、インストール後、すぐにLチカできる
・RISC-V等のブロック等もあり、様々な拡張が可能

今回はicestudio 0.9.0を利用してみました。


ice_studio9.jpg



0.9.0時点で対応しているボードは下記のようです。

ice_studio7.jpgice_studio8.jpg


様々なサンプルプロジェクトが準備されています。

ice_studio2.jpg

ice_studio4.jpg

ice_studio3.jpg

ice_studio5.jpg

ice_studio6.jpg


実際にLチカのサンプルプロジェクトを実行してみました。SelectからIcesugar-nanoを選択し、Examples→04.Muxes内の「01.Blinking Fixed LED」を選択します。

ice_studio1.jpg

右下のUploadボタンを押すと自動的に論理合成が行われ、合成が成功するとIcesugar-nanoに書き込みが行われます。

9zco1-uovw5.gif

上記のようにLEDが点滅したら成功です。デフォルトのブロックの他に有志でRISC-V等の様々なブロックが開発されているため、ブロックだけでちょっとしたFPGAの機能を実現できそうです。icestudioはまだ0.9.0ですが非常に完成度が高いと思いました。icestudioはもともとLinux環境でのFPGA開発環境のOSS、APIO等を開発してきたプロジェクトの1つで、以前からも注目していたため、今後のプロジェクトの発展が楽しみだと思いました。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2022年06月23日

メールサーバ不具合 お知らせ

2022年6月23日前後にCrescent宛のメールサーバに不具合があり、メールが正しく受信できない状況になっていることが判明しました。

2022年6月23日前後に23日前後にCrescent宛にお問い合わせ頂いたお客様はお手数ですが、再度、お問い合わせ頂くようお願い致します。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2022年06月11日

ミニホットプレートMHP30

今回は先日、Aliexpressで購入したミニホットプレートMHP30を紹介したいと思います。これまで簡単な電子工作基板の実装はヒートガンを用いてリフローしていましたが、部品によってはヒートガンの風によって途中で飛んでしまったりと作業しづらい点がありました。一方で専用の温度制御されたホットプレートを買うのは保管場所も要するため、導入を悩んでました。

そこでMakersの中でも話題のミニホットプレートMHP30を購入してみました。プレートサイズとしては30mmx30mmで非常に小さいものの、ちょっとした基板のリフローであれば、十分だと思いました。


mhp30-1.jpeg

PD65W以上の出力に対応したUSB-ACアダプタを電源として動作します。



mhp30-2.jpeg

背面のAのボタンを長押しで加熱スタート、Bボタン長押しで加熱ストップとなります。また、A、Bボタンを短く押すことで温度調整等が可能です。


mhp30-3.jpeg

実際に電子基板の部品実装をしたところ、きれいにQFN部品の実装ができました。


実際に使ってみて驚いたことは単なるホットプレートというよりもUSBガジェットの延長線として完成した製品だと感じました。具体的には下記の通りです。

・USBPDで60W(20V3A)の電源供給
・ヒータ温度をLEDで表示
・USBをPCに接続でUSBドライブとして認識
・USBドライブからファームウェアアップデートや設定ファイルの書き換えが可能
・本体が倒れるとヒーターOFF&アラーム通知


plate2.jpg

USBをPCに接続した場合はPDではないため、加熱ONすると「Low Voltage」のエラーで加熱できないものの、PCからUSBドライブとして認識することでファームアップデートや設定ファイルの書き換えができるのは驚きました。

MHP30は非常に小さく、場所を取らないため、便利だと思いました。本体が小さいため、USBケーブルに引っ張られて机から落ちたりしないように気を付ける必要があると思いました。付属のUSBケーブルは非常に柔らかいため、それを使った方が引っ張られずによいと思います。また、ヒータONから数百秒程度で指定の温度になりますが、逆にヒータOFFして温度が室温程度に下がるまではそれ以上に時間を要するため、付属のシリコンカバー等を付ける等して触れた際にも火傷しないように注意が必要です。今後、MHP30を色々活用してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | モノづくり | このブログの読者になる | 更新情報をチェックする

2022年05月07日

PIC32 C++プロジェクト

今回はPIC32マイコンでC++ (CPP) プロジェクトを作成する方法について紹介します。といっても記事にする程でないほど簡単でした。

STM32マイコンのSW4STM32やCubeIDEではC++プロジェクトへの変換作業等が必要でしたが、MPLAB X(v5.45) + XC32(v2.50) +Harmony3では特に変換作業等必要なく、cppファイルと.hppファイルを追加するだけでした。また、ライブラリやプロジェクト、コンパイラ等はC++に対応済のため、追加設定は不要です。そのため、非常に簡単に実装できます。

追加するcppファイルと.hppファイルとして、ラッパーとなるwrapper.cpp、wrapper.hpp、LED点滅用の関数LedBlink.cpp、LedBlink.hppをプロジェクトに追加します。また、app.cからラッパー関数を呼び出すためのcpploop();を追加しました。各ファイルの詳細についてはこちらにアップロードしたため、割愛します。

通常のプロジェクト同様にLedBlink.cpp内でブレイクポイントを置いてデバッグもできました。

PIC32CPP.JPG

思った以上にすんなりC++ (CPP) プロジェクトを動かすことができたため、今後はパワフルなPIC32マイコンを活かして、機械学習系のライブラリ等にも応用してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2022年04月23日

USBカメラ変換基板

 今回は昨年から試行錯誤しながら取り組んでいるプロジェクト(USBカメラ変換基板プロジェクト)について紹介します。組込系でカメラ機能を利用する場合、昨今ではOpenMVやM5Camera、ESP32-Cam等を利用することが多いと思います。マイコンとカメラを接続する場合、一般的に下記の接続方法があります。


接続方法メリットデメリット製品例
SPI
伝送が高速
ローエンドマイコン対応
機種によってコマンド互換なし
低解像度
Arducam等
UART
省配線
コマンド互換少し有
ローエンドマイコン対応
伝送が低速
低解像度
シリアルカメラ等
NTSC+SPI
伝送が高速
汎用NTSCカメラ対応
NTSCカメラ自体の入手性
バッファメモリ必須
解像度固定
TVP5150等でSPI変換
パラレル
伝送が高速
高解像度
配線が多い
ハイエンドマイコンのみ対応
カメラモジュール等
MIPI
伝送が超高速
高解像度
専用IF必須
ハイエンドマイコンのみ対応
HDMI
伝送が超高速
高解像度
変換IC必須
ハイエンドマイコンのみ対応
TFP401等で変換
カメラユニット
低コスト
筐体ケース付きがある
別途ファーム書き込み必要
OpenMV
M5Camera
ESP32-Cam
HuskyLens
USBカメラ
USB汎用接続
ケーブル延長容易
入手性が良い
UVCホストの実装が複雑
USB1.1では動作しないカメラ有
解像度の制約が多い
Logicool C270、C920等


 SPI接続やUART接続の場合、予めバッファがカメラ側に内蔵されていることが多いため、マイコン側に大容量メモリがなくても最低限の処理が可能です。一方、パラレル接続やMIPI接続の場合はイメージセンサからほぼそのまま出力されるため、それに対応した高速なインタフェースと読み出しデータを保持するための大容量メモリが必須となります。ユニットとして販売されているものは公開されているファームを書き込むだけで簡単に動作確認や実装できるために便利ですが、生産終了やロットによる機能差等が生じる場合が多々あります。多くのカメラモジュールで使用されるイメージセンサは主にスマートフォン向けのため、カメラモジュールの生産終了や型式変更等が頻繁で継続した安定入手に難があります。

 上記の方法の中でUSBカメラやNTSCカメラを使用する場合、汎用的なIFで継続して安定入手が可能です。ただ、そのままでは容易に使うことが難しいのが課題です。そのため、単体や小規模のマイコンでも簡単に処理できるUSBカメラ変換基板を開発することにしました。
コンセプトは下記の通りです。

・汎用的なUSBカメラから画像取得(jpeg、bmp対応)
・単体でSDカード等に画像ファイルを保存
・簡易的なタイムラプス撮影ができる
・UARTやSPIを介した低解像度の画像取得


実際に開発したUSBカメラ変換基板です。

img1.JPG


もともとはSTM32マイコンで実装予定でしたが、HALライブラリではIsochronous転送に失敗してうまく転送できない、昨今の半導体不足で入手困難であるため、断念。FTDIのVinculumではRTOSのオーバーヘッドが無視できず、SPIの転送速度が遅すぎて断念しました。最終的にPIC32MZマイコンを用いて実装しました。PIC32MZはUSB2.0 High Speedに対応しているため、多くのUSBカメラに対応できます。

SPIを介してLCDを接続してBMPデータを描画させてみました。

img6.gif

カメラや設定によって異なりますが、1秒間に10フレーム弱程度で比較的スムーズにLCDに表示させることができました。


img7.gif

また、10秒間隔でのタイムラプス撮影をして後からコマ送りで動画に編集してみました。今後はサンプルコードや利便性の向上、対応カメラの追加、機能追加等を検討したいと思います。随時こちらに更新情報を追加したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする