0

pwm信号がモーターに適用されるコードをmikrocで書きました。ここで、PWM 組み込み関数に渡されるデューティサイクルは short データ型である必要があり、私の pid 出力は float 型であるため、float を short にキャストしました。たとえば、float 値が 255 の場合、short は65535 に等しく、float 値が 100 の場合、short は 100 に等しくなります。何が間違いなのかわかりません。

以下は私のコードのみのメインおよびUART関数です

主な機能

  void main() {
  UART1_Init(9600);
  pro=5,i=0,der=0;
  setPoint=100,sel=1;
  actualOut=80;
  pOut=0,iOut=0,dOut=0;
  out=16;
  error=0,lastError=0;
  OPTION_REG=0;
  T1CON=0;
  INTCON=0;
  ADCON0=0;
  CMCON = 0x07;
  TRISC.RC0=1;
  TRISC.RC2=0;
  TRISC.RC6=0;
  PORTC=0;
  while(1){
  out = pid(actualOut);
  duty=(short)out;              out is float type and duty is short
  Uart1_Intout_ReturnInt(duty);
  UART1_Write(13); // newline
  pwm(duty);
  actualOut = feedback();

  }
  }

UART機能

 Uart1_Intout_ReturnInt(unsigned i) {
 char puf[6]; //for max 5 digits and the end-sign
 WordToStr(i, puf); // in "Conversions" library
 UART1_Write_Text(puf);
 return i;
  }

仮想端末とuartを使用してプロテウスに値を表示してください助けてください

4

1 に答える 1

0

ソリューションタイプのキャストは次の方法で行う必要があることがわかりました

unsigned short duty=(unsigned short)out;

– DCモーター

于 2015-08-19T10:42:54.543 に答える