0

Mikroc で DC モーター速度制御のコードを書きましたが、ビルド中にすべての変数に対して「宣言されていない識別子」としてエラーが発生します。コードの問題を教えてください。pic18f8722を使用しました。私はJavaでコーディングしましたが、cでのコーディングはほとんどありません.変数と関数の宣言に問題はありますか?? 以下はコードです....

float pid(int actualOut){
    error=setPoint-actualOut;
    pOut=error*p;
    iOut=iOut+error*i;
    if(iOut>255)
        iOut=255;
    else if(iOut<0)
        iOut=0;
    dOut=(error-lastError)*d;
    out = pOut+iOut+dOut;
    lastError=error;
    if(out>255)
        out=255;
    else if(out<0)
        out=0;
    return out;
}

void pwm(short duty){
    short dutyCycle=duty;
    PWM1_Init(5000);
    PWM1_Start();
    PWM1_Set_Duty(dutyCycle);
    delay_ms(500);
}

Int feedback(){
    T0CON=0xC2;
    TMR0l=193;
    INTCON=0xA0;
    TMR1l=0;
    TMR1H=0;
    T1CON=0x87;
    s=1;
    while(s==1){}
    actualOut=(60*2*TMR1L)/24;
    return actualOut;
}

void interrupt(){
    T1CON=0x00;
    s=0;
}

void main() {

    float p=100,i=200,d=10;
    int setPoint=100,s=1;
    int actualOut=0;
    float pOut=0,iOut=0,dOut=0;
    float out=16;
    int error=0,lastError=0;
    short duty;

    TRISC = 1;
    TRISG = 0;


    while(1){

        float out = pid(actualOut);
        duty=(short)out;
        pwm(duty);
        int actualOut = feedback();
    }
}
4

2 に答える 2

0

のすぐ下に関数を宣言し、関数の#defineピン割り当てなどを次のpwmように記述できます。

void pwm(short);

上記の宣言はいくつかの問題を解決するかもしれませんが、私はまだ関数の戻り値の型を宣言することに取り組んでいます.

于 2016-01-14T09:42:25.963 に答える
0

PIC プロセッサを使用しているので、http: //www.microcontrollerboard.com/pic_interrupt.html を読む必要があります。これには、割り込みハンドラのセットアップ方法などの詳細が記載されています。

http://ww1.microchip.com/downloads/en/AppNotes/00937a.pdf PIC 上の PID ソフトウェアの概念について説明しています

http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en020434 には、適切なソース コードと、pic18f8722 に関するその他のドキュメントが含まれています。

ソース コード (アセンブリ内) は、特定の .inc ファイル (#include ファイル) を使用する必要があることを示しています。

アセンブリ ファイルを C ファイルに変換するプロセスは、C でのコーディングの優れた復習になります。

注: これらのファイルは長すぎてここに挿入できません

于 2015-02-14T21:00:44.170 に答える