0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【案例】PWM流水灯设计

潘文明 来源:明德扬吴老师 作者:明德扬吴老师 2023-11-13 07:18 次阅读

【上板现象】

PWM流水灯在MP801的上板现象(点击跳转明德扬论坛观看)

PWM流水灯在点拨开发板的上板现象(点击跳转明德扬论坛观看)

PWM流水灯在实验箱的上板现象(点击跳转明德扬论坛观看)

【设计教程

1.1总体设计

1.1.1概述


脉冲宽度调制技术(Pulse WidthModelation,PWM)是利用微处理器/FPGA的数字输出对模拟电路进行控制的一种有效技术,其广泛应用于测量、通信、功率控制与变换等众多领域。PWM数字信号处理器到被控系统都采用数字形式,无需进行数模转换。航模中的控制信号大多是PWM信号,比如FUTABA、JR等舵机的控制都采用PWM方式,发射机给接收机输送脉冲后接收机就会控制舵机进行旋转。举个例子,假定基础脉宽是100ms,当发射机的脉宽增大(如增加到150ms)时接收机就控制舵机正向旋转;反之发射机的脉宽减小(如减小到50ms)时,接收机就控制舵机逆向旋转。


PWM是一种对模拟信号电平进行数字编码的方法。通过使用高分辨率计数器,对方波的占空比进行调制,从而对一个具体模拟信号的电平进行编码。由于在给定的任何时刻,满幅值的直流供电只存在有(ON)和无(OFF)两种状态,因此PWM信号仍然是数字信号。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。直流供电被加到负载上的时候为“通”,负载供电被断开的时候为“断”。只要有足够的带宽,任何模拟值都可以使用PWM进行编码。


通俗来说,PWM是连续的、具有一定比例占空比的脉冲信号,可以通过控制占空比来对其进行改变。简单来说,可以认为PWM就是一种方波,如图所示是一个周期为10ms,高电平为6ms,低电平时间为4ms的PWM,其占空比(高电平时间占整个周期的比例)为60%

wKgZomVRWseAR9hzAAAolH7TLgs643.png

发光二极管简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光,它在照明领域应用广泛。发光二极管可高效的将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。可通过高低电平的变化来控制LED灯的明灭状态,当输出信号为低电平时,LED灯亮,反之,当输出信号为高电平时,LED灯灭。因此可通过改变PWM波形的占空比,来控制LED灯亮灭的时间,当有多个LED灯的时候,通过不同的PWM波形来控制不同的LED灯,就可以产生各种各样不同的效果。


1.1.2设计目标


本模块产生8个不同的PWM脉冲,控制8个LED灯点亮不同的时间,从而达到流水灯的效果。每个脉冲周期为10s,占空比从10%~80%。上电后,led0点亮1s,熄灭9s;再点亮1s,熄灭9s,……,依次不断循环。led1~led7与led0类似,分别点亮2s~8s,其他时候都是熄灭的。


1.1.3信号列表

wKgZomVRWu2ASchIAAAM30SjXLQ489.png


1.1.4设计思路


根据题目功能要求可知,产生的8个不同的PWM脉冲的周期都是10秒(s),由此我们可以提出两个计数器的架构,如下图所示。

wKgaomVRWxeACK4XAABPpsqMuxA000.png

该架构由两个计数器组成:时钟计数器cnt_1s和周期计数器cnt_10s。


时钟计数器cnt_1s:用于计算1秒的时钟个数,加一条件为1,表示一直计数;结束条件为50000000,表示数到1秒就清零。


周期计数器cnt_10s:用于对1秒进行计数,加一条件为end_cnt_1s,表示数到1秒就加1;结束条件为10,表示数完10秒就清零。


至此,我们就将这个练习的计数器架构设计出来了。


下面是计数器的代码。

wKgZomVRWz6AYh_VAAAuCvGE8EU106.pngwKgaomVRW0iAB3mlAAAK0yfDs5I985.png

下面我们开始设计输出信号led,在设计这些信号的时候,我们只需要关注他的变化点,也就是0变1、1变0的点。

wKgZomVRW2WAJNedAAAW3sS6K4M515.png


以led0的变化为例,上电后,led[0]点亮1s,熄灭9s,再点亮1s,熄灭9s。也就是数到1秒时,即add_cnt_10s && cnt_10s==1-1时,led0由0变1。当数到10秒时,即end_cnt_10s时,led[0]由1变0。


Led[1]~led[7]也是同样,即:


上电后,led[1]点亮2s,熄灭8s,再点亮2s,熄灭8s。也就是数到2秒时,即add_cnt_10s &&cnt_10s==2-1时,led[1]由0变1。当数到10秒时,即end_cnt_10s时,led[1]由1变0。


上电后,led[2]点亮3s,熄灭7s,再点亮3s,熄灭7s。也就是数到3秒时,即add_cnt_10s &&cnt_10s==3-1时,led[2]由0变1。当数到10秒时,即end_cnt_10s时,led[2]由1变0。


上电后,led[3]点亮4s,熄灭6s,再点亮4s,熄灭6s。也就是数到4秒时,即add_cnt_10s &&cnt_10s==4-1时,led[3]由0变1。当数到10秒时,即end_cnt_10s时,led[3]由1变0。


上电后,led[4]点亮5s,熄灭5s,再点亮5s,熄灭5s。也就是数到5秒时,即add_cnt_10s &&cnt_10s==5-1时,led[4]由0变1。当数到10秒时,即end_cnt_10s时,led[4]由1变0。


上电后,led[5]点亮6s,熄灭4s,再点亮6s,熄灭4s。也就是数到6秒时,即add_cnt_10s &&cnt_10s==6-1时,led[5]由0变1。当数到10秒时,即end_cnt_10s时,led[5]由1变0。


