AiCube 试用 - 通过定时器中断实现 PWM 呼吸灯
<h1>AiCube 试用 -PWM 呼吸灯</h1><p>本文介绍了 Aiapp-ISP 仿真调试平台软件的 <strong>AiCube</strong> 工具通过定时器实现 PWM 呼吸灯的主要流程。</p>
<h2>项目介绍</h2>
<p><strong>该项目通过定时器中断实现 PWM 呼吸灯,即通过控制 PWM 占空比实现 LED 亮度调节。</strong></p>
<p>参考:51单片机利用PWM、定时器实现呼吸灯 .</p>
<h2>硬件平台</h2>
<p>硬件测试平台为基于 AI8051U-34K64 主控的 <strong>擎天柱</strong> 开发板</p>
<p><img src="data/attachment/forum/202504/10/083722uz3az4t2tss5fw2s.jpg" alt="board.jpg" title="board.jpg" /></p>
<h2>下载软件</h2>
<p><a href="https://www.stcai.com/gjrj">下载</a> 最新版 <code>AIapp-ISP</code> 软件;</p>
<p>解压并打开该软件,右侧操作界面选择并进入 <code>Keil 仿真设置</code> 标签项;</p>
<h2>仿真设置</h2>
<p><strong>选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;</strong></p>
<h2>创建项目</h2>
<p>菜单栏点击 <code>AiCube</code> 标签,进入 <code>项目创建助手</code> ;</p>
<p>选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 <code>下一步</code> ;</p>
<h2>参数配置</h2>
<p><strong>进入参数配置界面</strong></p>
<p>取消勾选 <code>CLK 时钟</code> 项;</p>
<p>勾选 <code>外设</code> - <code>USB 通用串行总线</code> 项;</p>
<p>勾选 <code>TIMER 定时器</code> - <code>TIMER0</code>,并进行相关配置,打开定时器0</p>
<p><img src="data/attachment/forum/202504/10/083809f4ts0d1lcnytef4e.jpg" alt="aicube_timer.jpg" title="aicube_timer.jpg" /></p>
<p>注意 <code>定时器周期</code> 需根据实际情况设置合适的数值和单位。</p>
<h2>生成工程</h2>
<p>点击 <code>创建项目</code> 即可获得预先配置参数的 Keil 工程。</p>
<p><strong>此时查看目标路径发现 AiCube 工具创建的工程文件,包括 Keil 文件、库文件夹等标准工程格式;</strong></p>
<p>双击打开生成的 Keil 文件,进入 <code>main.c</code> 主函数文件</p>
<p><strong>可见代码已根据 AiCube 工具的配置,提前配置完成定时器和中断初始化等函数。</strong></p>
<p><strong>编译一下直接生成的工程,确保无误。</strong></p>
<h2>代码添加</h2>
<p><strong>定义变量,以便调用</strong></p>
<pre><code>uint8 Tcount, dutyfactor, direct; // 定义 PWM周期计数、占空比、方向
sbit LED = P2^0; // 目标 PWM 输出 I/O 管脚
</code></pre>
<p>在主循环中调用 <code>breathLED()</code> 呼吸灯函数;</p>
<pre><code>void breathLED(); // 调用呼吸灯函数
void main(void)
{
SYS_Init();
while (1)
{
breathLED(); // 呼吸灯函数
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
}
}
</code></pre>
<p>添加和定义呼吸灯 <code>void breathLED()</code> 函数</p>
<pre><code>/* ---------- 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周期的当前计数周期内灯灭
}
}
</code></pre>
<p><strong>之后保存并重新编译工程。</strong></p>
<p><strong>完整工程见附件。</strong></p>
<h2>固件烧录</h2>
<p>生成的 HEX 烧录固件位于 <code>Objects</code> 文件夹下,</p>
<p>使用 Type-C 数据线连接开发板和电脑,按住 <code>P32</code> 按键的同时,短按 <code>POWER</code> 按键,</p>
<p>此时 Aiapp-ISP 软件自动识别 <code>HID</code> 设备</p>
<p><img src="data/attachment/forum/202504/10/083903u2oy10njlnlpmeze.jpg" alt="isp_writer.jpg" title="isp_writer.jpg" /></p>
<p>点击 <code>下载/编程</code> 按钮,待烧录结束,程序自动运行。</p>
<h2>效果演示</h2>
<p><strong>P20 引脚对应的 LED 呈现呼吸灯效果,从暗到亮再到暗完成 1 个周期,为 4 秒</strong></p>
<p><img src="data/attachment/forum/202504/10/083933qm3zujchihh7h317.gif" alt="PWM_breath.gif" title="PWM_breath.gif" /></p>
<h2>总结</h2>
<p>本文介绍了 Aiapp-ISP 仿真调试平台软件的 <strong>AiCube</strong> 工具实现 PWM 呼吸灯的主要流程,为 STC 系列单片机的快速开发和应用提供了参考。</p>
<p><a href="forum.php?mod=attachment&aid=92589" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:PWM_breath_LED.zip</a></p>
感谢您对 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 工具的高效性和便捷性,为嵌入式开发提供了强有力的支持。希望本文能为您的开发工作提供参考和帮助。
[本文内容由国芯人工智能辅助生成,仅供参考]
页:
[1]