2015-02-14 2 views
0

Я написал код для управления скоростью двигателя постоянного тока в Mikroc Но во время сборки он дает ошибку как «необъявленный идентификатор» для всех переменных. Может ли кто-нибудь помочь мне в чем проблема в коде. я использовал pic18f8722. Я сделал кодирование в Java, но очень мало кодирования в c Есть ли проблема в объявлении переменных и функций? Ниже приведен код ....Объявление функции в Mikroc

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(); 
    } 
} 
+0

Казалось бы, вам не хватает нескольких вещей. Как список '# include' и некоторые объявления переменных. И вы знаете, когда вы это делаете: 'error = setPoint-actualOut' в функции' pid', что 'main()' объявляет 'setPoint', не означает, что он магически существует как допустимый идентификатор в' pid() ', right ? Исправительная книга на C объяснит все это. – WhozCraig

+0

Этот код написан на Mikroc для микроконцеллеров pic. Нет необходимости в #include – user4380889

+0

Фантастический. Обновите теги вопросов, чтобы включить определенную платформу, а вторая половина моего предыдущего комментария все еще стоит. – WhozCraig

ответ

0

с момента работы с процессором PIC, вы должны прочитать: http://www.microcontrollerboard.com/pic_interrupt.html , который подробно описывает, как установить обработчик прерываний и т.д.

http://ww1.microchip.com/downloads/en/AppNotes/00937a.pdf который обсуждает концепции программного обеспечения PID на PIC

http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en020434 , который содержит соответствующий исходный код и другую документацию относительно pic1 8f8722

Исходный код (в сборке) показывает, что необходимо использовать определенные .inc файлы (#include files).

Процесс преобразования файлов сборки в C файлов будет отличный освежитель на кодирование в C

Примечание: эти файлы являются слишком долго, чтобы вставить здесь

0

Вы объявляете функцию чуть ниже распределение #define и пин-код и т.д. для функции pwm вы можете написать:

void pwm(short); 

Вышеуказанное заявление может решить некоторые но я все еще работаю над объявлением возвращаемого типа функций.

Смежные вопросы