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を参照してください。

mdc.cpp

Committer:
DaichiArai
Date:
2019-06-27
Revision:
10:1bbe0d41813e
Parent:
9:a3a2fb1a3ba7

File content as of revision 10:1bbe0d41813e:

#include "mbed.h"
#include "math.h"
#include "mdc.h"

extern I2C mdc_i2c;

motor::motor(I2C &i2c, int addr): mdc_i2c(i2c)
{
    address = addr;
    data[0] = 0;
    data[1] = 0;
    data_reset[0] = 0xff;
    data_reset[1] = 0;
    val = 1;
}

int motor::move(float pwm){
    write_pwm = (int)(pwm*127);
    if(pwm == 1000){
        md_data[0] = MOTOR_FREE;
        write_pwm = 0;
    }
    else if(write_pwm < 0){
        md_data[0] = MOTOR_BACK;
        write_pwm = abs(write_pwm);
    }
    else if(write_pwm > 0){
        md_data[0] = MOTOR_FORWARD;
    }
    else if(write_pwm == 0){
        md_data[0] = MOTOR_STOP;
        write_pwm = 0;
    }
    
    md_data[1] = write_pwm;
    
    int val = mdc_i2c.write(address,md_data,2,false);
    return (val);
}

void motor::reset(){
    mdc_i2c.write(address,data_reset,2);
}

//角度を算出して角度を返す(回転数も考慮
float motor::angle(){
    val = mdc_i2c.read(address,data,2,false);
    
    count = (int)(data[0]) - 128;
    
    position_data = (int)(data[1])*3.6;
    angle_data = (float)count*36 + position_data/10;
    
    return angle_data;
}