Ryusuke Ihashi / A3921_2p
Committer:
Ryu_25_MIC_512
Date:
Tue Apr 05 16:56:25 2022 +0000
Revision:
3:e40b9af046b8
Parent:
2:918eefae7a4e
update code

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 2:918eefae7a4e 25 void A3921_2p::SetPeriod(float val){
Ryu_25_MIC_512 2:918eefae7a4e 26 period = val;
Ryu_25_MIC_512 2:918eefae7a4e 27 PWM_L.period(period);
Ryu_25_MIC_512 2:918eefae7a4e 28 }
Ryu_25_MIC_512 2:918eefae7a4e 29
Ryu_25_MIC_512 2:918eefae7a4e 30 void A3921_2p::SetPeriod_ms(int val){
Ryu_25_MIC_512 2:918eefae7a4e 31 period = (float)val/1000;
Ryu_25_MIC_512 2:918eefae7a4e 32 PWM_L.period(period);
Ryu_25_MIC_512 2:918eefae7a4e 33 }
Ryu_25_MIC_512 2:918eefae7a4e 34
Ryu_25_MIC_512 2:918eefae7a4e 35 void A3921_2p::SetPeriod_ms(float val){
Ryu_25_MIC_512 2:918eefae7a4e 36 period = val/1000.0f;
Ryu_25_MIC_512 0:99d974f5780a 37 PWM_L.period(period);
Ryu_25_MIC_512 0:99d974f5780a 38 }
Ryu_25_MIC_512 0:99d974f5780a 39
Ryu_25_MIC_512 0:99d974f5780a 40 void A3921_2p::SetEnable(bool mode){
Ryu_25_MIC_512 0:99d974f5780a 41 enable = mode;
Ryu_25_MIC_512 0:99d974f5780a 42 }
Ryu_25_MIC_512 0:99d974f5780a 43
Ryu_25_MIC_512 0:99d974f5780a 44 void A3921_2p::SetReverse(bool mode){
Ryu_25_MIC_512 0:99d974f5780a 45 reverse = mode;
Ryu_25_MIC_512 0:99d974f5780a 46 }
Ryu_25_MIC_512 0:99d974f5780a 47
Ryu_25_MIC_512 0:99d974f5780a 48 void A3921_2p::SetPulseWidth(float t){// -period <= t <= period
Ryu_25_MIC_512 0:99d974f5780a 49 bool sign = true;
Ryu_25_MIC_512 0:99d974f5780a 50
Ryu_25_MIC_512 0:99d974f5780a 51 if(t > period)t = period; //周期を超えないように制限
Ryu_25_MIC_512 0:99d974f5780a 52 else if(t < -period)t = -period;//周期を超えないように制限
Ryu_25_MIC_512 0:99d974f5780a 53
Ryu_25_MIC_512 3:e40b9af046b8 54 duty = int(1000.0f * (t/period));//Duty比を計算
Ryu_25_MIC_512 0:99d974f5780a 55
Ryu_25_MIC_512 0:99d974f5780a 56 if(t < 0.0f){ //マイナスだったらfalse
Ryu_25_MIC_512 0:99d974f5780a 57 sign = false;
Ryu_25_MIC_512 0:99d974f5780a 58 t=-t;
Ryu_25_MIC_512 0:99d974f5780a 59 }
Ryu_25_MIC_512 0:99d974f5780a 60
Ryu_25_MIC_512 0:99d974f5780a 61 PHASE = reverse ^ sign; //回転方向を指定
Ryu_25_MIC_512 0:99d974f5780a 62 PWM_L.pulsewidth((float)enable*t);//パルスを出力
Ryu_25_MIC_512 0:99d974f5780a 63 }
Ryu_25_MIC_512 0:99d974f5780a 64
Ryu_25_MIC_512 0:99d974f5780a 65 void A3921_2p::SetPulseWidth_us(int t){
Ryu_25_MIC_512 0:99d974f5780a 66 SetPulseWidth((float)t/1000000);
Ryu_25_MIC_512 0:99d974f5780a 67 }
Ryu_25_MIC_512 0:99d974f5780a 68
Ryu_25_MIC_512 0:99d974f5780a 69 void A3921_2p::SetDuty(int x){
Ryu_25_MIC_512 0:99d974f5780a 70 SetPulseWidth((float)x * period / 1000.0f);
Ryu_25_MIC_512 0:99d974f5780a 71 }
Ryu_25_MIC_512 0:99d974f5780a 72
Ryu_25_MIC_512 1:3ea68f4a0556 73 void A3921_2p::SetDuty(float x){
Ryu_25_MIC_512 1:3ea68f4a0556 74 SetPulseWidth(x * period / 1000.0f);
Ryu_25_MIC_512 1:3ea68f4a0556 75 }
Ryu_25_MIC_512 1:3ea68f4a0556 76
Ryu_25_MIC_512 0:99d974f5780a 77 int A3921_2p::GetDuty(){
Ryu_25_MIC_512 0:99d974f5780a 78 return duty;
Ryu_25_MIC_512 0:99d974f5780a 79 }
Ryu_25_MIC_512 0:99d974f5780a 80
Ryu_25_MIC_512 0:99d974f5780a 81 int A3921_2p::GetPulseWidth_us(){
Ryu_25_MIC_512 0:99d974f5780a 82 return GetPulseWidth() * 1000000;
Ryu_25_MIC_512 0:99d974f5780a 83 }
Ryu_25_MIC_512 0:99d974f5780a 84
Ryu_25_MIC_512 0:99d974f5780a 85 float A3921_2p::GetPulseWidth(){
Ryu_25_MIC_512 0:99d974f5780a 86 float pluse;
Ryu_25_MIC_512 0:99d974f5780a 87 pluse = (float)duty/1000.0f * period;
Ryu_25_MIC_512 0:99d974f5780a 88 return fabs(pluse);
Ryu_25_MIC_512 0:99d974f5780a 89 }
Ryu_25_MIC_512 0:99d974f5780a 90
Ryu_25_MIC_512 0:99d974f5780a 91 float A3921_2p::GetPeriod(){
Ryu_25_MIC_512 0:99d974f5780a 92 return period;
Ryu_25_MIC_512 0:99d974f5780a 93 }
Ryu_25_MIC_512 0:99d974f5780a 94
Ryu_25_MIC_512 0:99d974f5780a 95 bool A3921_2p::GetEnable(){
Ryu_25_MIC_512 0:99d974f5780a 96 return enable;
Ryu_25_MIC_512 0:99d974f5780a 97 }
Ryu_25_MIC_512 0:99d974f5780a 98
Ryu_25_MIC_512 0:99d974f5780a 99 bool A3921_2p::GetReverse(){
Ryu_25_MIC_512 0:99d974f5780a 100 return reverse;
Ryu_25_MIC_512 0:99d974f5780a 101 }