ringBuffer26

Dependencies:   mbed

MotorControl.h

Committer:
Picmon
Date:
2020-05-18
Revision:
1:0cb065f9d55a
Parent:
0:333434a8611b

File content as of revision 1:0cb065f9d55a:

#ifndef MOTORCONTROL_H
#define MOTORCONTROL_H

#include "mbed.h"
#include <string> 

#define DEBUG


#define ED_MIN_SPEED            1000
#define ED_MAX_SPEED            3000000
#define N_MIN_SPEED             0.001
#define N_MAX_SPEED             125.000//125.0RPM

#define REV_MAX_STEPS           -2147483648
#define FWD_MAX_STEPS           2147483648

#define MIN_CURRENT             0
#define MAX_CURRENT             6000//6000mA

#define MIN_TORQUE              0
#define MAX_TORQUE              8500//N.m


#define SPACE                   0x20 
#define ACK                     0x06
#define NAK                     0x15

#define VALID_MSG_LEN           0x03

#define ML_ROTATION             5.6
#define STEPS_PER_ROTATION      1024

#define CW                      1
#define CCW                     0

#define RX_ECHO_VALID           0 
#define RX_ECHO_FAIL            1
#define RX_REGITSER_FAIL        2
#define RX_REGITSER_VALID       3
#define MSG_RESEND              4

#define REBOOT                  5

#define MSG_RETRY_COUNT         3
 
#define NOT_USED                0 
#define STOP_NO_RAMP            0
#define STOP_WITH_RAMP          1 
#define STOP_WITH_STEPS         2

#define BUFFER_SIZE             50//command message + data
#define DATA_BUFFER_SIZE        20//characters
#define DATA_ITEMS              19

////////////////////////////////////////////
// MOTOR COMMAND RESPONSE DATA STORAGE 
/////////////////////////////////////////// 
#define READ_DIG_IN                 0
#define READ_DIG_OUT                1
#define READ_CURRENT                2
#define READ_DRV_REG                3
#define READ_DRV_REG_EXT            4
#define READ_DRV_TEMP               5
#define READ_DRV_VOLTAGE            6
#define READ_DRV_WORKING_SET        7
#define READ_DRV_WORKING_SET_EXT    8
#define READ_ERROR_REG              9 
#define READ_FB_BOOST_CUR           10
#define READ_FB_STATUS              11
#define READ_FW_VERSION             12
#define READ_FW_CHECKSUM            13
#define READ_MASTER_REG             14
#define READ_MIN_CURRENT            15
#define READ_MAX_CURRENT            16
#define READ_BOOST_CURRENT          17
#define READ_NOM_CURRENT            18

#define COMMANDS_TO_TEST            10


////////////////////////////////////////////
// BAUD RATES
///////////////////////////////////////////
#define SLOW_BAUD               9600
#define MED_BAUD                115200
#define FAST_BAUD               921600
 
#define MOT_AL_PDT              0x0001//Protection Drive Thermal
#define MOT_AL_PDV              0x0002//Protection Drive Voltage
#define MOT_AL_PDC              0x0004//Protection Drive Current
#define MOT_AL_POP              0x0008//Protection Open Phase
#define MOT_AL_UNUSED1          0x0010//NOT USED
#define MOT_AL_FE               0x0020//Feedback Error    
#define MOT_AL_PCR              0x0040//Protection Current Regulation
#define MOT_AL_POT              0x0080//Protection Open Transistor
#define MOT_AL_UNUSED2          0x0100//NOT USED
#define MOT_AL_SWER             0x0200//Protection Software Error
#define MOT_AL_UNUSED3          0x0400//NOT USED
#define MOT_AL_MC               0x0800//Missing Calibration
#define MOT_AL_WDG              0x1000//Watchdog
#define MOT_AL_EEF              0x2000//EEPROM Fail
#define MOT_AL_I2T              0x4000//I2T Potection
#define MOT_AL_UNUSED4          0x8000//NOT USED

 
#define D3_BUTTON               D3
#define D4_BUTTON               D4
#define D5_BUTTON               D5
#define D6_BUTTON               D6
#define D7_BUTTON               D7
#define D8_BUTTON               D8
#define D9_BUTTON               D9
#define D10_BUTTON              D10
#define D11_BUTTON              D11
#define D12_BUTTON              D12

#define A7_OUT1                 A7
#define A6_OUT2                 A6
#define A5_OUT3                 A5

#define A4_IN1                  A4
#define A3_IN2                  A3
#define A2_IN3                  A2

#define A1_OUT                  A1
#define A0_OUT                  A0

extern DigitalIn d3_button;
extern DigitalIn d4_button;
extern DigitalIn d5_button;
extern DigitalIn d6_button;
extern DigitalIn d7_button;
extern DigitalIn d8_button;
extern DigitalIn d9_button;
extern DigitalIn d10_button;
extern DigitalIn d11_button;
extern DigitalIn d12_button;

extern DigitalOut a7_out1;
extern DigitalOut a6_out2;
extern DigitalOut a5_out3;
extern DigitalIn a4_in1;
extern DigitalIn a3_in2;
extern DigitalIn a2_in3;

extern DigitalOut a1_out;
extern DigitalOut a0_out;

extern char motData[][DATA_BUFFER_SIZE];//data only

extern char binBuffer[];
extern uint8_t cnt;
extern const string rxMsgTable[];
extern char rxMsgStore[];//received local message store
extern char mc_Tx_Buffer[];//transmitted message buffer 
extern char mc_Rx_Buffer[];//received message buffer
extern volatile unsigned char mc_Rx_Rd_Ptr;//circulare buffer read pointer
extern volatile unsigned char mc_Rx_Wr_Ptr;//circulare buffer write pointer
extern unsigned int rx_int;//received integer / character
extern volatile bool rxMsgValid;//message received flag
extern bool msgRdy;

void motEncoderISR(void);

void int2bin(int value, char* buffer, int bufferSize);

void rstPointers(void);

void readCurrent(char *array);
bool setDigOutput(uint8_t par1, char *array);
void readDigInput(char *array);
void clrRxMsg(char *array);
void motMsg_RX_ISR(void);
uint8_t getMotMsg(char *txReadCmd, char *rxRegArray);




bool set_mL(bool direction, uint32_t mL, char *array);
bool setRotMotor(bool direction, char *array);

void initBuffer(string s, char *array, char character, uint8_t size);

void dispBuffer(string s, uint8_t size, char array[]);
void dispMotReg(string s, uint8_t regSel, char regArray[9][BUFFER_SIZE]);


uint8_t procMotMsg(char *txMsg, char *rxMsg, char motReg[9][BUFFER_SIZE]);
void dispRegDec(string s, uint8_t regSel, char regArray[9][BUFFER_SIZE]);
void dispRegHex(string s, uint8_t regSel, char regArray[9][BUFFER_SIZE]);


void data2mem(uint8_t dataLoc, char destMemArray[][DATA_BUFFER_SIZE], char sourceMemArray[BUFFER_SIZE]);//for command with <CR><VALUE>  
void Init(void);

long mapI(long x, long in_min, long in_max, long out_min, long out_max);
float mapF(float in, float inMin, float inMax, float outMin, float outMax);

#endif