LV8548 Motor Driver Stepper Motor Dc MOtor
Dependents: LV8548_ON_MD_Modlle_kit_DCMtr_And_STEPMtr
Diff: LV8548.h
- Revision:
- 0:04db82da014d
- Child:
- 1:e60c7c42e6fc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LV8548.h Fri Nov 16 16:45:46 2018 +0000 @@ -0,0 +1,119 @@ +/** +[LV8548.h] +Copyright (c) [2018] [YAMASHO] +This software is released under the MIT License. +http://opensource.org/licenses/mit-license.php +*/ + +#ifndef MBED_LV8548_H +#define MBED_LV8548_H + +#include "mbed.h" + +#define MAXCH (2) + +#define STEPMAX_FREQ (4800) + +/** Motor Use */ + enum DriverType { + DCMOTOR /** DC Motor x2 */ + , STEPERMOTOR /** STEPER x1 */ +}; + +enum DriverPwmMode { + FWD_OPEN, /** FWD_OPEN */ + FWD_BRAKE, /** FWD_BREAKE */ + RVS_OPEN, /** REVERS OPEN */ + RVS_BRAKE /** REVSRS BRAKE */ +}; + +enum DriverPwmOut { + OUTPUT_OFF, /* OFF */ + OUTPUT_START, /* START */ + OUTPUT_BRAKE /* BRAAKE */ +}; + +/** Motor Number */ + enum DriverMotorNumber { + MOTOR_A = 0 + , MOTOR_B = 1 + , MOTOR_MAX +}; + + +/** Motor Dirction */ + enum DriverMotorDirction { + DIR_CW = 0 + , DIR_CCW = 1 + , DIR_MAX +}; + +/** Motor Step Mode */ + enum DriverStepMode { + FULLSTEP = 0 + , HALFSTEP = 1 + , MOTORSTEP_MAX +}; + +/** Motor Step Mode */ + enum DriverPhaseStep { + STEPPHASE0 = 0, + STEPPHASE1 = 1, + STEPPHASE2 = 2, + STEPPHASE3 = 3, + STEPPHASE4 = 4, + STEPPHASE5 = 5, + STEPPHASE6 = 6, + STEPPHASE7 = 7, + STEPPHASEMAX = 8 /* 必ず8 */ +}; + +class LV8548 { +public: + LV8548(PinName in1, PinName in2, PinName in3, PinName in4, DriverType drivertype = DCMOTOR ,uint16_t baseus = 64); + PwmOut _in1,_in2,_in3,_in4; + DriverType _Drivertype; + uint16_t _baseus; +/***************************************************************************************************/ + DriverPwmMode _Pwmmode[MOTOR_MAX]; // pwmのモード FWD.OPEN FWD.BRAKE RVS.OPEN REV.BRAKE + DriverPwmOut _Pwmout [MOTOR_MAX]; // Start Stop Breke + float _PwmPeriod [MOTOR_MAX]; // ポートのPwm周波数 + float _PwmDuty [MOTOR_MAX]; // 各Motor のduty 1.0f-0.0fまで +// uint8_t _testx; + + Ticker _Lv8548BaseTimer; + + void SetDcPwmFreqency( uint8_t ch ,float Freq ); + void SetDcPwmMode( uint8_t ch ,DriverPwmMode Mode ); + void SetDcPwmDuty( uint8_t ch ,float Duty ); // 01まで + void SetDcOutPut ( uint8_t ch ,DriverPwmOut Mode ); + void SetDcMotor ( uint8_t ch ); + void SetDcMotorStop( uint8_t ch ); +/*******************************************************************************************************************/ + float _StepAngle; + float _StepDeg; // 角度 0-360度 + float _StepFreq; // 周波数 + float _TimerCounter; + volatile uint8_t _StepPhase; // Step Motorのphase + volatile uint32_t _IntTimerCount; +// volatile uint32_t _PhaseCounter; + volatile uint32_t _StepTimeCount; + volatile bool _StepOperation; // 割込内の動作状況 + volatile DriverStepMode _TargetStepMode; // 目標のStep状態 Full(0)/Half(1) + volatile DriverStepMode _NowStepMode; // 動作中のStep状態 Full(0)/Half(1) + volatile DriverMotorDirction _TragetStepDirection; // 目標のDirection Cw/Ccw + volatile DriverMotorDirction _NowStepDirection; // 動作中のDirection cw/CCW + volatile uint32_t _NowStep; // 現状のStep + volatile uint32_t _TargetStep; // ターゲットのStep + void SetStepAngle( uint16_t Angle); // 角度の設定 + void SetStepDeg ( uint16_t frequency , uint16_t deg , uint8_t Direction, uint8_t StepMode); + void SetStepTime ( uint16_t frequency , uint16_t time , uint8_t Direction, uint8_t StepMode); + void SetStepStep ( uint16_t frequency , uint16_t step , uint8_t Direction, uint8_t StepMode); + void SetStepStop ( void ); + void SetStepFree ( void ); + void SetStepMotor( void ); + void SetStepTimerInt ( void ); +}; + + +#endif