• 【TB作品】STM32F102C8T6单片机,PWM发生器


    硬件:
    STM32F102C8T6核心板,按键,0.96 OLED显示屏
    软件:
    1、硬件启动触发单片机输出PWM,未触发之前PWM输出为低电平。
    2、按键修改PWM的变化模式、变化时间长度、占空比上下限。
    3、输出的PWM是固定的10kHZ的。
    4、变化模式有:
    (1)占空比从低到高,再回到最低重新从低到高;
    (2)占空比从高到低,再回到最高重新从高到低;
    (3)占空比保持不变;
    变化时间可以选择有10ms到5000ms;
    占空比可以选择有0%到100%。PWM是高电平有效。

    在这里插入图片描述

    使用STM32F102C8T6实现PWM控制的项目教程

    硬件配置

    • 核心板:STM32F102C8T6
    • 按键:用于设置和修改PWM参数
    • 显示屏:0.96 OLED显示屏

    功能概述

    1. 硬件启动:触发单片机输出PWM,未触发之前PWM输出为低电平。
    2. 按键功能:修改PWM的变化模式、变化时间长度、占空比上下限。
    3. PWM输出:固定频率为10kHz。
    4. 变化模式
      • 占空比从低到高,再回到最低重新从低到高。
      • 占空比从高到低,再回到最高重新从高到低。
      • 占空比保持不变。
    5. 变化时间:可选范围为10ms到5000ms。
    6. 占空比范围:可选范围为0%到100%。

    软件实现

    1. 引入必要的头文件
    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "oled.h"
    #include "led.h"
    #include "timer.h"
    #include "key.h"
    #include "adc.h"
    
    2. 按键功能定义
    // 16个按键功能
    // 1  2  3  A
    // 4  5  6  B
    // 7  8  9  C
    // *  0  #  D
    // A 设置模式
    // B 设置时长
    // C 设置占空比min_puty
    // D 设置占空比max_puty
    // * 直接打开PWM
    // # 直接关闭PWM
    
    3. 全局变量定义
    char display_str[16];
    u8 dis_cnt = 0;
    u16 mode = 1; // 1:递增 2:递减 3:不变 4:递增递减
    u32 max_ms_time = 5000; // 在这么多时间后复原
    u16 min_puty = 15; // 占空比可以是0到100%
    u16 max_puty = 86; // 占空比可以是0到100%
    u16 start_pwm = 0; // 触发占空比生产
    
    u32 time_ms_rtc = 0; // 当前时间
    u32 time_ms_rtc_used = 0;
    u8 set_which = 0; // 0:没有设置 1:设置模式 2:设置时长 3:设置占空比min_puty 4:设置占空比max_puty
    u8 set_which_num_cnt = 0;
    u8 set_which_input_buf[6];
    
    4. 更新显示屏内容
    void update_display(void) {
        // ...显示更新逻辑...
    }
    
    5. 按键处理函数
    void process_key(u8 key) {
        // ...按键处理逻辑...
    }
    
    6. 主函数
    int main(void) {
        // ...初始化代码...
    
        while (1) {
            // ...主循环代码...
        }
    }
    
    7. 定时器中断服务程序
    void TIM4_IRQHandler(void) {
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) {
            TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
            if (start_pwm == 1) {
                time_ms_rtc++;
            }
        }
    }
    

    具体实现说明

    1. 初始化

    初始化包括设置中断优先级、延时函数初始化、关闭JTAG使能SWD模式、UART初始化、LED和OLED初始化、按键初始化、ADC初始化、定时器初始化等。

    2. 更新显示

    更新显示函数update_display负责根据当前设置的模式、时长和占空比等信息更新OLED显示屏的内容。

    3. 按键处理

    按键处理函数process_key根据按键输入修改模式、时长和占空比,并更新相应的显示内容。

    4. 主循环

    主循环中定期检查按键输入并进行相应处理,同时根据模式和当前时间调整PWM占空比。

    5. 中断处理

    定时器中断服务程序TIM4_IRQHandler在每次定时器更新中断时更新当前时间,并根据模式调整PWM占空比。

    总结

    该项目通过STM32F102C8T6核心板和0.96 OLED显示屏实现了PWM信号的生成和控制,支持通过按键设置PWM的变化模式、时长和占空比范围。该项目展示了硬件启动、按键处理、显示更新和定时器中断等多种嵌入式系统开发的基本技能。

    通过这个项目,你可以深入了解PWM信号的生成和控制方法,以及如何使用STM32微控制器和OLED显示屏进行嵌入式系统开发。希望这个教程对你的开发工作有所帮助。

  • 相关阅读:
    java基于springboot+vue的室内乒乓球室预约收费系统
    Linux应用程序的启动流程
    【数学】 4、向量的内积、外积、模长
    案例丨如何提升可视化分析能力?听听这两家企业怎么说
    安装宝塔面板(详细教程)
    【`opencv_core` 和 `opencv_imgcodecs` 是 OpenCV(开源计算机视觉库)的两个主要模块】
    高级系统架构师 考试经验分享
    2023年最佳项目管理系统推荐
    【python】(十七)python常用第三方库——yaml
    【C++】多态
  • 原文地址:https://blog.csdn.net/x1131230123/article/details/139706991