(高职)任务一 制作数字电压ppt课件.pptx
单片机原理及应用第三篇 项目拓展单片机应用提高 2020年5月20日任务一 制作数字电压仪一、任务内容要求编程实现利用STC15W4K32S4的ADC转换模块测量电路中某点电位,并通过单片机的控制在数码管上显示。实现上述要求的数字电压仪原了解AD/DA转换的概念;掌握STC15W4K32S4的ADC转换模块以及控制方法;掌握STC15W4K32S4的ADC编程控制方法。理图如图3-1-1所示:P0口接数码管的七个发光段引脚以及一个小数点引脚,P2.0P2.2接数码管的位选端口,单片机的P1.0接通过TLC431稳定的基准电压,P1.1连接待测电压。当与P1.1相连的滑动变阻器向下(接地端)移动时,数码管显示电压变小,当滑动变阻器向上(电源端)移动时,数码管显示电压变大。任务一 制作数字电压仪图3-1-1 数字电压仪原理图任务一 制作数字电压仪二、实施条件1、电脑(安装有Keil 软件、ISP下载软件)、串口下载线或专用程序烧写器,作为程序的开发调试以及下载工具、串口连接线作为单片机与PC机通信线路。2、由单片机最小系统图以及串口通信原理图中所需器件构成的电路板,用来存储和运行程序,并演示效果。三、注意事项1、焊接电路时注意规范操作电烙铁,防止因为操作不当导致受伤。2、上电前一定要进行电路检测,将桌面清理干净,防止桌面残留的焊锡、剪掉的元器件引脚引起电路板短路,特别是防止电源与地短路导致芯片损坏。3、上电后不能够用手随意触摸芯片,防止芯片受损。4、规范操作万用表、示波器等检测设备,防止因为操作不当损坏仪器。知识链接知识链接 在自动控制领域中,常由单片机进行实时控制及数据处理。单片机只能加工和处理数字量,而被控制和测量的对象的相关参量通常是模拟量,如温度、速度以及压力等,当这些物理量通过传感器、变换器转换为的电信号也是模拟量。因此有模拟量输入的地方需先将模拟量转换为数字量再交由单片机处理,而输出模拟量时,则需要进行数字量向模拟量的转换。好漂亮的游泳池,需要恒温吗?不过温度是模拟量,需要通过温度传感器以及AD转换才能为我所用。知识链接知识链接 1、A/D 把连续时间信号转换为与其相对应的数字信号的过程称之为 A/D(模拟-数字)转换过程。 A/D 转换包括了采样、量化、编码等过程。STC15 系列单片机集成有8通道高速电压输入型模拟数字转换器(ADC),其转换方式为逐次逼近式,转换口在 P1 口,对应 P1.0P1.7,采样精度为10位动画: A/D 与 D/A 的原理以及 对应的参数速度可达 300kHz,广泛应用于温度检测、电压检测、频谱检测等方面。一、初识A/D与D/A2、D/A A/D是将模拟信号向数字信号转换过程,与之对应的将数字信号转换为模拟信号的过程则称为 D/A转换过程。知识链接知识链接 STC15 系列单片机 ADC (A/D 转换器)的结构由多路选择 开关、比较器、逐次比较寄存器、10 位数模转换 DAC、转换寄存器(ADC_RES 和 ADC_RESL)以及 ADC 控制寄存器 ADC_CONTR 构成。ADC 输入通道与 P1 端口复用,编程时可以通过设置 P1ASF 特殊功能寄存器将 P1 中的任何一端设置 为 ADC 功能,未作为 ADC 端口使用的,仍然可作为普通的 I/O 端口使用。 输入电压模拟信号经过多次比较,将最终结果保存在 ADC 转换结果寄存器 ADC_RES 和 ADC_RESL;同时置位 ADC 控制寄存器 ADC_CONTR 中的 ADC 转换标志位 ADC_FLAG,供程序查询或是发出中断请求。二、ADC 转换器控制模块1、STC15 系列单片机ADC(A/D转换器)的结构知识链接知识链接 二、ADC 转换器控制模块1、STC15 系列单片机ADC(A/D转换器)的结构图 3-1-2 单片机 ADC 结构图知识链接知识链接 (1)P1 口模拟功能控制寄存器:P1ASF。P1ASF寄存器也属于特殊功能寄存器,地址为0 x9D(不能位寻址),复位值为0 x00。需要注意的是,该寄存器只能写,不能读其寄存器状态值,P1ASF寄存器的格式位如表 3-1-1 所示。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-1 P1 口模拟功能控制寄存器:P1ASFBitB7B6B5B4B3B2B1B0NameP17ASFP16ASFP15ASFP14ASFP13ASFP12ASFP11ASFP10ASF 如果需要将P1.0引脚作为A/D转换端口时,因为P1ASF不能位寻址,所以通过设置P1ASF=0 x01即可。其他同理。知识链接知识链接 (2)ADC控制寄存器:ADC_CONTR。该寄存器字节地址为 0 xBC,复位值 0 x00,ADC_CONTR寄存器的各个位功能如表 3-1-2所示。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-2 ADC 控制寄存器:ADC_CONTRBitB7B6B5B4B3B2B1B0NameADC_POWE RSPEED1SPEED0ADC_FL AGADC_STA RTCHS2CHS1CHS0 ADC_POWER为电源控制位,该位为0时,关闭ADC电源,为1时,打开ADC 电源。启动 A/D 转换前一定要确认 A/D 电源已打开,A/D 转换结束后关 闭 A/D 电源可降低功耗,也可不关闭。初次打开内部 A/D 转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动 A/D 转换。注意:为能高精度 A/D 转换,启动 A/D 转换后,在 A/D 转换完成前不改 变任何 I/O 端口的状态。知识链接知识链接 SPEED1、SPEED0 是:模数转换器转换速度控制位,转换速度设置见表 3-1-3。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-3 模数转换器转换速度控制位对应关系SPEED1SPEED0A/D 转换所需时间1190 个时钟周期转换一次,CPU 工作频率 27MHz 时,A/D 转换速 度约为 300KHz(=27MHz90)10180 个时钟周期转换一次01360 个时钟周期转换一次00540 个时钟周期转换一次知识链接知识链接 ADC_FLAG:模数转换器转换结束标志位。当A/D转换完成后,硬件会置位:ADC_FLAG=1,由软件清0。不管是A/D 转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清0。ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始 转换,转换完成后,自动为0,下次需要转换时,该位重新置“1”。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器知识链接知识链接 CHS2、CHS1、CHS0为模拟输入通道选择位,具体对应关系如表3-1-4所示。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-4 模拟输入通道选择对应表CHS2CHS1CHS0Analog Channel Select(模拟输入通道选择)000选择 P1.0 作为 A/D 输入来用001选择 P1.1 作为 A/D 输入来用010选择 P1.2 作为 A/D 输入来用011选择 P1.3 作为 A/D 输入来用100选择 P1.4 作为 A/D 输入来用101选择 P1.5 作为 A/D 输入来用110选择 P1.6 作为 A/D 输入来用111选择 P1.7 作为 A/D 输入来用注意:对 ADC_CONTR 可直接赋值,不要用与(AND)和或(OR)操作指令。知识链接知识链接 (3)ADC转换结果调整控制位ADRJ。该寄存器位于寄存器CLK_DIV/PCON中,用于控制ADC转换结果存放的位置。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-5 ADC 转换结果调整寄存器位ADRJMnemonicB7B6B5B4B3B2B1B0CLK_DIVMCKO_S1MCKO_S0ADRJTx_RxTx2_Rx2CLKS2CLKS1CLKS0ADRJ:ADC 转换结果调整。为0:ADC_RES7:0存放高8位ADC结果,ADC_RESL1:0存放低 2位ADC结果。为1:ADC_RES1:0存放高2位ADC结果,ADC_RESL7:0存放低 8位ADC结果。知识链接知识链接 (4)A/D转换结果寄存器ADC_RES、ADC_RESL。用于保存A/D 转换结果,其格式如下:AUXRI寄存器的ADRJ位是A/D转换结果寄存器(ADC_RES、ADC_RESL)的数据格式调整控制位。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器 表 3-1-6 ADC 转换结果寄存器MnemonicNameB7B6B5B4B3B2B1B0ADC_RESA/D 转换结果 寄存器高8位ADC_R ES7ADC_R ES6ADC_R ES5ADC_R ES4ADC_R ES3ADC_R ES2ADC_R ES1ADC_R ES0ADC_RESA/D 转换结果 寄存器高2位-ADC_R ES1ADC_R ES0CLK_DIV时钟分频寄存 器ADRJ = 0知识链接知识链接 (4)A/D转换结果寄存器ADC_RES、ADC_RESL。二、 ADC 转换器控制模块2、与 A/D 转换有关的寄存器当ADRJ=0时,10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中。此时,如果用户需取完整10位结果,按下面公式计算: 10-bit A/D Conversion Result:(ADC_RES7:0,ADC_RESL1:0) = 1024* 如果用户只需取 8 位结果,按下面公式计算: 8-bit A/D Conversion Result:(ADC_RES7:0) = 256* 注:Vin 为模拟输入通道输入电压,Vcc 为单片机实际工作电压,用单片机工作电压作为模拟参考电压。当ADRJ=1时,10位A/D转换结果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。计算公式参照上面10位计算公式。ccVVinccVVin知识链接知识链接 三、TLC431 的功能 因通常单片机的工作电压不是很稳定,如果直接用STC15W4K32S4单片机的工作电压作为基准电压的话,测量的电压误差通常会比较大。因此选用TLC431作为基准电压以提高测量准确度。TLC431是一个有良好的热稳定性能的三端可调分流基准源。其对应的封装、管脚以及符号如图3-1-3所示。图 3-1-3 TLC431 的封装、管脚以及符号示意图知识链接知识链接 三、TLC431 的功能1、工作特点如下: (1)最大输入电压为37V。 (2)最大工作电流150mA。 (3)内基准电压为2.5V。 (4)输出电压范围为2.530V。知识链接知识链接 三、TLC431 的功能2、TLC431 在本系统中的应用 通常因为 STC15W4K32S4 单片机的参考电压是输入工作电压 VCC,由于 VCC 可能并不 固定,存在一定程度的飘移,这时可以外接一个固定的参考电压源以提高计算精度。利用图 3-1-4 所示电路使 P1.0 处输出一个稳定的基准电压(通过调节 POT2,使输出电压为 3.0V), 用于计算工作电压 VCC。图 3-1-4 单片机基准电压任务任务实施实施: :图 3-1-7 电压表流程图u步骤一 硬件准备工作 准备好焊接所需的镊子、导线、电烙铁、相关电子元器件、焊接用的电路板,根据图3-1-1所示焊接电路,利用万用表、示波器等设备对焊接的电路板进行调试,确保电路板焊接准确无误。u步骤二 编写程序编写程序流程图 控制任务流程图如图3-1-7所示。任务任务实施实施: :#include #include #define uchar unsigned char#define uint unsigned intunsigned char data smg=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/*数组smgd为带有小数点显示。M=模拟量采样值,N=基准电压源采样值(本例为3V),R=模拟量输入值(待显示值)/*/unsigned char data smgd=0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10;uint R,M,N;char d3;任务任务实施实施: :/*初始化函数,设定P1.0、P1.1工作的模式,选择AD转换通道,数码管不显示。*/void Init()P1M1=0 x03;P1M0=0 x00;P1ASF=0 x03;P2=0 xFF; P0=0 xFF;任务任务实施实施: :/*函数名:采用STC下载程序自动生成的1毫秒延时程序/*/void delayms()/11.0592MHzunsigned char i, j;_nop_();_nop_();_nop_();i = 11;j = 190;dowhile (-j); while (-i);任务任务实施实施: :/*函数名:ADC初始化及8位A/D转换函数返回值:8位的ADC数据*/uchar Read (uchar CHA)uchar AD_FIN=0; /*以下为ADC初始化程序*/CHA &= 0 x07; /选择ADC的8个接口中的一个ADC_CONTR = 0 x60; /ADC转换的速度 _nop_(); ADC_CONTR |= CHA; /选择A/D当前通道 _nop_(); ADC_CONTR |= 0 x80; /启动A/D电源 delayms(1); /使输入电压达到稳定(1ms即可?/*以下为ADC执行程序*/ ADC_CONTR |= 0 x08; /启动A/D转换 _nop_(); _nop_(); _nop_(); _nop_();任务任务实施实施: : while (AD_FIN =0) /等待A/D转换结束 AD_FIN = (ADC_CONTR & 0 x10); /测试A/D转换结束否 ADC_CONTR &= 0 xE7; / 清ADC_FLAG位, 关闭A/D转换,return (ADC_DATA); /返回A/D转换结果(8位)任务任务实施实施: : /*转换函数显示函数:M=模拟量采样值,N=基准电压源采样值(本例为3V),R=模拟量输入值(待显示值)N=256*3/Vcc;变形后得Vcc=256*3/N; 代入M=256*R/Vcc;得到M=R*N/3;变形后得R=M*3/N*/void transfer(void)M=Read(1);/P1.6口模拟量转换N=Read(0);/P1.7口2.5V基准电压源采样(转换)R=(M*3)/N)*100;/输入模拟量换算并放大100倍;/*以下为3位显示转换*/out=R;d2=R/100;R=R%100;d1=R/10;d0=R%10;任务任务实施实施: : void display (void)P2=0 xFF;P0=smgd(d2);delayms(1);P2=0 xFB;delayms(20);P2=0 xFF;P0=smg(d1);delayms(1);P2=0 xFD;delayms(20);P2=0 xFF;P0=smg(d0);delayms(1);P2=0 xFE;delayms(20);任务任务实施实施: : /*函数名:主函数*/void main (void) Init();Delayms(50);transfer();display();任务任务实施实施: :步骤三 调试程序 根据第一篇任务二中的步骤对编写好的程序进行调试,直至无误。步骤四 下载程序并运行将编译好的.hex文件利用串口下载线或者是专用烧写器存储到单片机内部ROM中,运行程序,观察现象是否跟预期一致。任务检查与评价: 一级一级指标指标比例比例二级指标二级指标比例比例得分得分电路板制作30%1.元器件布局的合理性5%2.布线的合理性、美观性2%3.焊点的焊接质量3%4.电路板的运行调试20%程序设计及调试40%1.开发软件的操作、参数的设置2%2.控制程序具体设计25%3.程序设计的规范性3%4.程序的具体调试10%通电实验20%1.程序的下载5%2.程序的运行情况,现象的正确性15%职业素养与职业规范10%1.材料利用效率,耗材的损耗2%2.工具、仪器、仪表使用情况,操作规范性5%3.团队分工协作情况3%总计100% 表1-8-10 任务完成情况的测评细则巩固与拓展:一、巩固自测1、利用STC15W4K32S4的ADC转换模块还可以做应用在什么方面?2、如果测试电路不变,想取10位AD转换结果,程序应如何调整?二、拓展任务利用STC15W4K32S4的ADC转换模块构建水温测试系统,依据图3.1.1,利用相应的传感器设计测试电路,并编程实现。高等教育出版社Higher Education Press致谢