![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
aa
main.cpp
- Committer:
- tktats_892476
- Date:
- 2018-09-03
- Revision:
- 0:5aefd5111bda
File content as of revision 0:5aefd5111bda:
#include "mbed.h" PwmOut V1(D2); PwmOut V2(D3); PwmOut V3(D4); PwmOut V4(D5); PwmOut V5(D6); PwmOut V6(D7); AnalogIn J1(A1); AnalogIn J2(A2); AnalogIn J3(A0); DigitalOut Led(LED1); Serial pc(D1, D0); Ticker cnt; bool CntFlag=false; bool PiFlag=false; float Duty[7]={0.0f,0.5f,0.0f,0.3f,0.0f,0.0f,0.0f}; float j[4]={0.0f,0.0f,0.0f,0.0f}; float jref[4]={0.0f,0.45f,0.8f,0.7f}; float e[4]={0.0f,0.0f,0.0f,0.0f}; float eSum[4]={0.0f,0.0f,0.0f,0.0f}; float Kp[4]={0.0f,0.1f,4.0f,1.0f}; float Ki[4]={0.0f,1.0f,0.1f,0.01f}; void DutySet(void){ for(int i=0;i<6;i++){ if(Duty[i+1]>1.0f){ Duty[i+1]=1.0f; } if(Duty[i+1]<0.0f){ Duty[i+1]=0.0f; } pc.printf("%1.3f,",Duty[i+1]); } V1=Duty[1]; V2=Duty[2]; V3=Duty[3]; V4=Duty[4]; V5=Duty[5]; V6=Duty[6]; } void ControlFlag(void){ CntFlag=true; } int main() { pc.baud(9600); int Period=10; char order=0; V1.period_ms(Period); V2.period_ms(Period); V3.period_ms(Period); V4.period_ms(Period); V5.period_ms(Period); V6.period_ms(Period); float jrefLimit[4][2]; jrefLimit[1][0]=0.340; jrefLimit[1][1]=0.424; jrefLimit[2][0]=0.673; jrefLimit[2][1]=0.765; jrefLimit[3][0]=0.653; jrefLimit[3][1]=0.879; float pressure[4]; cnt.attach(&ControlFlag,0.001f); while(1) { if(CntFlag){ j[1]=J1.read(); j[2]=J2.read(); j[3]=J3.read(); pc.printf("J:%1.3f,%1.3f,%1.3f",j[1],j[2],j[3]); pc.printf("Jref:%1.3f,%1.3f,%1.3f",jref[1],jref[2],jref[3]); if(PiFlag){ pressure[1]=0.4f; pressure[2]=0.0f; pressure[3]=0.2f; for(int i=1;i<4;i++){ e[i]=jref[i]-j[i]; eSum[i]+=e[i]; if(eSum[i]*Ki[i]>1.0f){ eSum[i]=1.0f/Ki[i]; } if(eSum[i]*Ki[i]<-1.0f){ eSum[i]=-1.0f/Ki[i]; } pressure[i]+=Kp[i]*e[i]+Ki[i]*eSum[i]; ; Duty[2*i-1]=0.5f+pressure[i]/2.0f; Duty[2*i] =0.5f-pressure[i]/2.0f; if((i==1)||(i==3)){ Duty[2*i-1]=0.0f; Duty[2*i] =0.0f; } } } pc.printf("Duty:"); DutySet(); pc.printf("PiFlag:%i",PiFlag); if(pc.readable()){ order = pc.getc(); switch(order){ case 'q': Duty[1]+=0.01f; break; case 'a': Duty[1]-=0.01f; break; case 'w': Duty[2]=Duty[2]+0.01f; break; case 's': Duty[2]-=0.01f; break; case 'e': Duty[3]+=0.01f; break; case 'd': Duty[3]-=0.01f; break; case 'r': Duty[4]+=0.01f; break; case 'f': Duty[4]-=0.01f; break; case 't': Duty[5]+=0.01f; break; case 'g': Duty[5]-=0.01f; break; case 'y': Duty[6]+=0.01f; break; case 'h': Duty[6]-=0.01f; break; case 'u': jref[1]+=0.01f; break; case 'j': jref[1]-=0.01f; break; case 'i': jref[2]+=0.01f; break; case 'k': pc.printf(",k,,"); jref[2]-=0.01f; break; case 'o': jref[3]+=0.01f; break; case 'l': jref[3]-=0.01f; break; case 'z': PiFlag=true; break; case 'x': PiFlag=false; break; default: break; } for(int i=1;i<4;i++){ if(jref[i]<jrefLimit[i][0]){ jref[i]=jrefLimit[i][0]; } if(jref[i]>jrefLimit[i][1]){ jref[i]=jrefLimit[i][1]; } } pc.putc(order); } CntFlag=false; pc.printf("\r\n"); }//if(CntFlag) }//while(1) }//main