- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高精度AD调整wangnianli
A/D调整万年历和调节LED亮度
目的:
通过A/D通道实现对实时时钟万年历调整,以及实现调节LED亮度的明暗变化,加深对AD转换的认识和理解,并熟悉掌握AD转换的应用。
通过实验,提高对ARM的编程控制能力。
设备:
ARM开发板一块、
装有ADS1.2及EasyJTAG仿真器的电脑一台
原理:
A/D调整实时时钟万年历:
(1)A/D转换器:
图1 A/D模块的寄存器功能框图
实验通过单通道进行AD转换。设置P0.30连接AD0.3,对AD0.3进行电压采样,进行AD转换,将转换后的电压值送到上位机终端EasyARM.exe的LED数码管显示器显示。电路如图2所示。
图2 AD转换实验电路图
当跳线JP2选择AD0.3的时候,可通过P0.30对电位器W1触点进行采样。由于满额为3.30V,且转换精度为10位,即2^10=1024级,假定AD转换寄存器AD0DR 读到的值为VALUE,则实际电压
U=(满额电压/转换精度)*VALUE=(3300/1024)*VALUE
通过配置ADCR的值,即可进行AD转换。
(2)AD转换调整万年历原理:
实时进行AD转换采样电压,先将采样电压赋值给一个变量,再将当前采样值和该变量实时比较,当采样值比变量大预定值或小预定值时调整万年历各值加减变化即可。
AD转换器通过PWM控制调节LED亮度:
通过改变PWM输出波形的占空比,即可控制LED等的明暗变化。实验通过AD转换器实现对PWM输出波形占空比的渐变调节,即可实现对LED亮度的渐变调节。
实验程序:
程序流程图:
...
实验程序:(见附录)
调试结果:
程序烧进LPC2138后,将P0.8、P0.9连接LED7、LED8,BEEP连接P0.15,JP5接Verf端。然后通过按键可实现各个功能。
按KEY6键可调整万年历。开始时数码管显示0,按KEY6键一次后数码管显示1,此时通过旋转A/D转换模块的电位器(顺时针旋转增大,逆时针减小)可调整万年历分值;按KEY6键两次后数码管显示2,此时通过旋转A/D转换模块的电位器(顺时针旋转增大,逆时针减小)可调整万年历时值;依次类推,可依次调节万年历分、时、星期、日、月、年值,同时数码管从1~6变化。调整过程中,万年历各个调整值每加一或减一同时,LED1闪一次、蜂鸣器蜂鸣一声。当A/D采样电压达到最大或最小值后,蜂鸣器长鸣,同时LED4(采样电压最小时)或LED5(采样电压最大时)长亮。
按KEY3键一次,LED2长亮。通过旋转A/D模块电位器可同时调节LED7、LED8亮度由亮到暗、再由暗到亮连续变化。同样,当A/D采样电压达到最大或最小值后,蜂鸣器长鸣,同时LED4(采样电压最小时)或LED5(采样电压最大时)长亮。
按KEY4键一次,LED3长亮。通过旋转A/D模块电位器可同时调节LED7、LED8亮度由亮到暗、然后由不亮跳到最亮跳跃式变化。同样,当A/D采样电压达到最大或最小值后,蜂鸣器长鸣,同时LED4(采样电压最小时)或LED5(采样电压最大时)长亮。
调试过程和心得:
功能虽然简单,但每个功能的实现却是不断失败然后继续调试的过程。
在调试时,貌似KEY4和KEY3按键程序一模一样,可就是出现不一样的结果,当时很郁闷,开始怀疑C语言本身是否有问题。而后认真检查后才发现,原来是ADC_Data变量少了个字母C! 从中认识到C语言本身几乎不会有问题,只是自己对C语言的掌握程度有限。
实现一个功能的方法可以多种,就在于自己如何去找到最佳的方案。比如这次实现调节LED亮度的程序,按KEY4键跳跃变化容易实现,可按KEY3键要求LED亮度渐变(即由暗变亮后再由亮变暗)就要设计方案。起初思路是先判断是增大还是减小调节,然后对应在达到最大或最小值时改变ADC_Data变量等式,如下所示:
if(ADC_DataM2)
{
if((ADC_Data==0)|(ADC_Data==9999))
{
if((IO0SETAA)==0)IO0SET=AA;
else IO0CLR=AA;
}
}
if(ADC_DataM2)
{
if((ADC_Data==0)|(ADC_Data==99
文档评论(0)