はじめに
秋葉原ロボット部の有志で、Milk-v Duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。
Milk-v Duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。
- CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
- 最高1 GHzで動作するデュアルRV64コア
- 64 MBのラム
- オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能
Wiringxを使うと、様々な外部機器の制御が可能です。
この記事では、サーボモータの制御を紹介します。
DF9GMSとは
DGF9GMSサーボモーターは、DFROBOT社から販売されている360度回転可能なモーターです。
https://www.dfrobot.com/product-1579.html
ホームページ掲載のスペックは以下の通り
- 動作電圧: 3.5 - 6.0V
- 入力すべ気電圧: 4.8V ~ 6.0V
- Dead Zone Width: 5usec
- 動作速度: 0.12秒/60度 (4.8V no load)
- Stall Torque: 1.2kg/cm (4.8V), 1.6kg/cm (6.0V)
- Neutral Location: 1500us
- 配線:
茶: GND
赤: 電源[+]
オレンジ: 制御信号 - ケーブル長: 250mm
- 温度範囲: -30°C to + 60°C
- 外形寸法: 22.6 x 12.2 x 30 mm /0.89x0.48x1.18インチ
- 重量: 9±1g
容易に入手できるSG90でも、動作できそうです。
サーボモータの接続
「dfgms.c」を参照すると、
#include <stdio.h>
#include <unistd.h>
#include <wiringx.h>
/*
Duo
------------------------------------------
PWM operation at a fixed frequency clock of 100MHz, writing Period in units of nanoseconds.
DF9GMS 360-degree PWM Duty Cycle
------------------------------------------
0.4ms - 1.4ms CW deceleration
1.5ms Stop
1.6ms - 3ms CCW acceleration
*/
static int PWM_PIN = 4; // PWM5@GP4
とありますので、PWM5に相当するGPIO19に信号制御の線を接続します。
サーボモーターは5 Vで動作しますので、「VSYS」に接続します。
GNDはGNDに接続します。
サーボ動作プログラムのビルド
まず、Milk-v Duoアドベントカレンダー
https://qiita.com/advent-calendar/2023
のシリーズ2の3日の
「Milk-v Duoのクロスコンパイル環境をWSL上に作成して、Gitで公開されているプログラムを動かしてみる」
に従って開発環境を構築してください。
使用するプログラムは
https://github.com/milkv-duo/duo-examples
にあります。
「duo-examples」ディレクトリに移動したら、以下のコマンドで「df9gms」ディレクトリで、プログラムをビルドします。
$ cd df9gms
$ make it
「ls」で生成したファイルを確認します。
$ ls
df9gms df9gms.c df9gms.o Makefile
Milk-vに「df9gms」を転送します。
「df9gms」ファイルのあるディレクトリで、「./df9gms」と入力すると、サーボモータが回転し、以下のような画面表示が現れます。
[root@milkv-duo]~# ./df9gms
Duty: 10000
Duty: 20000
Duty: 30000
...
Duty: 280000
Duty: 290000
Duty: 300000
WiringXライブラリのおかげで、容易に制御可能となりました。
様々な動きをさせるための、母艦でプログラムの作成とビルド、ファイル転送の一連の操作は、面倒です。
Milk-v Duo上で操作が完結する、PythonやTinyccでプログラムが作成できると作業がはかどりそうです。
おわりに
Milk-v DuoのGPIOにサーボモーターを直接接続して、プログラムで制御することが可能になりました。
Milk-v Duoを自作ロボットの制御基板として利用可能です。
参考 https://milkv.io/docs/duo/application-development/sensor-demo