タグ別アーカイブ: UART

C2000 Delfino MCUs F28377S LaunchPad SCI INTERRUPT

C2000 Delfino MCUs F28377S LaunchPad + XBEE

C2000 DelfinoのUART Bを介してXBeeを使用しました。
controlSUITEのサンプルプログラムをsci_echoback_cpu01改造しています。
注意としてF28377S LaunchPadを使用するので、プロジェクトのプロパティのPredefine SymbolsのPre-define Nameに_LAUNCHXL_F28377Sを追加しないとシステムクロックが200MHzにならず、クロックの計算が合わなくなります。

このサンプルは、割り込みを使わず、エコーバックするプログラムです。

サンプルプログラムは以下にあります。
https://github.com/jendo1969/Delfino/blob/master/sci_echoback_cpu01/Example_2837xSSci_Echoback.c

Intel Quark D2000 Zephyr CURRENT SENSOR

EasyDriverへ供給される電流を電流センサで計測しました。

電流センサは、TIのハイサイド、I2C 出力電流/電力モニタINA219を使用しました。
http://www.tij.co.jp/product/jp/INA219
INA219使用 電流センサーモジュール(カレントセンサー)
http://akizukidenshi.com/catalog/g/gM-08221/

シャント電圧降下とバス電源電圧を計測し、電流と電力が取得できます。

100msec毎にデータ取得しました。
高速回転時が80mA程度、停止時が350mA程度です。

サンプルプログラムは以下にあります。
https://github.com/jendo1969/d2000/tree/master/Step_motor2/src
INA219.hファイルに電流センサの制御をまとめてあります。
https://github.com/adafruit/Adafruit_INA219
ここを参考に作成しました。

Intel Quark D2000 Zephyr STEPPING MOTOR


D2000でステッピングモータを回しました。
バイポーラ ステッピングモーター4SM-42BYG011
http://akizukidenshi.com/catalog/g/gP-05372/
SparkFun ROB-12779 EasyDriver ステッピングモータドライバ
https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4YRY
EasyDriver – Stepper Motor Driver
https://www.sparkfun.com/products/12779
ドライバIC A3967を使用しているのでパルス出力と方向出力のみでステッピングモータを回すことができます。
ZephyrのPWMのサンプルは、”PWM_0″を対象にしています。
PWM_0は、JTAGピンと競合しているため使用できません。PWM_1を使用するようにしました。

