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を参照してください。
mdc.cpp
- Committer:
- DaichiArai
- Date:
- 2018-10-09
- Revision:
- 5:3693a9e7b2ad
- Parent:
- 3:acec9ffd0ac0
- Child:
- 6:6b81003405dd
File content as of revision 5:3693a9e7b2ad:
#include "mbed.h" #include "math.h" #include "mdc.h" motor::motor(int addr) { address = addr; data[0] = 0; data[1] = 0; data[2] = 0; data[3] = 0; val = 1; } int motor::move(int spd){ if(spd == 1000){ md_data[0] = MOTOR_FREE; spd = 0; } else if(spd < 0){ md_data[0] = MOTOR_BACK; spd = abs(spd); } else if(spd > 0){ md_data[0] = MOTOR_FORWARD; } else if(spd == 0){ md_data[0] = MOTOR_STOP; spd = 0; } md_data[1] = spd; int val = i2c.write(address,md_data,2,false); return (val); } float motor::spd_e(){ val = i2c.read(address,data,10,false); spd = ((data[SPD_MINUS])?(-1):(1))*((double)(data[SPD_H])+((double)data[SPD_M]/100)+((double)data[SPD_L]/10000)); return spd; } float motor::angle_e(){ val = i2c.read(address,data,10,false); count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN]; return((data[ANGLE_MINUS])?(-1):(1))*((double)(data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000)+count*6.28); } void motor::read(){ val = i2c.read(address,data,10,false); spd = ((data[SPD_MINUS])?(-1):(1))*((double)(data[SPD_H])+((double)data[SPD_M]/100)+((double)data[SPD_L]/10000)); count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN]; angle = ((data[ANGLE_MINUS])?(-1):(1))*((double)(data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000)); }