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を使用してプロテウスに値を表示してください助けてください