上电后,led[6]点亮7s,熄灭3s,再点亮7s,熄灭3s。也就是数到7秒时,即add_cnt_10s &&cnt_10s==7-1时,led[6]由0变1。当数到10秒时,即end_cnt_10s时,led[6]由1变0。


上电后,led[7]点亮8s,熄灭2s,再点亮8s,熄灭2s。也就是数到8秒时,即add_cnt_10s &&cnt_10s==8-1时,led[7]由0变1。当数到10秒时,即end_cnt_10s时,led[7]由1变0。


由此便可以将所有的led信号设计出来。


下面是led的代码。

wKgZomVRW3uAHCfcAAAp52R7F6k549.pngwKgaomVRW4qARESBAAAqWYBz7k4214.pngwKgaomVRW5eAMk0YAAAmWD-Bp6o812.pngwKgZomVRW6aAEHBbAAAsOrfOHVs902.png


1.1.5参考设计代码

wKgZomVRW7OAL3EXAAAle0kWHqs149.pngwKgaomVRW8GAbVUvAAAiTN8fugE831.pngwKgZomVRW8mAB9vZAAApPAbBsFA437.pngwKgZomVRW9WAA2IHAAAmw0k6ELU262.pngwKgaomVRW9-ASy0lAAAjK_BNBC0444.pngwKgaomVRW--AQNMFAAAiuqXENfo924.pngwKgZomVRW_iAOJldAAAUX5pR8CQ822.png


1.2效果和总结

时间经过1秒之后

wKgaomVRXCmAULCkABPwZY2vAc0068.png


时间经过4秒的时候

wKgZomVRXDOAFzu4ABLHpPHXJ0A983.png


时间经过8秒的时候

wKgaomVRXDyABjwzABNB47JmwcI168.png


看上面的现象,可以发现,跟设计目标要求的都是一样的,成功完成设计目标。
我们的至简设计法和计数器模板在以上的设计中发挥了至关重要的作用,使设计能够快速准确完成。本设计中的led信号的代码为了方便理解,把8个led灯分开写了,希望有兴趣的同学可以将led的代码进行简化,合成一个always,想不到也没关系,在讲解视频中也有讲述如何实现。

感兴趣的朋友也可以访问明德扬论坛进行FPGA相关工程设计学习,也欢迎大家在评论与我进行讨论!

好消息!FPGA至简设计200例已更新,

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593243
  • 接收机
    +关注

    关注

    8

    文章

    1122

    浏览量

    52644
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209946
  • 流水灯
    +关注

    关注

    21

    文章

    432

    浏览量

    59115
收藏 人收藏

    评论

    相关推荐

    用至简设计法进行PWM流水灯设计

    本帖最后由 chunfen2634 于 2017-7-7 10:09 编辑 《用至简设计法进行PWM流水灯设计》脉冲宽度调制(pulse width modelation)简称PWM,利用
    发表于 07-06 10:25

    用至简设计法进行PWM流水灯设计

    脉冲宽度调制(pulse width modelation)简称PWM,利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中脉冲宽度调制
    发表于 07-26 14:15

    【每周分享FPGA案例】_PWM流水灯设计

    波形来控制不同的LED灯,就可以产生各种各样不同的效果。1.1.2 设计目标本模块产生8个不同的PWM脉冲,控制8个LED灯点亮不同的时间,从而达到流水灯的效果。每个脉冲周期为10s,占空比从10
    发表于 07-14 00:28

    LED流水灯程序【汇编版】

    LED流水灯程序【汇编版】LED流水灯程序【汇编版】LED流水灯程序【汇编版】LED流水灯程序【汇编版】
    发表于 12-29 11:15 0次下载

    LED流水灯程序【C语言版】

    LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】
    发表于 12-29 11:05 0次下载

    一个流水灯的C51程序

    流水灯的C51程序流水灯的C51程序流水灯的C51程序
    发表于 01-07 16:55 3次下载

    LESSON2_流水灯

    LESSON2_流水灯 LESSON2_流水灯
    发表于 02-18 18:21 0次下载

    心形流水灯

    32位心形流水灯,有仿真电路图,直接可以调试制板
    发表于 03-01 17:28 91次下载

    LESSON2_流水灯

    LESSON2流水灯
    发表于 03-15 15:31 0次下载

    LESSON2_流水灯

    流水灯,跑马灯。单片机实现LED流水灯,跑马灯功能。
    发表于 05-20 15:37 55次下载

    流水灯

    流水灯 ppt
    发表于 11-11 18:42 13次下载

    流水灯的制作dxp版

    流水灯的制作dxp版
    发表于 12-11 23:38 0次下载

    使用PWM实现真正的流水灯的资料和程序免费下载

    本文档的主要内容详细介绍的是使用PWM实现真正的流水灯的资料和程序免费下载。
    发表于 07-24 17:37 3次下载
    使用<b class='flag-5'>PWM</b>实现真正的<b class='flag-5'>流水灯</b>的资料和程序免费下载

    聊聊流水灯的写法

    流水灯,学单片机时,编程第一课的内容,多少小伙伴的单片机之路都是从流水灯开始的。那有没有想过,我们能用几种方式来写流水灯,各有什么优缺点呢?
    的头像 发表于 03-02 15:52 3414次阅读

    1.流水灯

    1.流水灯题目:使用独立按键切换流水灯的不同模式,AT89S51单片机的P0.0-P0.7接八个发光二极管L1-L8,P1.4-P1.7接了四个开关K1-K4,编程按下K1,流水灯自上而下,按下K2
    发表于 11-25 18:06 38次下载
    1.<b class='flag-5'>流水灯</b>