冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 730|回覆: 0
打印 上一主題 下一主題

[討論] PIC18F4520

[複製鏈接]

2609

主題

0

好友

1003

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
9008
主題
2609
精華
0
積分
1003
楓幣
0
威望
980
存款
35891
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
460 小時
註冊時間
2023-1-12
最後登入
2024-12-22

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-27 06:40:56 |只看該作者 |倒序瀏覽
製作PID控制系統需要以下零件:

PIC18F4520微控制器
LCD顯示屏
電位器
PWM模組
電容
電阻
輸入感測器
輸出設備(例如電機或LED燈)


以下PIC18F4520 PID控制系統的程式碼,您可以根據您的需求進行修改和優化:

#include <xc.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"

#pragma config OSC = INTIO67
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOREN = SBORDIS
#pragma config WDT = OFF
#pragma config MCLRE = ON
#pragma config PBADEN = OFF
#pragma config LVP = OFF

#define _XTAL_FREQ 8000000

int setpoint, input, output, error, last_error, integral, derivative;
int Kp = 1, Ki = 1, Kd = 1;

void interrupt isr(void) {
    if (PIR1bits.TMR2IF) {
        PIR1bits.TMR2IF = 0;
        TMR2 = 0;
        CCPR1L = output >> 2;
        CCP1CONbits.DC1B1 = (output & 0b10) >> 1;
        CCP1CONbits.DC1B0 = output & 0b01;
    }
}

void init_pwm() {
    TRISCbits.TRISC2 = 0;
    PR2 = 199;
    T2CON = 0b00000101;
    CCP1CON = 0b00001100;
}

void init_adc() {
    TRISA = 0b00001111;
    ADCON1 = 0b00001110;
    ADCON0 = 0b00000001;
}

int read_adc(int channel) {
    ADCON0bits.CHS = channel;
    __delay_us(20);
    GO_nDONE = 1;
    while (GO_nDONE);
    return ADRESH << 8 | ADRESL;
}

void init_pid() {
    last_error = 0;
    integral = 0;
}

void calculate_pid() {
    error = setpoint - input;
    integral += error;
    derivative = error - last_error;
    last_error = error;
    output = Kp * error + Ki * integral + Kd * derivative;
}

void main() {
    OSCCONbits.IRCF = 0b111;
    LCDInit();
    init_adc();
    init_pwm();
    init_pid();
    TMR2IE = 1;
    PEIE = 1;
    GIE = 1;
    while (1) {
        setpoint = 500; // set the desired setpoint
        input = read_adc(0); // read the input from the sensor
        calculate_pid(); // calculate the PID output
        __delay_ms(20);
    }
}
[發帖際遇]: 洪嵐峰 為了與彎腰郵筒合照,花了兩小時排隊,消耗 1 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 17:28

回頂部