STM32写的PID算法温度控制程序示例

这篇具有很好参考价值的文章主要介绍了STM32写的PID算法温度控制程序示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用STM32写的PID算法温度控制程序示例,该程序通过读取温度传感器的数据,并采用PID控制算法,输出PWM信号来控制加热器的工作,以实现温度的稳定控制。

#include "stm32f10x.h"

#define TIM_PERIOD  (SystemCoreClock / 1000000 - 1) // PWM周期为1us
#define PWM_CHANNEL  TIM_OCMode_PWM1
#define PWM_POLARITY TIM_OCPolarity_High

#define KP 1.0           // 比例系数
#define KI 0.1           // 积分系数
#define KD 0.01          // 微分系数
#define PID_INTERVAL 100 // PID计算间隔,单位为毫秒

double setpoint = 50.0; // 目标温度
double temperature = 0; // 当前温度
double output = 0.0;    // 控制信号

double error = 0.0;     // 偏差
double lastError = 0.0; // 上次偏差
double integral = 0.0;  // 积分项
double derivative = 0.0;// 微分项 

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef        TIM_OCInitStructure;

// 计算PID控制信号
void pidCalculate(void) {
    static unsigned long lastTime = 0;
    unsigned long now = millis();

    if (now - lastTime < PID_INTERVAL) {
        return;
    }

    // 读取温度传感器
    temperature = readTemperature();

    error = setpoint - temperature;
    integral += error;
    derivative = error - lastError;
    output = KP * error + KI * integral + KD * derivative;
    lastError = error;

    if (output > TIM_PERIOD) {
        output = TIM_PERIOD;
    }

    if (output < 0.0) {
        output = 0.0;
    }

    // 设置PWM信号输出
    TIM_OCInitStructure.TIM_Pulse = output;
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    lastTime = now;
}

// 初始化PWM输出
void pwmInit(void) {
    TIM_TimeBaseStructure.TIM_Period = TIM_PERIOD;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

    TIM_OCInitStructure.TIM_OCMode = PWM_CHANNEL;
    TIM_OCInitStructure.TIM_OCPolarity = PWM_POLARITY;
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    TIM_Cmd(TIM1, ENABLE);
}

int main(void) {
    // 初始化定时器
    TIM_DeInit(TIM1);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

    // 初始化PWM输出
    pwmInit();

    while (1) {
        pidCalculate();
    }
}

// 延时函数
void delay_ms(uint32_t ms) {
    if (ms == 0) return;
    ms *= (SystemCoreClock / 1000) / 5;
    while (ms--) {
        __NOP();
    }
}

// 获取当前的毫秒数
unsigned long millis(void) {
    static uint32_t tick = 0;
    static uint32_t lastTick = 0;

    tick = SysTick->VAL;

    if (tick > lastTick) {
        lastTick = tick;
    }

    return (lastTick * 1000) / SystemCoreClock;
}

// 读取温度传感器
double readTemperature(void) {
    // TODO:读取温度传感器的代码
}

 以上代码基于STM32F10x的单片机实现,使用了定时器来输出PWM信号,以控制加热器的加热功率。同时,该程序还实现了PID算法,并会定时读取温度传感器的数据,计算出控制信号,并更新PWM信号输出的占空比。用户可以根据具体硬件平台和温度传感器的类型,对代码进行适当的修改和调试。文章来源地址https://www.toymoban.com/news/detail-607537.html

到了这里,关于STM32写的PID算法温度控制程序示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

    智能家具系统分为两个不同版本系列: ①系列一:手机app远程控制、远程检测温湿度显示在app,(云平台)    ---------本文章 ②系列二:语音识别控制                https://blog.csdn.net/m0_59113542/article/details/123742383 步进电机及相关驱动 步进电机28BYJ48 uln2003驱动板器4相5线

    2023年04月09日
    浏览(78)
  • STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065

    STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 Proteus 仿真小实验: STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 功能: 硬件组成:STM32F103C8单片机 +LCD1602显示器+ADC220V转3.3V电路+DS18B20温度+多个按键(设置温度和水位)+继电器模拟加热+继电器模拟加水。 1.人工

    2024年02月15日
    浏览(38)
  • STM32单片机三线制PT100温度采集控制系统LCD12864显示器

    功能介绍:    

    2024年02月15日
    浏览(61)
  • 70、基于STM32单片机的蓝牙智能热水器控制系统设计温度温控水温水位检测

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、硬件框图 七、程序源码 八、资料包括 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气

    2024年02月05日
    浏览(107)
  • 【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、操作说明 本实验是温度控制的反馈控制应用。特别是,本实验讲解: 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数据以构建简单的一阶加死区时间 (FOPDT) 模型 从标准调整规则 获取 PID 控制的 参数

    2024年02月15日
    浏览(50)
  • 51单片机热水器温度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

    51单片机热水器温度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0045 本设计旨在实现一个基于51单片机的简易热水壶热水器控制仿真proteus仿真设计,具备以下功能: 1、使用温度传感器

    2024年02月09日
    浏览(44)
  • 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016

    51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 Proteus仿真小实验: 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 功能: 硬件组成:51单片机 +4位数码管+NTC热敏电阻+ADC0809+24C02存储器+按键+蜂鸣器+电机 1.通过ADC0809测量出NTC热敏电阻的阻值,然后根据阻值计算出温度。

    2024年02月08日
    浏览(46)
  • 基于wifi的温度采集与控制系统

    基于WiFi的温度采集与控制系统 项目设计报告 版   本   号: V 1 . 0 项目名称:             基于 WiFi 的温度采集与控制系统                         设计周期:                                                                                     项目

    2024年02月11日
    浏览(37)
  • 基于stm32的减速直流电机PID算法控制

    本例程采用了HAL库进行项目开发(主要使用软件CubexMX和keil5),文章末尾会有代码开源,欢迎各位对文章进行指正和探讨。         硬件组成:stm32f103c8t6最小系统板;0.96寸LED12864(I2C通讯模式);智能小车12v移动电源;25GA370直流减速电机(带霍尔编码器);JDY-31蓝牙模块

    2024年02月20日
    浏览(48)
  • 基于单片机的温度控制器系统设计

    ** 单片机设计介绍, 基于单片机的温度控制器系统设计    基于单片机的温度控制器系统是一种利用单片机来检测环境温度并控制温度的系统。它通常由以下几个部分组成: 温度传感器:用于感知环境温度的传感器。常见的温度传感器有热敏电阻(如NTC、PTC)、热电偶和数

    2024年02月04日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包