MDC2018のデータ量を削減したプログラムのマスタ側(メインマイコン)のプログラム

Dependents:  

モータドライバコントローラ2018(MDC)

モータドライバコントローラ(MDC2018)は、2018年に開発されたモータドライバを制御するためのドライバ回路です。

基本データ

分類名称など
CPUSTM32F303K8T6
主用途3ピン型MDの駆動とABZ相出力型インクリメンタルエンコーダの読み取り
製作年2018年
通信方式I²C(Slave)・UART

使用方法

  • ST-LINK V2にmdc_simpleのソースコードを書き込むか、main.cppを参考にしてオリジナルのファームウェアを作成して、書き込みます。
  • I²Cコネクタ経由でメインマイコンから制御します。
  • 5V駆動インクリメンタルエンコーダとモータドライバ(2018年)制御端子を接続します。

詳しくは、readme.txtを参照してください。

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?

UserRevisionLine numberNew 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 }