MDC2018のデータ量を削減したプログラムのマスタ側(メインマイコン)のプログラム
モータドライバコントローラ2018(MDC)
モータドライバコントローラ(MDC2018)は、2018年に開発されたモータドライバを制御するためのドライバ回路です。
基本データ
分類 | 名称など |
CPU | STM32F303K8T6 |
主用途 | 3ピン型MDの駆動とABZ相出力型インクリメンタルエンコーダの読み取り |
製作年 | 2018年 |
通信方式 | I²C(Slave)・UART |
使用方法
- ST-LINK V2にmdc_simpleのソースコードを書き込むか、main.cppを参考にしてオリジナルのファームウェアを作成して、書き込みます。
- I²Cコネクタ経由でメインマイコンから制御します。
- 5V駆動インクリメンタルエンコーダとモータドライバ(2018年)制御端子を接続します。
詳しくは、readme.txtを参照してください。
readme.txt@8:f62e19b0c76e, 2019-04-11 (annotated)
- Committer:
- DaichiArai
- Date:
- Thu Apr 11 02:38:27 2019 +0000
- Revision:
- 8:f62e19b0c76e
- Parent:
- 3:acec9ffd0ac0
- Child:
- 9:a3a2fb1a3ba7
bag is fixed : 2019/04/11
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DaichiArai | 3:acec9ffd0ac0 | 1 | 1.インスタンス生成方法 |
DaichiArai | 3:acec9ffd0ac0 | 2 | class motor motorname(int address); |
DaichiArai | 3:acec9ffd0ac0 | 3 | 現在対応しているアドレスは0x20~0x40 |
DaichiArai | 3:acec9ffd0ac0 | 4 | |
DaichiArai | 3:acec9ffd0ac0 | 5 | 2.モータの駆動方法 |
DaichiArai | 3:acec9ffd0ac0 | 6 | int move(int spd); |
DaichiArai | 3:acec9ffd0ac0 | 7 | ・-127 ~ -1:モータ逆回転 |
DaichiArai | 3:acec9ffd0ac0 | 8 | ・1 ~ 127 :モータ正回転 |
DaichiArai | 3:acec9ffd0ac0 | 9 | ・0 :モータ停止(ブレーキ) |
DaichiArai | 3:acec9ffd0ac0 | 10 | ・引数無し(空白):モータフリー(何もしない) |
DaichiArai | 3:acec9ffd0ac0 | 11 | 返り値:通信結果(0:成功,1:失敗) |
DaichiArai | 3:acec9ffd0ac0 | 12 | |
DaichiArai | 3:acec9ffd0ac0 | 13 | 3.エンコーダの角度と角速度の読み取り(単位はrad基準) |
DaichiArai | 8:f62e19b0c76e | 14 | //void read(); 全ての値を読み取る(旧式).返り値なし・廃止されている |
DaichiArai | 3:acec9ffd0ac0 | 15 | float spd_e();角速度を読み取る.返り値:角速度(rad/s) |
DaichiArai | 3:acec9ffd0ac0 | 16 | float angle_e();角度を読み取る.オーバーフロー注意.返り値:角度(rad) |
DaichiArai | 3:acec9ffd0ac0 | 17 | |
DaichiArai | 3:acec9ffd0ac0 | 18 | float spd; read()かspd_e()関数が最後に呼び出された時点での角速度がこの変数に代入される |
DaichiArai | 3:acec9ffd0ac0 | 19 | int count; read()かangle_e()関数が最後に呼び出された時点での回転数がこの変数に代入される(角度の算出用のため、実用的ではない) |
DaichiArai | 3:acec9ffd0ac0 | 20 | float angle; angle_e()関数が最後に呼び出された時点での角度がこの変数に代入される(countの値も考慮されている) |
DaichiArai | 3:acec9ffd0ac0 | 21 | |
DaichiArai | 3:acec9ffd0ac0 | 22 | //サンプル---------------------------------------------------------------------- |
DaichiArai | 3:acec9ffd0ac0 | 23 | #include "mbed.h" |
DaichiArai | 3:acec9ffd0ac0 | 24 | |
DaichiArai | 3:acec9ffd0ac0 | 25 | class motor motor1(0x20); |
DaichiArai | 3:acec9ffd0ac0 | 26 | class motor motor2(0x22); |
DaichiArai | 3:acec9ffd0ac0 | 27 | |
DaichiArai | 3:acec9ffd0ac0 | 28 | int main(void){ |
DaichiArai | 3:acec9ffd0ac0 | 29 | while(1){ |
DaichiArai | 3:acec9ffd0ac0 | 30 | motor1.move(50); |
DaichiArai | 3:acec9ffd0ac0 | 31 | motor2.move(); |
DaichiArai | 3:acec9ffd0ac0 | 32 | pc.printf("motor1.spd = %.3f\t",motor1.spd_e()); |
DaichiArai | 3:acec9ffd0ac0 | 33 | pc.printf("motor1.angle = %.3f\t",motor1.angle_e()); |
DaichiArai | 3:acec9ffd0ac0 | 34 | pc.printf("motor2.spd = %.3f\t",motor2.spd_e()); |
DaichiArai | 3:acec9ffd0ac0 | 35 | pc.printf("motor2.angle = %.3f\n",motor2.angle_e()); |
DaichiArai | 3:acec9ffd0ac0 | 36 | } |
DaichiArai | 3:acec9ffd0ac0 | 37 | } |