久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1209|回復: 4
收起左側

模糊PID在單片機里面的實現

[復制鏈接]
ID:956669 發表于 2025-3-5 23:26 | 顯示全部樓層 |閱讀模式
50黑幣
我現在想在單片機里面實現模糊控制pid,模糊規則我在matlab里面制定好了,怎么用到單片機.c文件里了;還有一個問題,如果我后面想加GA遺傳算法去優化模糊規則,有應該怎么辦,求大神們詳細指點一下,萬分感謝

回復

使用道具 舉報

ID:86450 發表于 2025-3-7 08:53 | 顯示全部樓層
我也想知道
回復

使用道具 舉報

ID:446156 發表于 2025-3-7 09:13 | 顯示全部樓層
我用串級PID已經大殺四方了,模糊PID沒實戰過
回復

使用道具 舉報

ID:1079566 發表于 2025-3-7 18:20 | 顯示全部樓層
問了下AI: 實現模糊邏輯有一個C++開源庫. 要使用到stm32fxxx里不容易.
下載并包含 FuzzyLite:
從 FuzzyLite GitHub 獲取庫并包含在你的項目中。( github/fuzzylite/fuzzylite )


在STM32中集成FuzzyLite實現模糊邏輯控制,需結合硬件特性與庫的C++特性進行適配。以下是關鍵步驟與技術要點:

‌一、硬件與工具鏈配置‌
‌啟用C++支持‌

在Keil MDK或STM32CubeIDE中,需勾選C++編譯選項(如AC6編譯器支持C++11)‌。
鏈接時添加-lstdc++參數,確保C++標準庫正常調用‌37。
‌外設初始化‌

使用STM32CubeMX配置必要外設(如ADC采集輸入、PWM輸出控制信號),生成HAL庫基礎工程‌。
‌二、FuzzyLite庫的C接口封裝‌
‌創建C兼容接口‌

cpp
Copy Code
// fuzzy_wrapper.h
#ifdef __cplusplus
extern "C" {
#endif

void* fl_init_controller();
void fl_set_input(void* controller, float error, float delta_error);
float fl_compute_output(void* controller);
void fl_release_controller(void* controller);

#ifdef __cplusplus
}
#endif
‌封裝C++對象‌

cpp
Copy Code
// fuzzy_wrapper.cpp
#include "fuzzylite/FuzzyEngine.h"

extern "C" {
    void* fl_init_controller() {
        auto* engine = new fl::FuzzyEngine();
        // 配置隸屬函數與規則庫(參考‌:ml-citation{ref="1" data="citationList"}中的模糊化步驟)
        return static_cast<void*>(engine);
    }
    // 其他接口實現...
}
‌三、模糊控制器實現‌
‌輸入模糊化‌

定義誤差(Err)與誤差變化率(dErr)的隸屬函數,如“負大(NB)”、“零(ZO)”、“正大(PB)”‌12。
示例代碼片段:
cpp
Copy Code
fl::InputVariable* error = new fl::InputVariable;
error->addTerm(new fl::Triangle("NB", -1.0, -0.5, 0.0));
error->addTerm(new fl::Triangle("ZO", -0.5, 0.0, 0.5));
error->addTerm(new fl::Triangle("PB", 0.0, 0.5, 1.0));
‌規則庫設計‌

基于經驗或仿真設計控制規則,如:
IF Err is NB AND dErr is NB THEN Output is PB‌12。
‌解模糊方法‌

使用重心法(Centroid)或最大隸屬度法,輸出精確控制量‌12。
‌四、工程集成與優化‌
‌代碼結構管理‌

將封裝后的C接口文件(.h/.cpp)加入工程,并通過頭文件聲明供主程序調用‌73。
主循環中調用示例:
c

void* controller = fl_init_controller();
float err = read_sensor() - target_value;
float d_err = err - prev_err;
fl_set_input(controller, err, d_err);
float output = fl_compute_output(controller);
set_pwm(output);
‌內存優化‌

避免動態內存分配:在fl_init_controller()中使用靜態內存池或預分配對象‌43。
關閉C++異常處理(通過編譯器選項-fno-exceptions)‌3。
‌實時性保障‌

限制模糊推理計算時間,確保在控制周期內完成(如1ms內)‌12。
‌五、調試與驗證‌
‌日志輸出‌

通過串口重定向printf輸出中間變量(如隸屬度、規則激活強度)‌34。
‌參數調優‌

根據實際響應調整隸屬函數范圍與規則權重,結合階躍響應測試優化穩態精度與超調量‌12。


具體, 你可以先看一下這個開源庫, 看細問一個DEEPSEEK.
回復

使用道具 舉報

ID:1150263 發表于 2025-5-12 16:16 | 顯示全部樓層
咱們兩個需求是一樣的,可以加好友共同討論嗎,我用的是f103如果想把這個遺傳算法加進去可能實現不了,我目前的方案是在matlab離線優化好參數,在單片機里面在線調整KP KI KD
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 操操操日日日 | 国产天堂av | 日产精品久久久一区二区 | 久久久精品 | 国产激情一区二区三区 | 草草视频在线 | 色哟哟精品观看 | 亚洲精品久久久 | 色综合久久天天综合网 | 国产极品国产极品 | 亚洲日本视频 | 超碰在线观看免费 | 中文字幕免费在线看线人动作大片 | 欧美日韩亚洲国产 | 天堂中文av | 日韩av在线不卡 | 国产视频一二区 | 成人深夜视频 | 国产精品黄色 | 国产成人三级一区二区在线观看一 | 深夜福利视频在线观看 | 日韩午夜片 | 国产精品久久久久久久久久久久午夜片 | 手机av在线免费观看 | 久久免费看视频 | 久久国产影院 | 亚洲欧美日韩国产精品 | 亚色视频 | 97福利视频| 久久亚洲国产 | 午夜在线视频观看日韩17c | 亚洲性视频 | 五月婷婷婷| 成人午夜毛片 | 黄色一级视频网站 | 久久久二区 | 国产黄色免费看 | 欧美激情自拍 | 日韩中文字幕一区二区三区 | 丁香六月激情 | 欧美a一级 |