ピンの機能割付けを行いました。
struct device *pinmux = device_get_binding(PINMUX_NAME);
PWM1_PIN(24ピン)を機能C(PWM)に設定します。
if (pinmux_pin_set(pinmux, PWM1_PIN, PINMUX_FUNC_C)) {
これでPWM_1側が使えるようになります。

電源は、DC12Vを使用しています。
65W級スイッチングACアダプター12V5A GF65I-US1250
http://akizukidenshi.com/catalog/g/gM-00510/
D200ボードには12Vから三端子レギュレータで作成したDC5Vを入力しています。
エンコーダカウントが1秒間6400カウントに調整しました。一周1600カウントなので1秒4周です。240rpmで回したことになります。

サンプルプログラムは以下にあります。
https://github.com/jendo1969/d2000/blob/master/Step_motor/src/main.c

Intel Quark D2000 Zephyr XBEE

XBeeで無線接続しました。
Arduino用プロトタイピングボード (Prototyping Shield For 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も動作しました。

通信確認は、以下のサンプルプログラムを使用しました。
https://github.com/jendo1969/d2000/tree/master/Bmc150_MAG

Intel Quark D2000 Zephyr BMC150 ACCELOMETOR

BOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150

今回は加速度計にアクセスします。

#define BMC150_I2C_ADDR 0x10
温度センサとI2Cのアドレスは同じです。
加速度の取得の前にレンジとフィルターの設定を行っています。フィルターは更新時間64ms、レンジは、±2gに設定しました。

加速度データは、0x02レジスタから2バイトづつXYZ軸の順に入っています。6バイトを一度に読み込んでいます。

温度と加速度を500ms毎に取得し、シリアル経由でパソコンに表示しました。

以下にサンプルプログラムがあります。
https://github.com/jendo1969/d2000/tree/master/Bmc150_ACC

Intel Quark D2000 Zephyr BMC150 TEMPERATURE

BOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150には、加速度センサ側に温度測定を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150

#define BMC150_I2C_ADDR 0x10
#define ACCD_TEMP_REG 0x08
I2Cアドレスが0x10 、温度値のレジスタが0x08です。

温度は、取得した数値が0の時、23℃です。数値1が0.5℃に対応しています。下が変換式はです。
temp_val = ((float)data) / 2 + 23;

1秒ごとに温度を取得し、シリアル通信USART_Aでパソコンに送りました。

数℃実際の室温より高いので校正が必要です。
BMC150 ICを触ると温度が上がるので計測はできているようです。

以下にサンプルプログラムがあります。
https://github.com/jendo1969/d2000/tree/master/Bmc150_Temp

Intel Quark D2000 Zephyr UART BY INTERRUPT

UART_Aが使用できるようになりましたが、割り込みを使用した方が、効率が良いので割り込みを使ってみます。

プロジェクトのprj.confファイルで周辺機器の設定を行います。

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_QMSI_0=y
CONFIG_UART_QMSI_0_HW_FC=n
CONFIG_UART_QMSI_0_BAUDRATE=57600

割り込みの設定CONFIG_UART_INTERRUPT_DRIVENをyにします。その他は、前と一緒です。

uart0_init(void)初期化関数で
uart_irq_callback_set(uart0_dev, uart0_isr);
割り込み関数uart0_isrを登録します。
uart_irq_rx_enable(uart0_dev);
次に受信割り込みを有効にします。

受信が入るとこの関数が呼ばれます。
static void uart0_isr(struct device *x);

int len = uart_fifo_read(uart0_dev, rx_buf, BUF_MAXSIZE);
受信データをバッファに読み出します。最後に受信文字を送信します。ループバックのサンプルになっています。

以下にサンプルがあります。
https://github.com/jendo1969/d2000/tree/master/UARTint

Intel Quark D2000 Zephyr UART

UART_Aを使用しようと思いましたが、
Zephyrには、サンプルがありません。
探したところ、以下のURLを参考にしました。
https://lists.linuxfoundation.org/pipermail/zephyr-users/2017-January/000537.html

プロジェクトのprj.confファイルで使用する周辺機器の有効無効が設定できます。

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_UART_QMSI_0=y
CONFIG_UART_QMSI_0_HW_FC=n
CONFIG_UART_QMSI_0_BAUDRATE=57600

ここでは、シリアルを使用し、割り込みは使用しない設定です。
UART_Aを使用する。
ハードウェアのハンドシェイクは行わない。
通信速度は、57600bpsとするとなっています。

通信確認にはFTDIのUSB・シリアル変換ケーブル(3.3V)を使用しました。
http://akizukidenshi.com/catalog/g/gM-05840/
これでArduinoのシールドでUARTが使用できるようになりました。サンプルは、ただ、aを送るだけのコードです。

サンプルは以下にあります。
https://github.com/jendo1969/d2000/tree/master/UART

ESP-WROOM-02 ARDUINO USE

interface 7月号の500円wifiでの記事を実践しています。
http://www.kumikomi.net/interface/contents/201707.php
ESP-WROOM-02をArduinoマイコンとして使ってみました。
http://akizukidenshi.com/catalog/g/gK-09758/
スケッチ書き込み用のUSB-USART変換には、HiLetgo FTDI FT232RL 3.3V 5.5V USB to TTL シリアル コンバーター アダプター モジュール for Arduinoを使用しました。
https://www.amazon.co.jp/HiLetgo-FT232RL-%E3%82%B3%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BF%E3%83%BC-%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC-Arduino/dp/B011QQJ034/ref=pd_sim_21_24?_encoding=UTF8&psc=1&refRID=BR9H455Y1XBDSGKT9EF4
格安で不安でしたが、Windows10で問題なく使用できました。

Arduino IDEを以下のURLからダウンロードしています。
https://www.arduino.cc/en/Main/Donate

LEDの点滅スケッチの書き込みができました。
RSTとDTR信号でリセットと書き込みモードを制御しているのでIDEには、メニューのツール→Reset Methodをnodemcuに設定する必要があります。ckのままでは書き込みが失敗します。

© 2014 Spineedge Corporation.