Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
A3921_2p.cpp@0:99d974f5780a, 2021-07-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |