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:
Tue Oct 16 09:58:03 2018 +0000
Revision:
7:6d3ea87a81c7
Parent:
6:6b81003405dd
Child:
8:f62e19b0c76e
mdc (20181016)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DaichiArai 3:acec9ffd0ac0 1 #include "mbed.h"
DaichiArai 3:acec9ffd0ac0 2 #include "math.h"
DaichiArai 3:acec9ffd0ac0 3 #include "mdc.h"
DaichiArai 3:acec9ffd0ac0 4
DaichiArai 3:acec9ffd0ac0 5 motor::motor(int addr)
DaichiArai 3:acec9ffd0ac0 6 {
DaichiArai 3:acec9ffd0ac0 7 address = addr;
DaichiArai 3:acec9ffd0ac0 8 data[0] = 0;
DaichiArai 3:acec9ffd0ac0 9 data[1] = 0;
DaichiArai 3:acec9ffd0ac0 10 data[2] = 0;
DaichiArai 3:acec9ffd0ac0 11 data[3] = 0;
DaichiArai 7:6d3ea87a81c7 12 data_reset[0] = 0xff;
DaichiArai 7:6d3ea87a81c7 13 data_reset[1] = 0;
DaichiArai 3:acec9ffd0ac0 14 val = 1;
DaichiArai 3:acec9ffd0ac0 15 }
DaichiArai 3:acec9ffd0ac0 16
DaichiArai 3:acec9ffd0ac0 17 int motor::move(int spd){
DaichiArai 3:acec9ffd0ac0 18 if(spd == 1000){
DaichiArai 3:acec9ffd0ac0 19 md_data[0] = MOTOR_FREE;
DaichiArai 3:acec9ffd0ac0 20 spd = 0;
DaichiArai 3:acec9ffd0ac0 21 }
DaichiArai 3:acec9ffd0ac0 22 else if(spd < 0){
DaichiArai 3:acec9ffd0ac0 23 md_data[0] = MOTOR_BACK;
DaichiArai 3:acec9ffd0ac0 24 spd = abs(spd);
DaichiArai 3:acec9ffd0ac0 25 }
DaichiArai 3:acec9ffd0ac0 26 else if(spd > 0){
DaichiArai 3:acec9ffd0ac0 27 md_data[0] = MOTOR_FORWARD;
DaichiArai 3:acec9ffd0ac0 28 }
DaichiArai 3:acec9ffd0ac0 29 else if(spd == 0){
DaichiArai 3:acec9ffd0ac0 30 md_data[0] = MOTOR_STOP;
DaichiArai 3:acec9ffd0ac0 31 spd = 0;
DaichiArai 3:acec9ffd0ac0 32 }
DaichiArai 3:acec9ffd0ac0 33
DaichiArai 3:acec9ffd0ac0 34 md_data[1] = spd;
DaichiArai 3:acec9ffd0ac0 35
DaichiArai 3:acec9ffd0ac0 36 int val = i2c.write(address,md_data,2,false);
DaichiArai 3:acec9ffd0ac0 37 return (val);
DaichiArai 3:acec9ffd0ac0 38 }
DaichiArai 7:6d3ea87a81c7 39
DaichiArai 7:6d3ea87a81c7 40 void motor::reset_enc(){
DaichiArai 7:6d3ea87a81c7 41 i2c.write(address,data_reset,2);
DaichiArai 7:6d3ea87a81c7 42 }
DaichiArai 7:6d3ea87a81c7 43
DaichiArai 6:6b81003405dd 44 int motor::count_e(){
DaichiArai 6:6b81003405dd 45 val = i2c.read(address,data,10,false);
DaichiArai 6:6b81003405dd 46 count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN];
DaichiArai 6:6b81003405dd 47 return count;
DaichiArai 6:6b81003405dd 48 }
DaichiArai 3:acec9ffd0ac0 49
DaichiArai 3:acec9ffd0ac0 50 float motor::spd_e(){
DaichiArai 3:acec9ffd0ac0 51 val = i2c.read(address,data,10,false);
DaichiArai 3:acec9ffd0ac0 52 spd = ((data[SPD_MINUS])?(-1):(1))*((double)(data[SPD_H])+((double)data[SPD_M]/100)+((double)data[SPD_L]/10000));
DaichiArai 3:acec9ffd0ac0 53 return spd;
DaichiArai 3:acec9ffd0ac0 54 }
DaichiArai 3:acec9ffd0ac0 55 float motor::angle_e(){
DaichiArai 3:acec9ffd0ac0 56 val = i2c.read(address,data,10,false);
DaichiArai 3:acec9ffd0ac0 57 count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN];
DaichiArai 5:3693a9e7b2ad 58 return((data[ANGLE_MINUS])?(-1):(1))*((double)(data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000)+count*6.28);
DaichiArai 3:acec9ffd0ac0 59 }
DaichiArai 3:acec9ffd0ac0 60
DaichiArai 3:acec9ffd0ac0 61 void motor::read(){
DaichiArai 3:acec9ffd0ac0 62 val = i2c.read(address,data,10,false);
DaichiArai 3:acec9ffd0ac0 63 spd = ((data[SPD_MINUS])?(-1):(1))*((double)(data[SPD_H])+((double)data[SPD_M]/100)+((double)data[SPD_L]/10000));
DaichiArai 3:acec9ffd0ac0 64 count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN];
DaichiArai 5:3693a9e7b2ad 65 angle = ((data[ANGLE_MINUS])?(-1):(1))*((double)(data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000));
DaichiArai 3:acec9ffd0ac0 66 }