JH7UBCブログ

アマチュア無線、マイコンなど趣味のブログです。

STM32duino

[ リスト | 詳細 ]

記事検索
検索

全5ページ

[1] [2] [3] [4] [5]

[ 次のページ ]

 今製作中の7MHz CW トランシーバに使おうと思い、光学式ロータリーエンコーダを購入しました。

 日本電産コパルのRES20D50-201-1です。

イメージ 1

 直径2cmと小さいものですが、非常にスムーズに回しやすく、無線機やゲーム機に使われている定番の光学式ロータリーエンコーダです。

 メーカーのカタログによれば、仕様は次のとおりです。

 電源電圧 DC5V
 電源電流 最大50mA
 出力波形 矩形波
 出力相  A,B
 分解能  50 P/R
 A,B位相差 90°±45°
 最大応答周波数 200Hz
 出力信号 1(High) +4.5V minimum
        0(Low) -0.5V maxmum
 光源 LED

 赤、緑、白、黒の4本のリード線が出ていますが、これについては、説明がありません。

 Web上で、調べてみても、ゲーム機に使用した例はあるものの、無線機に使用した例がヒットしません。

 かろうじて、赤(V)黒(GND)緑(E1)白(E2)という記載を見つけました。

 そこで、赤に電源の5V、黒にGNDを接続して、E1(緑)とE2(白)をオシロスコープに接続して、エンコーダを回転させ、波形を観察しました。

イメージ 2

 仕様どおりの出力が得られました。そこで、STM32duinoに接続してテストを行いました。

 回路図です。
イメージ 3

 スケッチです。機械式ロータリーエンコーダのテストに使ったものと同じです。

イメージ 4

 このスケッチで、問題なく動作しました。

 この光学式ロータリーエンコーダをトランシーバに使いたいと思います。

 先日実験したSTM32duino Si5351A 7MHz VFOをユニバーサル基板に組み、VFOユニットにしました。

イメージ 1

 今回は、レベル変換がないので、非常にすっきりしています。

 TFT、ロータリーエンコーダ、USBシリアル変換モジュール(FT232RL)を接続した状態です。

イメージ 2

 スイッチなどは、必要によりヘッダーピンに接続して、プログラムの開発を行います。

 無線機への実装を考慮して、このような形になりました。プログラムの製作とハードウェアの製作を並行して行い、7MHzのトランシーバーの開発を行っていきます。

STM32duino Si5351A 7MHz VFO

 STM32dunoで今まで行ってきたテスト、ロータリーエンコーダのテストSi5351Aのテスト2.2"TFTの表示テストを組み合わせると、VFOを作ることができます。

 今回は、7MHz VFOをテストしました。まず、回路図です。STEP切り替えボタンで、周波数ステップを1KHz,100Hz,10Hzに切り替えます。

イメージ 1

 ブレッドボードです。配線がちょっとごちゃごちゃしていますが、無事に動作しました。

イメージ 2

 2.2"TFTの画面です。3種類のフォントを使っています。写真では、ちょっと色が飛んでしまいましたが、一番上のタイトルが青、周波数が、シアン、STEPが白です。

 カラーのTFTディスプレイは、非常にきれいですので、視認性が良いです。

イメージ 3

 スケッチは、JA2GQPさんのVFOの記事を参考にしていますが、細部は自分なりにアレンジしています。

 このVFOをユニット化して、本格的7MHz QRP CW トランシーバに使おうと考えています。

  


 STM32duinoで2.2"TFTにUcg.libでグラフィックスを表示してみました。

イメージ 1

使用した関数は、左上から

ucg.drawHLine(x,y,len); // (x,y)を始点として長さlenの水平線を描く
ucg.drawVLine(x,y,len); // (x,y)を始点として長さlenの垂直線を描く
ucg.drawLine(x1,y1,x2,y2); // (x1,y1)から(x2,y2)まで直線を描く
ucg.drawFrame(x,y,w,h); // (x,y)を左上として、幅w、高さhのフレームを描く
ucg.drawRFrame(x,y,w,h,r); // (x,y)を左上として、幅w、高さhの角の丸いフレームを描く。角の円半径r
ucg.drawBox(x,y,w,h); // (x,y)を左上として、幅w、高さhのボックスを描く
ucg.drawRFBox(x,y,w,h,r); // (x,y)を左上として、幅w、高さhの角の丸いボックスを描く。角の円半径r

ucg.drawTriangle(x1,y1,x2,y2,x3,y3); // (x1,y1),(x2,y2(,(x3,y3)を頂点とする三角形を描く
ucg.drawPixel(x,y); //(x,y)に点を描く
ucg.drawCircle(x,y,rad,option); //(x,y)を中心として、半径radの円を描く。optionにより様々なパターンを描く。
順に、optionが、1,2,3,4,5,6,7の時。円を描く場合は、option=15。

ucg.drawDisc(x,y,rad,option); //(x,y)を中心として、半径radの円盤を描く。optionにより様々ンパターンを描く。
順に、optionが、1,2,3,4,5の時。

この他については、reference.pdfを参照してください。

 sinカーブを描かせてみまました。(ピンボケで失礼)
イメージ 2

 浮動小数点のsin関数の計算に時間がかかるのか、1周期を描くのに、約3分もかかりました。

 とにかく、遅いです。ArduinoIDEでは、sym32(32bit)の能力を十分には発揮させられないのかも知れません。


STM32duino 2.2"TFT Ucg Font

 今回2.2"TFTの表示に使っているライブラリUcglib(Universal color graphic library)は、様々な文字フォント表示とグラフ描画を行うことができます。

 まず、フォントについて、テストをしました。

 フォントは、様々なタイプがあり、フォントサイズは、最小4 pixel Heightから最大63 pixel Heightまであります。

 ダウンロードした Ucglib_Arduino-masterの中のextrasの中のfontsize.pdfに見本があります。

 また、同じフォルダ内のreference.pdfにこのライブラリの使い方が記載されています。

 いくつかのフォントタイプを表示してみました。色は、白、赤、緑、青です。実際の色はもっと鮮やかです。

 フォントは、25 pixel Heightのフォントで、上から fur25_hf , ncenB24_hr , osb26_tr , logisoso26_tr です。

 フォントを指定する関数は、ucg.setFont(font)です。

 文字の表示位置は、ucg.setPrintPos(x,y)で指定しますが、x,yは文字の左下の位置になります。

イメージ 1

 フォントサイズ4pixel Heightから 12pixelHeightまでの文字を表示させてみました。

イメージ 2

 ちょっとカメラのピントが甘いせいもあり、4pixel Heightの文字は見ずらいですね。

 老眼の私は10 pixel Height以上の文字を使おうと思います。
 

全5ページ

[1] [2] [3] [4] [5]

[ 次のページ ]


.
JH7UBC
JH7UBC
男性 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

よしもとブログランキング

もっと見る

[PR]お得情報

ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事