| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 基于AT89C51单片机的无级调光系统的实现 -> 正文阅读 |
|
[嵌入式]基于AT89C51单片机的无级调光系统的实现 |
? ? ? ?在生活中有很多可以自主调节挡位的设备,比如台灯的亮度、玩具车的速度、风扇的转速等等。它们调节档位的方式各有不同,有些是改变功率,有些是改变动力,但都离不开对激励或输入信号的改变,我们这里简单介绍一下对LED灯的无级调光的实现,可以自己动手做一个可变亮度的小灯。 一、所需器材: AT89C51×1、100Ω定值电阻×1、LED×1、示波器×1、滑动变阻器×1、直流电压表×1、ADC0808×1、500kHz时钟信号×1、+5V直流电源×2。 主要器材介绍:(我们这里只做简单介绍,各接口定义可自行查阅资料——反正这里也用不着) (1)AT89C51:AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称51单片机。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图1 51单片机局部图 (2)ADC0808:ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次逼近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。 ? ? ? ?说白了,就是可以将模拟信号转为数字信号。例如0—5V的电压信号可转为数字量为十六进制的00—FF。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??图2 ADC0808局部图 二、基本思路 (1)要实现调亮,先要产生亮度等级信号,利用滑动变阻器调整阻值,将滑动变阻器两端点样进行采样,用ADC0808进行模数转换,得到数字量。将采集到的数字量除以256(8位二进制数最大值)进行归一化,再乘以10(将亮度划分为10个等级,当然计算的结果可能是实数,但肉眼观察的各等级变化也不明显,相当于是无极调光),作为调光等级。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 调光等级n=(数字量/256)*10 (2)产生PWM波来控制灯的亮度,因为PWM波可以通过调整占空比来控制灯的亮度。当占空比大时,也就是一个周期内灯亮的时间占比大,暗的时间占比少,当频率足够快时,灯就看起来亮;相反的,占空比小时,灯看起来就暗。结合1的分析,通过采集到的数字量进行处理之后来调整占空比,计算的结果表示占空比的大小,例如n=5时,表示占空比为50%。 名词解释:PWM波:PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图3 PWM波 占空比:如图所示,在一个周期T内,高电平持续时间T1占整个周期的比值。调整占空比就可以调整灯的亮度,不光可以应用在这,比如还可以控制舵机来控制小车的转速,在拐弯时占空比可以调小一点,速度减慢,防止发生侧滑。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 占空比=T1/T 小知识:我们平常所看到的大多数灯持续发光,实际上并不是一直发光的,而是“一闪一闪的”,只不过当闪的速度大于我们肉眼感受光的速度时,看起来就会觉得灯在“一直亮”。通常肉眼可感受到的频率大概在60Hz(因人而异,有的飞行员可感受到220Hz的变化)以下,也就是灯如果1s内闪的次数小于60,那肉眼是可以感受到的。所以这里的PWM频率至少为60Hz,以至于不起来灯在闪。这里我们为效果更好,取1kHz。 (3)利用51单片机作为硬件控制器,用ADC0808作为模数转换器。使用定时器0实现中断,产生PWM波并调整占空比。输出的PWM波从P2^0口输出,并用示波器检测输出信号的占空比。 三、电路实现 (1)?电压采样与模数转换电路 ? ? ? ?电位器可通过上下滑动改变自身阻值,两端电压也相对改变,通过电压表测量电位器两端电压,得到输入模拟量。 ? ? ? ?ADC0808的时钟端给500kHz时钟信号,其实也可以用51单片机产生,直接用激励源更方便。ADDA~C是模拟信号输入选择通道,这里从IN0输入,对应ABC值为000,直接将三个端口接地。将START与P3^4相连,由P3^4口给采样开始信号,同时给ALE地址锁存允许信号一个高电平,对地址进行锁存。P3^3口接收AD转换完成信号,接收到高电平时说明转换完成。P1端接收采样输出信号,OUT8为最低位OUT1为最高位,OUT8-OUT1分别接单片机的P1.0到P0.7端,各个端口反过来接收,最后得到的才是采样后的数字量。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4?电压采样与模数转换电路? 2)PWM波输出电路 ? ? ? ?51单片机与LED的连接,PWM波从P2^0口输出,中间串联一个100欧的限流电阻,更接近实际情况。示波器接与LED灯并联,检测输入信号情况,观察占空比变化。 ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图5?PWM波输出电路 (3)?输出结果 ? ? ??? 当滑动变阻器阻值为0时,电压为0,由图6可以看到LED灯熄灭,输出的PWM波占空比很小,几乎为0。不为零的原因是程序编写问题,在一个周期中,当时间time<=n时,输出高电平,所以导致当n=0时,也会有一瞬间的高电平产生,但是不影响观察结果。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图6 电位器为0时的PWM波形与LED亮度? ? ? ? ?当滑动变阻器指针在中间时,两端电压为2.5V,由图7可以看到LED灯比之前亮,输出的PWM波占空为50%。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图7?电位器位于中间时的PWM波形与LED亮度 ? ? ? ?当滑动变阻器指针在顶端时,两端电压为5V,由图8可以看到LED灯达到最亮,输出的PWM波占空为100%,一直输出高电平。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图8 电位器位处于最大值时的PWM波形与LED亮度? ? ? ? ?可以看到,LED灯的亮度随滑动变阻器的变化而变化,观察示波器也可以看到,PWM波的占空比大的时候灯越亮,占空比小的时候灯越暗。 四、完整项目 (1)仿真程序
(2)Proteus仿真图 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图9?完整仿真图 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:25:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |