PWM在高频情况下,一个很好的用处就是通过控制占空比来控制输出的功率,比如控制风扇转速、LED灯的亮度等。这次就利用PWM的中断功能,动态改变脉冲的占空比,来实现呼吸灯的效果。
一、实现思路
PWM可以选择让计数器在周期结束产生中断(在周期中央对齐时,可能选择在周期中央也产生中断),并且可以在运行的时候动态地调整占空比、周期、极性等属性。所以可以在中断处理函数中动态地改变占空比以改变LED灯的亮度。
这次也将使用通道0和引脚PA0。
二、PWM设置
这里需要用到较高频率的时钟,所以选择使用主时钟经32分频后的时钟(12.5 kHz)。计数器周期为400,即输出脉冲频率为125000/400 = 312.5 Hz。同时需要使能相应的中断。
PWM的主要配置代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #define PERIOD_VALUE 400 /* 时钟选择 */ PWM->PWM_CH_NUM[0].PWM_CMR = PWM_CMR_CPRE_MCK_DIV_32; /* 启用中断 */ PWM->PWM_IER1 = PWM_IER1_CHID0; /* 周期及占空比 */ PWM->PWM_CH_NUM[0].PWM_CPRD= PWM_CPRD_CPRD(PERIOD_VALUE); PWM->PWM_CH_NUM[0].PWM_CDTY = PWM_CDTY_CDTY(0); /* 使能中断 */ NVIC_ClearPendingIRQ(PWM_IRQn); NVIC_SetPriority(PWM_IRQn, 0); NVIC_EnableIRQ(PWM_IRQn); |
三、PWM中断处理
在每个周期结束后,会产生一个中断。然后在中断处理函数中,改变占空比。需要注意的是,在PWM使能时,需要通过写入PWM占空比修改寄存器(PWM_CDTYUPD)来改变占空比。默认情况下,该修改在下一个周期生效。
为得到更好的效果,可以在两次呼吸之间设置一断间隔。
注意,需要通过读取PWM_ISR1来拉低产生的中断。中断处理函数在后面的完整代码中贴出。
关键字:SAM4E 单片机 LED呼吸 PWM
引用地址:
SAM4E单片机之旅——5、LED呼吸和PWM
推荐阅读最新更新时间:2024-03-16 15:29
PIC单片机人机接口4×4行列式键盘的工作原理
(1)单片机系统键盘原理 行列式键盘的接法比独立式键盘的接法复杂,编程实现上也会比较复杂。但是,在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,其原理图如图1所示。 实际的工程中,可能会使用PIC16C5X这种通用的可编程的键盘、显示接口器件,使用PIC16C5X单片器件就能够完成键盘输入和显示控制两种功能。 行列式键盘的工作方式是先用列线发送扫描字,然后读取行线的状态,查看是否有按键按下。键盘部分提供一种扫描的工作方式,可以和具有64个按键的矩阵键盘相连接,能对键盘不断扫描、自动消抖、自动识别按下的键,并给出编码,能对双键或n个键同时按下的情况实行保护。 在显示部分,它可以为发光二极管
[单片机]
单片机编程方案
语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、ler_541.do" target="_blank" ST ACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。
[单片机]
自学单片机难吗?单片机编程教学班怎么选?
现在我们随便拿一个智能电子产品,不管是家里电器还是玩具,又或者是飞机大炮,基本都有单片机的应用。 市场需求大到让人发指,很多人以前完全不知道单片机是什么东西,自从接触到以后激发了强烈的兴趣。 每个男人心中都有一个”钢铁侠”梦,都希望自己能通过技术去改变世界。 不过,想要达到这种程度,我觉得要从小培养以外,还要异人的天赋才行。 这几年我看了很多大佬,能力超强,其实他们也是从零基础开始,我们碰到的问题他们当初也会碰到。 千万不要被电影误导,发一场烧就能成为天才,吃一颗大力丸就能改变基因。 要想成为大佬,自己必须一步一个脚印,从基础开始,以3、5、10年的周期去看,你能坚持下去肯定也是大佬。 到那个时候,你或许会到达另一个层次,物质已经
[单片机]
基于AT89S51单片机的冲床控制器设计
系统硬件配置以AT89S51单片机为核心。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4Kb ISP(In-system programmable)可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,内置看门狗(WDT)电路。 功能强大的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。采用该单片机设计的冲床控制器,具有以下几个特点: 图1 控制器的硬件结构框图 ● 控制器采用PLC设计的理念,可靠性高,抗干扰能力强。 ● 面板上6位七段 LED 显示,既可以用来调节参数,工
[单片机]
51单片机一键下载相关
x宝上有很多买51单片机一键下载器的,就是U转串又配了一个stc15的单片机检测下载码,检测到了就断电再启动。 挺巧妙的,就去找了一下原理。 STC免手动下载程序电路图(自动断电冷启动) + 程序 http://www.amobbs.com/forum.php?mod=viewthread&tid=5279682 折中版的STC免手动免断电下载程序方案, 只需加一行代码, 不占用其他任何资源 http://www.amobbs.com/thread-5287022-1-1.html 电路图如下: (原文件名:STC免手动烧写电路图(最佳版).jpg) 实物图:
[单片机]
51单片机学习之陆 —— 1.5 数码管的动态显示
1 学习回顾,上节课学习了静态显示 我们显示了第一位数码管,并让其显示了8 现在我们试着多一些花样 1 点亮所有数码管让其显示6 编程 代码 注意上面已经写好了函数leddata P0 = ox00;让所有数码管都打开 P0 = leddata ;让数码管显示三 这时就达成了我们的目的了 2 让数码管从0到9循环显示间隔500毫秒 编程 代码: #include reg52.h // 52系列单片机头文件 2 #define uint unsigned int 3 #define uchar unsigned char
[单片机]
基于Modbus协议实现单片机与PLC之间的通讯
1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机 作为其核心控制器,以实现实时快速处理。 PLC和单片机结合不仅可以提 PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以 Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信
[应用]
德州仪器推出具有 ARM® Cortex™-M3 微控制器的业界最高集成度 ZigBee® 单芯片解决方案满足智能能源基础设施、家庭楼宇自动化以及智能照明系统需
• 硅芯片高度集成微控制器 (MCU)、存储器与硬件安全引擎,可实现高度可扩展的简化设计; • 支持 ZigBee Smart Energy™ 与 ZigBee Home Automation™ 以及 ZigBeeLight Link™ 标准; • 标准化的 ZigBee PRO、ZigBee IP、IEEE 802.15.4 以及 6LoWPANIPv6 网络可实现高灵活开发。 2013 年 5 月 23日,北京讯 日前,德州仪器 (TI) 宣布推出 CC2538 片上系统 (SoC),简化支持 ZigBee® 无线连接功能的智能能源基础设施、家庭楼宇自动化以及智能照明网关开发。业界最高度集成度 ZigBee 解决方案 CC2
[单片机]