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.
Dependencies: mbed SpeedController
ccheck.cpp
- Committer:
- aoikoizumi
- Date:
- 2019-09-02
- Revision:
- 1:798a41fa6515
- Parent:
- dcheck.cpp@ 0:112e277bd7f2
File content as of revision 1:798a41fa6515:
//モーターの角速度(x)とduty比(y)の関係を //y=Cx+Dであると近似した時の、定数Cを決定するためのプログラム //別プログラムで求めたdを使い傾きCを決定する //入力はTera Termで行う #include "mbed.h" #include "EC.h" //Encoderライブラリをインクルード #include "SpeedController.h" #define RESOLUTION 2048//分解能 #define BASIC_SPEED 20//目標角速度、一番使う速度帯におおよそ合わせるが吉 // #define TEST_DUTY 0.3 Ec4multi EC_kagawa(PA_5,PC_9,RESOLUTION); SpeedControl kagawa(PB_9,PB_8,50,EC_kagawa); Ec4multi EC_tokusima(PA_15,PA_14,RESOLUTION); SpeedControl tokusima(PC_7,PA_6,50,EC_tokusima); Ec4multi EC_kouchi(PC_13,PB_7,RESOLUTION); SpeedControl kouchi(PA_9,PB_6,50,EC_kouchi); Ec4multi EC_ehime(PC_2,PC_3,RESOLUTION); SpeedControl ehime(PB_3,PA_10,50,EC_ehime); Serial pc(USBTX,USBRX); Ticker motor_tick; /*void calOmega(){ motor.CalOmega(); //角速度計算用 } */ int main(void){ // motor_tick.attach(calOmega,0.05); kagawa.period_us(50); tokusima.period_us(50); kouchi.period_us(50); ehime.period_us(50); double kagawa_Cf=0,kagawa_Cb=0; double tokusima_Cf=0,tokusima_Cb=0; double kouchi_Cf=0,kouchi_Cb=0; double ehime_Cf=0,ehime_Cb=0; kagawa.setPDparam(0,0.0); //PIDの係数を設定 tokusima.setPDparam(0,0.0); //PIDの係数を設定 kouchi.setPDparam(0,0.0); //PIDの係数を設定 ehime.setPDparam(0,0.0); //PIDの係数を設定 int loop_time=0; double target_kagawa=0,target_tokusima=0,target_kouchi=0,target_ehime=0; bool print=false; while(1){ loop_time++; if(target_kagawa==0) kagawa.stop(); else kagawa.Sc(target_kagawa); if(target_tokusima==0) tokusima.stop(); else tokusima.Sc(target_tokusima); if(target_kouchi==0) kouchi.stop(); else kouchi.Sc(target_kouchi); if(target_ehime==0) ehime.stop(); else ehime.Sc(target_ehime); kagawa.setEquation(kagawa_Cf,0,kagawa_Cb,0); //求めたDの値を設定 tokusima.setEquation(tokusima_Cf,0,tokusima_Cb,0); //求めたDの値を設定 kouchi.setEquation(kouchi_Cf,0,kouchi_Cb,0); //求めたDの値を設定 ehime.setEquation(ehime_Cf,0,ehime_Cb,0); //求めたDの値を設定 if(pc.readable()){ char sel=pc.getc(); if(sel=='s'){ kagawa.stop(); tokusima.stop(); kouchi.stop(); ehime.stop(); } else if(sel=='e'){ pc.printf("kagawa_Cf"); if(sel=='i')kagawa_Cf+=0.002; //e->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&kagawa_Cf>0)kagawa_Cf-=0.002; //e->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",kagawa_Cf); } else if(sel=='d'){ pc.printf("kagawa_Cb"); if(sel=='i')kagawa_Cb+=0.002; //e->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&kagawa_Cf>0)kagawa_Cb-=0.002; //e->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",kagawa_Cf); }else if(sel=='r'){ pc.printf("tokusima_Cf"); if(sel=='i')tokusima_Cf+=0.002; //r->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&tokusima_Cf>0)tokusima_Cf-=0.002; //r->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",tokusima_Cf); } else if(sel=='f'){ pc.printf("tokusima_Cb"); if(sel=='i')tokusima_Cb+=0.002; //f->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&tokusima_Cf>0)tokusima_Cb-=0.002; //f->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",tokusima_Cb); }else if(sel=='t'){ pc.printf("kouchi_Cf"); if(sel=='i')kouchi_Cf+=0.002; //t->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&kouchi_Cf>0)kouchi_Cf-=0.002; //t->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",kouchi_Cf); } else if(sel=='g'){ pc.printf("kouchi_Cb"); if(sel=='i')kouchi_Cb+=0.002; //g->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&kouchi_Cf>0)kouchi_Cb-=0.002; //g->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",kouchi_Cb); }else if(sel=='y'){ pc.printf("ehime_Cf"); if(sel=='i')ehime_Cf+=0.002; //t->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&ehime_Cf>0)ehime_Cf-=0.002; //t->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",ehime_Cf); } else if(sel=='h'){ pc.printf("ehime_Cb"); if(sel=='i')ehime_Cb+=0.002; //g->iを押すとCfがo.o02ずつあがる else if(sel=='m'&&ehime_Cf>0)ehime_Cb-=0.002; //g->mを押すとCfがo.o02ずつさがる pc.printf("duty=%f\r\n",ehime_Cb); }else if(sel=='p'){ print=!print; //pを押すと表示を停止/再開する }else if(sel=='i'){ target_kagawa=1*BASIC_SPEED; target_tokusima=1*BASIC_SPEED; target_kouchi=-1*BASIC_SPEED; target_ehime=-1*BASIC_SPEED; }else if(sel=='m'){ target_kagawa=1*BASIC_SPEED; target_tokusima=1*BASIC_SPEED; target_kouchi=-1*BASIC_SPEED; target_ehime=-1*BASIC_SPEED; }else if(sel=='k'){ target_kagawa=1*BASIC_SPEED; target_tokusima=1*BASIC_SPEED; target_kouchi=-1*BASIC_SPEED; target_ehime=-1*BASIC_SPEED; }else if(sel=='j'){ target_kagawa=1*BASIC_SPEED; target_tokusima=1*BASIC_SPEED; target_kouchi=-1*BASIC_SPEED; target_ehime=-1*BASIC_SPEED; } } if(loop_time%1000==0){ if(print) pc.printf("%.2f %.2f %.2f %.2f\r\n",EC_kagawa.getOmega(),EC_tokusima.getOmega(),EC_kouchi.getOmega(),EC_ehime.getOmega()); } } }