jendo1969コメントをどうぞEasyDriverへ供給される電流を電流センサで計測しました。出力電流/電力モニタINA219を使用しました。電流センサーモジュール(カレントセンサー)http://akizukidenshi.com/catalog/g/gM-08221/シャント電圧降下とバス電源電圧を計測し、電流と電力が取得できます。100msec毎にデータ取得しました。高速回転時が80mA程度、停止時が350mA程度です。サンプルプログラムは以下にあります。https://github.com/jendo1969/d2000/tree/master/Step_motor2/srcINA219.hファイルに電流センサの制御をまとめてあります。https://github.com/adafruit/Adafruit_INA219ここを参考に作成しました。jendo1969コメントをどうぞD2000でステッピングモータを回しました。A3967を使用しているのでパルス出力と方向出力のみでステッピングモータを回すことができます。ZephyrのPWMのサンプルは、”PWM_0′′を対象にしています。PWM_0は、JTAGピンと競合しているため使用できません。PWM_1を使用するようにしました。ピンの機能割付けを行いました。device_get_binding(PINMUX_NAME);PWM1_PIN(24ピン)を機能C(PWM)に設定します。{これでPWM_1側が使えるようになります。電源は、DC12Vを使用しています。GF65I-US1250http://akizukidenshi.com/catalog/g/gM-00510/D200ボードには12Vから三端子レギュレータで作成したDC5Vを入力しています。エンコーダカウントが1秒間6400カウントに調整しました。一周1600カウントなので1秒4周です。240rpmで回したことになります。サンプルプログラムは以下にあります。jendo1969コメントをどうぞD2000にロータリーエンコーダを接続してみました。ロータリーエンコーダは、なるべく安いものを探して以下の物をアマゾンで購入しました。出力https://www.amazon.co.jp/gp/product/B076Q5W251/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1分解能が違いますが以下の取説を見つけました。https://uamper.com/products/datasheet/LPD3806-360BM.pdfエンコーダの出力は、NPNのオープンコレクタ出力です。D2000には、AB出力を4.7kΩの抵抗で3.3Vにプルアップして接続しています。入力ピンの割り込みを利用して位相計数を行いました。アップエッジ、ダウンエッジの両方で割り込みをかけて4倍の分解能としました。400pprなので一周1600カウントとなります。正転でカウンタ増加、逆転でカウンタ減少が確認できました。サンプルプログラムは以下にあります。jendo1969コメントをどうぞXBeeで無線接続しました。Arduino)上にXBeeを接続しました。http://akizukidenshi.com/catalog/g/gM-07033/XBeeのピッチ変換基板は、XBee用2.54mmピッチ変換基板を使用しました。http://akizukidenshi.com/catalog/g/gP-05060/XBeeは、XBeeWi-Fi(S6B)モジュール(PCBアンテナタイプ)を使用しました。http://akizukidenshi.com/catalog/g/gM-06676/XBeeの場合、通信の大部分をモジュール側で行うので通信の可否はモジュール設定で決まります。USBからの給電では、ZigbeeのXBeeしか動かせません。AC-DCコンバータ経由での給電では、WiFiのXBeeも動作しました。通信確認は、以下のサンプルプログラムを使用しました。LCDのプログラムが含まれています。今回はこのLCDを使用してみました。V2は、セットに含まれているものを使用しました。Grove-Arduinoスターターキットhttp://akizukidenshi.com/catalog/g/gK-09167/http://wiki.seeed.cc/Base_Shield_V2/LCDの電源は、5VなのでシールドのVCC設定を5Vに設定します。LCDはI2Cコネクタに接続します。起動すると簡単に表示が確認できます。このLCDは、バックライトがカラーLEDになっており、設定により色が変化します。サンプルプログラムは、色の設定を100msec毎に変化させ、設定値をLCDに表示します。Groveのサンプルは、LCDしかありませんがライブラリ側に対応センサがいくつかあるようです。jendo1969コメントをどうぞBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。https://www.bosch-sensortec.com/bst/products/all_products/bmc150今回は磁気センサにアクセスします。QMSIのサンプルMagnetometerとmbedのBMC150サンプルを参考にしました。https://os.mbed.com/users/Dautor/code/BMC150/file/1d1123b3df76/bmc150.cpp/ありがとうございます。加速度計のアドレスは、0x12です。0x12磁気センサの初期化でレジスタ0x4Cで0x38を設定しています。出力データレートを30Hz、操作モードをノーマルにしています。磁気データは、0x42レジスタから2バイトづつXYZ軸の順に入っています。6バイトを一度に読み込んでいます。温度と加速度と磁気値を500ms毎に取得し、シリアル経由でパソコンに表示しました。以下にサンプルプログラムがあります。jendo1969コメントをどうぞBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。https://www.bosch-sensortec.com/bst/products/all_products/bmc150今回は加速度計にアクセスします。0x10温度センサとI2Cのアドレスは同じです。加速度の取得の前にレンジとフィルターの設定を行っています。フィルターは更新時間64ms、レンジは、±2gに設定しました。加速度データは、0x02レジスタから2バイトづつXYZ軸の順に入っています。6バイトを一度に読み込んでいます。温度と加速度を500ms毎に取得し、シリアル経由でパソコンに表示しました。以下にサンプルプログラムがあります。jendo1969コメントをどうぞBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150には、加速度センサ側に温度測定を搭載しています。温度値のレジスタが0x08です。温度は、取得した数値が0の時、23°Cです。数値1が0.5°Cに対応しています。23;1秒ごとに温度を取得し、シリアル通信USART_Aでパソコンに送りました。数°C実際の室温より高いので校正が必要です。ICを触ると温度が上がるので計測はできているようです。以下にサンプルプログラムがあります。D2000には、ボード上にBOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。https://www.bosch-sensortec.com/bst/products/all_products/bmc150BMC150は、I2CとSPIで接続できますが、D2000とは、I2Cで接続されています。SPピンのレベルでインターフェースの毛帝をします。Kitは、SPピンがプルアップされているのでI2Cとなります。APIを使って接続します。I2Cのアドレスもピン設定で2種類選択できます。SDOピンをGNDレベルにすると加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。SDOピンをVDDレベルにすると加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。この設定は、J1ジャンパーで切り替えられます。J1をオープンにするとSDOがGNDにプルダウンされ、加速度センサのアドレスが0x10、磁気センサのアドレスが0x12となります。J1をクローズするとSDOがVDDにつながり、加速度センサのアドレスが0x11、磁気センサのアドレスが0x13となります。今回は、J1はオープンのまま使用します。I2Cの使用方法は、Zephyrのサンプルにあるi2c_lsm9ds0を利用しました。APIのリファレンスは以下にあります。http://docs.zephyrproject.org/api/io_interfaces.html#i2c-interfaceZhephyrのサンプルの中にBMC150はありませんが、QMSI側にBMC150のサンプルAccelerometerがあります。これも参考にしました。I2Cの初期化はそのまま使用できます。i2c_configure()\n”);return;}I2Cの読み書きは、以下の関数で行えます。;次にBMC150から温度の取得を行ってみたいと思います。jendo1969コメントをどうぞUART_Aが使用できるようになりましたが、割り込みを使用した方が、効率が良いので割り込みを使ってみます。プロジェクトのprj.confファイルで周辺機器の設定を行います。CONFIG_SERIAL=yCONFIG_UART_INTERRUPT_DRIVEN=yCONFIG_UART_QMSI_0=yCONFIG_UART_QMSI_0_HW_FC=nCONFIG_UART_QMSI_0_BAUDRATE=57600割り込みの設定CONFIG_UART_INTERRUPT_DRIVENをyにします。その他は、前と一緒です。uart0_isr);割り込み関数uart0_isrを登録します。uart_irq_rx_enable(uart0_dev);次に受信割り込みを有効にします。受信が入るとこの関数が呼ばれます。BUF_MAXSIZE);受信データをバッファに読み出します。最後に受信文字を送信します。ループバックのサンプルになっています。以下にサンプルがあります。組込み技術向上のため、エンベデッドに関する話題中心のブログです。