投稿

ラベル(XIAO SAMD)が付いた投稿を表示しています

CANバスモジュールを使ってデータ送受信する(受信側復習)

イメージ
 しばらく放置していたら、自分の書いたスケッチがわからなくなったので、 ブログ投稿しながら復習することにしました。 送信側 SAMD XIAOとMCP2515 受信側 Arduino MKRZERO(SAMD)とMCP2515の組み合わせです。 私が使うための最低限の情報だけなので、もっと掘り下げたい方は詳しいサイトを探して下さい。 ※テストしてわかったこと※  理由はわからないが、送信側で、1byteの中で7bitしか使えない事がわかった。 受信側は送信側の7bitに合わせるしかありません。 Amazonで購入したCANバスモジュール CANコントローラ(MCP2515)とトランシーバ(TJA1050)のICが載っています。 loop()関数中スケッチ抜粋 int packetSize = mcp.parsePacket();   if (packetSize) {     if (mcp.packetId() == packetId11) { //送信側IDと一致(packetId11)       id11_value = 0;       byte receivedData[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};       while (mcp.available()) {         for (int i = 0; i <= 7; i++) {//受信した0~8byteを配列に入れていく           receivedData[i] = (byte)mcp.read();         }//for       }//while       //receivedData[0]~[8]配列内のデータを処理して送信元データへ復元する       for (int i = 0; i <= 7; i++) {//配列を順に呼んで       ...

CANバスモジュールを使ってデータ送受信する(送信側復習)

イメージ
 しばらく放置していたら、自分の書いたスケッチがわからなくなったので、 ブログ投稿しながら復習することにしました。 送信側 SAMD XIAOとMCP2515 受信側 Arduino MKRZERO(SAMD)とMCP2515の組み合わせです。 私が使うための最低限の情報だけなので、もっと掘り下げたい方は詳しいサイトを探して下さい。 ※テストしてわかったこと※  理由はわからないが、1byteの中で7bitしか使えない事がわかった Amazonで購入したCANバスモジュール CANコントローラ(MCP2515)とトランシーバ(TJA1050)のICが載っています。   MCP2515 CANコントローラについて マイクロコントローラとの接続インターフェース:SPI(10MHz) 1秒間に送受信可能なデータ量(Mb/s):1Mb/s (Mbyte/秒(メガバイト/秒)1byteは8bit 1Mb/sは8Mbpsに相当  Mbpsとは、1秒間でのデータの転送速度 bit/秒) CAN通信について(かんたんに) データの中に”ID(識別子)を付加して送信する” データ受信側は、IDにより「どのようなデータなのか?」判断できる。 IDは通信調停の優先順位決定にも使われる。 標準フォーマット:11ビット長でIDを構成、IDの範囲0x0~0x7FF 2048種類の識別可能 (拡張フォーマット:ID(ベースID)と拡張IDの18ビット長で構成) 1回に送信できるデータ量が最大8byte ひとつのIDで8byte送れる。(と思っていたが実際は1byte(8bit)の中で7bitしか使えなかった) 8byteのデータを送れるということは、つまり64bitのデータを送れるということになる。 (前述の通り7bitなので7x8=56bitと思われる) 6個のデータを送りたい データごとにIDをつける。 1個のデータは32bit(0〜4294967295)4byteぐらいの数値を送れるようにしておく。 32bit(4byte)のデータを、8bit(1byte)7bit毎に分割して、 送信データへ入れていく\ mcp.beginPacket(packetid);//packetidは任意のID   for (int i = 0; i <= 7; i++) { ...

タコメーターの回路をマイコンで置き換える(置き換え回路テスト中その2)

イメージ
 ※日本精機製タコメータが動かない※ お困りの方へ タコメータが動かない原因は電解コンデンサの故障可能性あります。 コンデンサ交換で動いた解説投稿へリンクする予定しばし待たれよ 電解コンデンサのショート不良可能性あり。基板中央付近の円筒形470μF6.3Vを、 テスタ抵抗レンジで数Ωなら可能性高いので交換してみて。 コメーター回路はseeeduinoXIAO(XIAO SAMD21)が載った基板です。 ブレットボード上はありあわせの部品で組んだCDIの代用回路(通電チェックLED付き) Arduino UNOはパルス発生用 CDI代用回路が簡易なため、調整用の入力直列抵抗と、ツェナーダイオードを別付けしてテストしています。 パルスの入力回路はオリジナルタコメータ基板回路をベースにして、ネット記事を参考にアレンジ&改変しています。 今後は 実機でのテストをお願いして、動作確認とメーター指示値の校正を行う予定です。 準備ができたら 部品レイアウト&配線図を投稿します。(手書き回路図は見にくいのでやめときます) ArduinoIDEで書いたスケッチも(プログラム) その後で KICADで回路図を書いて、基板も設計しておきたいと思います。

タコメータの回路をマイコンで置き換える(置き換え回路テスト中)

イメージ
 ※日本精機製タコメータが動かない※ お困りの方へ タコメータが動かない原因は電解コンデンサの故障可能性あります。 コンデンサ交換で動いた解説投稿へリンクする予定しばし待たれよ 電解コンデンサのショート不良可能性あり。基板中央付近の円筒形470μF6.3Vを、 テスタ抵抗レンジで数Ωなら可能性高いので交換してみて。 これを これで代用できるか                        タコメータが動かないということで、相談を受けて回路を調べましたが、 ICまで信号は入っているようで、ICが故障しているのではないかという結論になりました。 IC(T8016A)は入手困難のようです。 ※後日追記※ 後日の調査で故障している部品が見つかりました。 メーターに並列に接続されている電解コンデンサがショートしていました。 “並列接続でショート“はつまり全ての電流がコンデンサを流れてしまうので、 ”メーターが動かない”となります。別の記事に投稿します。 そこで別の回路に置き換えて動かしてみようということに オリジナルタコの回路は原理的にはF-Vコンバータでいいんじゃないかと思います。 メーターは電圧計の針の可動範囲を大きくしたようなものです。 つまり、 パルスが少ない時(低い周波数)は低い電圧を出力し、 パルスが多い時(高い周波数)には高い電圧を出力する。 電圧に応じてメーターの振れが変化する。 F-VコンバータICはTC9402CPDやNMJ4151Dなどが秋月電子通商で入手できそうですが まず手元にある部品で出来ることをやってみようということで マイコンATSAMD21Gの小さいやつSeeed-StudioのXIAOでやってみることにしました。 他のマイコンに変更することも比較的かんたんです。 ネット公開されている記事を参考に(ありがとう)、 ありあわせの部品でテスト用擬似回路を組んでテスト中です。 プログラムの構成をざっくりと・・・ 外部割り込みを使いイグニッションのパルスのたち下がりを捉え、 パルスの間隔を測ります。パルス間隔から回転数を計算します。 回転数をメーターを振らせるための電圧に変換します。 電圧の上下はPWMで、デューティ比(パル...