0

我在 Mikroc 中编写了用于直流电机速度控制的代码,但在构建过程中,它为所有变量提供了“未声明标识符”的错误。任何人都可以帮助我代码中的问题是什么。我用的是 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

由于您使用 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 回答
0

#define您在函数和引脚分配等下方声明函数,pwm您可以将其编写为:

void pwm(short);

上述声明可能会解决一些问题,但我仍在努力声明函数的返回类型。

于 2016-01-14T09:42:25.963 回答