Ryusuke Ihashi / A3921_2p
Committer:
Ryu_25_MIC_512
Date:
Sat Jul 03 10:01:53 2021 +0000
Revision:
0:99d974f5780a
Child:
1:3ea68f4a0556
upload;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ryu_25_MIC_512 0:99d974f5780a 1 //**********************
Ryu_25_MIC_512 0:99d974f5780a 2 // A3921_2p.cpp for mbed
Ryu_25_MIC_512 0:99d974f5780a 3 //
Ryu_25_MIC_512 0:99d974f5780a 4 // (C)Copyright 2021 All rights reserved by R.Ihashi
Ryu_25_MIC_512 0:99d974f5780a 5 //**********************
Ryu_25_MIC_512 0:99d974f5780a 6
Ryu_25_MIC_512 0:99d974f5780a 7 #include "A3921_2p.h"
Ryu_25_MIC_512 0:99d974f5780a 8
Ryu_25_MIC_512 0:99d974f5780a 9 A3921_2p::A3921_2p(PinName pwm_l, PinName phase):
Ryu_25_MIC_512 0:99d974f5780a 10 PWM_L(pwm_l),
Ryu_25_MIC_512 0:99d974f5780a 11 PHASE(phase)
Ryu_25_MIC_512 0:99d974f5780a 12 {
Ryu_25_MIC_512 0:99d974f5780a 13 reverse = false;
Ryu_25_MIC_512 0:99d974f5780a 14 duty = 0;
Ryu_25_MIC_512 0:99d974f5780a 15 period = 0.001;
Ryu_25_MIC_512 0:99d974f5780a 16 PWM_L.period(period);
Ryu_25_MIC_512 0:99d974f5780a 17 }
Ryu_25_MIC_512 0:99d974f5780a 18
Ryu_25_MIC_512 0:99d974f5780a 19 A3921_2p::~A3921_2p(){
Ryu_25_MIC_512 0:99d974f5780a 20 PWM_L.pulsewidth_us(0);
Ryu_25_MIC_512 0:99d974f5780a 21 PHASE = 1;
Ryu_25_MIC_512 0:99d974f5780a 22
Ryu_25_MIC_512 0:99d974f5780a 23 }
Ryu_25_MIC_512 0:99d974f5780a 24
Ryu_25_MIC_512 0:99d974f5780a 25 void A3921_2p::SetPeriod(float p){
Ryu_25_MIC_512 0:99d974f5780a 26 period = p;
Ryu_25_MIC_512 0:99d974f5780a 27 PWM_L.period(period);
Ryu_25_MIC_512 0:99d974f5780a 28 }
Ryu_25_MIC_512 0:99d974f5780a 29
Ryu_25_MIC_512 0:99d974f5780a 30 void A3921_2p::SetEnable(bool mode){
Ryu_25_MIC_512 0:99d974f5780a 31 enable = mode;
Ryu_25_MIC_512 0:99d974f5780a 32 }
Ryu_25_MIC_512 0:99d974f5780a 33
Ryu_25_MIC_512 0:99d974f5780a 34 void A3921_2p::SetReverse(bool mode){
Ryu_25_MIC_512 0:99d974f5780a 35 reverse = mode;
Ryu_25_MIC_512 0:99d974f5780a 36 }
Ryu_25_MIC_512 0:99d974f5780a 37
Ryu_25_MIC_512 0:99d974f5780a 38 void A3921_2p::SetPulseWidth(float t){// -period <= t <= period
Ryu_25_MIC_512 0:99d974f5780a 39 bool sign = true;
Ryu_25_MIC_512 0:99d974f5780a 40
Ryu_25_MIC_512 0:99d974f5780a 41 if(t > period)t = period; //周期を超えないように制限
Ryu_25_MIC_512 0:99d974f5780a 42 else if(t < -period)t = -period;//周期を超えないように制限
Ryu_25_MIC_512 0:99d974f5780a 43
Ryu_25_MIC_512 0:99d974f5780a 44 duty = int(1000.0 * (t/period));//Duty比を計算
Ryu_25_MIC_512 0:99d974f5780a 45
Ryu_25_MIC_512 0:99d974f5780a 46 if(t < 0.0f){ //マイナスだったらfalse
Ryu_25_MIC_512 0:99d974f5780a 47 sign = false;
Ryu_25_MIC_512 0:99d974f5780a 48 t=-t;
Ryu_25_MIC_512 0:99d974f5780a 49 }
Ryu_25_MIC_512 0:99d974f5780a 50
Ryu_25_MIC_512 0:99d974f5780a 51 PHASE = reverse ^ sign; //回転方向を指定
Ryu_25_MIC_512 0:99d974f5780a 52 PWM_L.pulsewidth((float)enable*t);//パルスを出力
Ryu_25_MIC_512 0:99d974f5780a 53 }
Ryu_25_MIC_512 0:99d974f5780a 54
Ryu_25_MIC_512 0:99d974f5780a 55 void A3921_2p::SetPulseWidth_us(int t){
Ryu_25_MIC_512 0:99d974f5780a 56 SetPulseWidth((float)t/1000000);
Ryu_25_MIC_512 0:99d974f5780a 57 }
Ryu_25_MIC_512 0:99d974f5780a 58
Ryu_25_MIC_512 0:99d974f5780a 59 void A3921_2p::SetDuty(int x){
Ryu_25_MIC_512 0:99d974f5780a 60 SetPulseWidth((float)x * period / 1000.0f);
Ryu_25_MIC_512 0:99d974f5780a 61 }
Ryu_25_MIC_512 0:99d974f5780a 62
Ryu_25_MIC_512 0:99d974f5780a 63 int A3921_2p::GetDuty(){
Ryu_25_MIC_512 0:99d974f5780a 64 return duty;
Ryu_25_MIC_512 0:99d974f5780a 65 }
Ryu_25_MIC_512 0:99d974f5780a 66
Ryu_25_MIC_512 0:99d974f5780a 67 int A3921_2p::GetPulseWidth_us(){
Ryu_25_MIC_512 0:99d974f5780a 68 return GetPulseWidth() * 1000000;
Ryu_25_MIC_512 0:99d974f5780a 69 }
Ryu_25_MIC_512 0:99d974f5780a 70
Ryu_25_MIC_512 0:99d974f5780a 71 float A3921_2p::GetPulseWidth(){
Ryu_25_MIC_512 0:99d974f5780a 72 float pluse;
Ryu_25_MIC_512 0:99d974f5780a 73 pluse = (float)duty/1000.0f * period;
Ryu_25_MIC_512 0:99d974f5780a 74 return fabs(pluse);
Ryu_25_MIC_512 0:99d974f5780a 75 }
Ryu_25_MIC_512 0:99d974f5780a 76
Ryu_25_MIC_512 0:99d974f5780a 77 float A3921_2p::GetPeriod(){
Ryu_25_MIC_512 0:99d974f5780a 78 return period;
Ryu_25_MIC_512 0:99d974f5780a 79 }
Ryu_25_MIC_512 0:99d974f5780a 80
Ryu_25_MIC_512 0:99d974f5780a 81 bool A3921_2p::GetEnable(){
Ryu_25_MIC_512 0:99d974f5780a 82 return enable;
Ryu_25_MIC_512 0:99d974f5780a 83 }
Ryu_25_MIC_512 0:99d974f5780a 84
Ryu_25_MIC_512 0:99d974f5780a 85 bool A3921_2p::GetReverse(){
Ryu_25_MIC_512 0:99d974f5780a 86 return reverse;
Ryu_25_MIC_512 0:99d974f5780a 87 }