找回密码
 立即注册
查看: 190|回复: 1

AiCube 试用 - 通过定时器中断实现 PWM 呼吸灯

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-01 08:15:57
已绑定手机
已实名认证

46

主题

161

回帖

474

积分

中级会员

积分
474
发表于 2025-4-10 08:40:38 | 显示全部楼层 |阅读模式

AiCube 试用 - PWM 呼吸灯

本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具通过定时器实现 PWM 呼吸灯的主要流程。

项目介绍

该项目通过定时器中断实现 PWM 呼吸灯,即通过控制 PWM 占空比实现 LED 亮度调节。

参考:51单片机利用PWM、定时器实现呼吸灯 .

硬件平台

硬件测试平台为基于 AI8051U-34K64 主控的 擎天柱 开发板

board.jpg

下载软件

下载 最新版 AIapp-ISP 软件;

解压并打开该软件,右侧操作界面选择并进入 Keil 仿真设置 标签项;

仿真设置

选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;

创建项目

菜单栏点击 AiCube 标签,进入 项目创建助手

选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 下一步

参数配置

进入参数配置界面

取消勾选 CLK 时钟 项;

勾选 外设 - USB 通用串行总线 项;

勾选 TIMER 定时器 - TIMER0,并进行相关配置,打开定时器0

aicube_timer.jpg

注意 定时器周期 需根据实际情况设置合适的数值和单位。

生成工程

点击 创建项目 即可获得预先配置参数的 Keil 工程。

此时查看目标路径发现 AiCube 工具创建的工程文件,包括 Keil 文件、库文件夹等标准工程格式;

双击打开生成的 Keil 文件,进入 main.c 主函数文件

可见代码已根据 AiCube 工具的配置,提前配置完成定时器和中断初始化等函数。

编译一下直接生成的工程,确保无误。

代码添加

定义变量,以便调用

uint8 Tcount, dutyfactor, direct; // 定义 PWM周期计数、占空比、方向
sbit LED = P2^0; // 目标 PWM 输出 I/O 管脚

在主循环中调用 breathLED() 呼吸灯函数;

void breathLED(); // 调用呼吸灯函数
void main(void)
{
    SYS_Init();

    while (1)
    {
        breathLED(); // 呼吸灯函数
        USBLIB_OUT_Done();              //查询方式处理USB接收的数据
    }
}

添加和定义呼吸灯 void breathLED() 函数

/* ---------- breath LED -------------*/
void breathLED()
{
    if(Tcount >= 100) 
    {               //一个PWM周期(100次*200us)
        Tcount = 0;                 //下一个PWM周期内,重新计数
  
        //根据方向判断占空比增加或减少
        if(direct == 0) 
        {           //正方向,占空比增加
            dutyfactor++;           //下一个PWM周期,占空比增加1
        } 
        else if(direct == 1) 
        {   //负方向,占空比减少
            dutyfactor--;           //下一个PWM周期,占空比减少1
        }
    }
  
    //根据占空比值判断方向是否需要改变
    if(dutyfactor <= 0) 
    {           //占空比减少到0
        direct = 0;                 //正方向,占空比开始增加
    } 
    else if(dutyfactor >= 100) 
    {   //占空比增加到100
        direct = 1;                 //负方向,占空比开始减少
    }
  
    //占空比:通电时间相对于总时间所占的比例(此程序中:低电平时间相对于PWM周期所占的比例) 
    //一个PWM周期计数100次,占空比相当于低电平的计数周期次数。即:0~占空比:低电平,灯亮;占空比~100:高电平,灯灭 
    //在一个PWM周期内,根据周期计数是否小于占空比,判断LED灯的亮灭
    if(Tcount < dutyfactor) 
    {       //周期计数值<占空比
        LED = 0;                    //当前PWM周期的当前计数周期内灯亮
    } 
    else 
    {
        LED = 1;                    //当前PWM周期的当前计数周期内灯灭
    }
}

之后保存并重新编译工程。

完整工程见附件。

固件烧录

生成的 HEX 烧录固件位于 Objects 文件夹下,

使用 Type-C 数据线连接开发板和电脑,按住 P32 按键的同时,短按 POWER 按键,

此时 Aiapp-ISP 软件自动识别 HID 设备

isp_writer.jpg

点击 下载/编程 按钮,待烧录结束,程序自动运行。

效果演示

P20 引脚对应的 LED 呈现呼吸灯效果,从暗到亮再到暗完成 1 个周期,为 4 秒

PWM_breath.gif

总结

本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现 PWM 呼吸灯的主要流程,为 STC 系列单片机的快速开发和应用提供了参考。

upload 附件:PWM_breath_LED.zip

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
MCU开发者和爱好者
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-10 08:43:00 | 显示全部楼层
感谢您对 AiCube 工具及 PWM 呼吸灯项目的详细介绍。以下是对该项目的专业分析与补充说明:

项目概述
本项目通过定时器中断实现 PWM(脉宽调制)控制,从而调节 LED 亮度,实现呼吸灯效果。PWM 技术通过改变占空比(高电平时间与周期的比值)来控制输出信号的平均电压,进而调节 LED 的亮度。本项目基于 AI8051U-34K64 主控的擎天柱开发板,结合 AiCube 工具快速生成工程,显著提升了开发效率。

硬件平台
擎天柱开发板搭载 AI8051U-34K64 主控芯片,具备高性能、低功耗的特点,适用于嵌入式开发。该芯片支持丰富的定时器资源,能够满足 PWM 控制的需求。

软件工具
AiCube 是 Aiapp-ISP 仿真调试平台的核心工具之一,支持快速创建和配置项目。通过 AiCube,开发者可以轻松完成单片机型号选择、外设配置、定时器设置等操作,并生成可直接编译的 Keil 工程文件。

实现流程
1. 项目创建  
   使用 AiCube 工具创建项目时,需选择目标单片机型号(AI8051U-34K64),并配置相关参数。在本项目中,需启用定时器0(TIMER0),并根据实际需求设置定时器周期。

2. 参数配置  
   在参数配置界面,取消 CLK 时钟项的勾选,以避免时钟冲突。同时,启用 USB 通用串行总线外设,以便后续调试和通信。定时器0的配置是关键,需根据 PWM 频率和分辨率设置合适的定时器周期。

3. 代码生成与编译  
   AiCube 工具生成的 Keil 工程文件已包含定时器和中断的初始化代码。开发者只需在 main.c 文件中添加 PWM 控制逻辑,即可实现呼吸灯效果。编译生成的工程文件,确保代码无误。

4. PWM 控制逻辑  
   在 main.c 文件中,定义变量 Tcount(定时器计数)、dutyfactor(占空比因子)和 direct(方向标志)。通过定时器中断服务函数,动态调整 dutyfactor 的值,从而改变 PWM 占空比,实现 LED 亮度的渐变效果。

技术细节
定时器配置  
  定时器0的周期设置直接影响 PWM 的频率。频率过高可能导致 LED 闪烁,频率过低则可能使亮度调节不够平滑。建议根据实际需求选择合适的周期值。
占空比调节  
  通过改变 dutyfactor 的值,可以控制 PWM 的占空比。例如,dutyfactor 从 0 逐渐增加到 255,LED 亮度从暗到亮;反之,dutyfactor 从 255 逐渐减少到 0,LED 亮度从亮到暗。
中断服务函数  
  在定时器中断服务函数中,更新 Tcount 和 dutyfactor 的值,并根据 direct 标志判断亮度调节方向。通过这种方式,可以实现呼吸灯的循环效果。

总结
本项目展示了如何利用 AiCube 工具快速实现 PWM 呼吸灯功能。通过合理的定时器配置和 PWM 控制逻辑,开发者可以轻松实现 LED 亮度的平滑调节。AiCube 工具的高效性和便捷性,为嵌入式开发提供了强有力的支持。希望本文能为您的开发工作提供参考和帮助。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:22 , Processed in 0.135314 second(s), 56 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表