文档视界 最新最全的文档下载
当前位置:文档视界 › 智能电子技术实践

智能电子技术实践

智能电子技术实践
智能电子技术实践

《智能电子技术实践》

实训报告

课题名称:电压表远程数据显示

专业名称:电子信息工程技术

班级学号: 11136134

姓名:高小伟

指导老师:李元熙

成绩:

无锡商业职业技术学院物联网技术学院

目录

第一章绪论 (1)

1.1 课题研究现状 (1)

1.2 课题要求与设计方案 (1)

1.2.1 (1)

1.2.2 (1)

1.2.3 (2)

第二章系统硬件设计 (2)

2.1 飞思卡尔单片机系统 (2)

2.1.1 内部时钟发生器 (S08ICGV4) (2)

2.1.2 MCU复位 (4)

2.1.3 存储器组织 (4)

2.2 显示模块硬件设计 (4)

2.2.1 74HC595简介 (6)

2.2.2 74LS138简介 (7)

2.3 串口通信模块电路设计 (7)

2.3.1 原理 (7)

2.4 测压模块电路设计 (9)

第三章系统软件设计 (10)

3.1 A/D转换模块软件设计 (10)

3.2 串口模块软件设计 (11)

第四章系统测试与心得 (12)

4.1 系统测试 (12)

4.2 实训心得 (12)

第一章绪论

1.1 课题研究现状

S08系列微控制器是freescale半导体公司推出的新一代8位MCU。在实际工作中,计算机与外部设备之间常常要进行信息的交换,计算机与计算机之间也要交换信息,本次实训主要是使用实训板检测电位器中心抽头的电压,并通过串行总线在计算机端显示测到的电压值。

首先,通过A/D转换模块,将电压信号转换为对应的数字信号,实际应用中,电压信号可能由温度、湿度、压力等实际物理量经过传感器和相应的变换电路转化而来。其次,通过RS-232接口实现与设备之间的连接,在电脑的串口调试串口显示输出的电压。在实际工作中,计算机与外部设备之间要常常要进行信息交换,计算机与计算机之间也要交换信息。当计算机与计算机之间距离较远时过多的电缆使用这种方式不够经济。而串行通信间数据是一位一位按顺序传送。串行通信接口SCI的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转换为单线输入。为了设置波特率,SCI应具有波特率寄存器。为了能够设置通信格式、是否校验、是否允许中断等,SCI应具有控制寄存器。而要知道串口是否有数据可收、数据是否发送出去等,需要有SCI状态寄存器。在单片机人机接口中,通常使用LED数码管来显示各种数字或符号,由于数码管是由多个发光二极管封装在一起组成,因而它具有显示清晰、亮度高、使用电压低、寿命长的特点。

1.2 课题要求与设计方案

1.2.1课题要求:制作一个电压测量与数据传输装置,测量范围:0~5V,数值精度0.1V,测量值通过单片机的串行通信口上传至计算机端,并通过超级终端或串口助手显示当前测量值。

1.2.2设计方案

首先要做一个模数A/D转换模块,A/D转换模块的基本编程方法是

1)把模拟量转化为数字量

2)写入转换初始化,然后启动A/D转换

3)获取A/D转换结果

4)数据处理,将获取的AD转换结果进行数值处理。

其次,通过RS-232接口实现与设备之间的连接,在电脑的串口调试串口显示输出的电压。在编程时要写入一个send发送函数,把数据发送出去,然后接收端需要用接收电路将RS-232C接口实现与设备之间的连接,在电脑的串口调试串口显示输出的电压。在编程时要写入一个send发送函数,把数据发送出去,然后接收端需要用接收。

图1-1

1.2.3 实施步骤

首先,编写AD采样的程序,让数码管显示电压值。其次,编写串行通信的程序。当两个程序都成功的时候,将两个程序整合在一起就可以实现课题要求了。

第二章系统硬件设计

2.1 飞思卡尔单片机系统

MC9S08AC16 系列属于8 位微控制单元(MCU),是高性能低成本的HCS08 家族中的成员。这个家族中的所有的MCU 都使用HCS08 核,并且可以使用多种模块、内存容量、内存类型和封装类型。MC9S08AC16 和MC9S08AC8 面向消费和工业应用。MC9S08AW16 和MC9S08AW8 面向汽车电子应用。

2.1.1 内部时钟发生器 (S08ICGV4)

内部时钟发生器模块(ICG)为MC9S08AC16 系列单片机提供系统时钟。其模拟供电线路VDD 和VSS源自MCU 的VDD 和VSS 的引脚。

ICG 提供多个时钟源。这为用户在均衡成本、精度、电流消耗量以及性能时,提供了极大的灵活性, ICG 由四个功能模块组成。下面将对这些模块进行简要的描述。

? 振荡器模块—振荡器模块用于连接外部晶振或振荡器。它提供两种可软件选择的频率范围,以获得最佳的启动和稳定性。振荡器模块可以产生一个外部方波给系统时钟。外部时钟源可以提供非常精确的时钟。HGO 可以配置振荡器为低功耗模式或高幅模式。

? 内部辅助发生器—内部辅助发生器由两个受控时钟源组成。一个为大约8 MHz 作为背景调试控制器的本地时钟。另一个时钟源是典型的243 kHZ,当一个精确的定时事件输入到MCU 时,它可通过软件进行微调(Trim) 以提高其精确度。这将提供一个非常可靠,低成本的时钟源。

? 锁频环—对内部或外部时钟源进行倍频的时候,需要用到锁频环。当电路频率锁定或失锁时,状态位将提供标志信息。另外这个模块可以监控外部参考时钟及

图2-1

时钟信号是否有效。

? 时钟选择模块—时钟选择模块为不同时钟源连接到系统时钟树提供几种开关选择。ICGDCLK 是FLL的输出倍频时钟, ICGERCLK 是源自晶振或外部时钟源的参考时钟频率, FFE( 固定频率使能) 是一个用来控制系统固定频率时钟(XCLK)的控制信号。ICGLCLK 是背景调试控制器的时钟源。

ICG 和时钟分配系统的特性如下:

? 几种可选主时钟源提供灵活的成本,频率和精确度选择。

? 32 kHz ~ 100 kHz 的晶振或振荡器

? 1 MHz ~ 16 MHz 的晶振或振荡器

? 外部时钟

? 内部参考发生器

? 缺省设置为自时钟模式以获得最小的启动延时

? 频率锁定回路(FLL)产生8 MHz ~ 40 MHz 时钟( 总线时钟最高至20 MHz)—用外部或内部时钟作参考频率。

? 自动停止非工作状态的时钟源。

? 丢失时钟或者FLL 失锁会产生复位或中断

? 数字控制振荡器(DCO)保留先前的频率设定,当从stop3 模式恢复时允许快速频率锁定。

? 在丢失或移除参考时钟时,DCO 将维持操作频率。

? 后FLL 分频器选择8 个总线分频约数(/1 到/128) 中之一。

? 实时中断的独立自时钟源。

? 可调整的内部时钟源支持串行通讯,无需额外的外部部件。

? 锁获得后自动FLL 接触。

? 外部振荡器可选择低功率或高增益

图2-1 是内部时钟发生器(ICG)模块的功能结构图。

2.1.2 MCU复位

复位提供一种从已知的初始条件设置来启动处理的方法。在复位期间,大部分控制和状态寄存器都设为复位默认值,从0xFFFE ~ 0xFFFF 取出两字节的复位向量送到程序计数器PC。片上外设模块不可用, I/O引脚初始化设为通用的高阻抗输入引脚无上拉。条件码寄存器(CCR) 的I 位被置位来屏蔽中断,所以用户程序有机会初始化堆栈指针(SP) 和系统控制设置。复位时, SP 被强制设为$00FF。

MC9S08AC16 系列包括下列复位源:

? 上电复位(POR)

? 低压检测(LVD)

? 计算机正常操作监控模块(COP)定时器

? 非法操作码检测

? 非法地址检测

? 背景调试强制复位

? 复位引脚(RESET)

? 时钟发生器失锁和丢失时钟复位

除了背景调试强制复位,每个源对应系统复位状态寄存器相应位。

2.1.3 存储器组织

图2-2描述了MC9S08AC16 系列MCU 的存储映像, MC9S08AC16 的片上存储器由RAM、非易失的flash 存储器、输入/ 输出(I/O) 和控制/ 状态寄存器组成。

这些寄存器分成三组:

? 直接页寄存器(0x0000-0x006F)

? 高地址页寄存器(0x1800-0x185F)

? 非易失性寄存器(0xFFB0-0xFFBF)

图2-2

2.2 显示模块硬件设计(LED显示电路设计)

在本课程使用的开发板上,采用74HC595和74HC138两块芯片作为数码管动态显示控制的扩展芯片,单片机将数码管显示需要的段码以串行数据的形式发送至74HC595接收,并由其转换成并行数据提供给数码管,位码则由74HC138 通过译码生成。具体电路连接如下:

图2-3

在电路连接中,74HC595通过SDATA、SCLK、SLATH与单片机的PTG2、PTG1、PTG0相连实现串行数据输入的控制,并在输出端通过D0~D7得到移位过会的并行数据作为数码管的段码。

通过上图可以看出74HC595的1至7脚和15脚通过一个电阻与数码管的断码相连,芯片的11脚和14脚分别连接时钟和数据,10脚和16脚上拉5V电源,8脚和13脚接地。

74HC138通过LEDSEL0、LEDSEL1、LEDSEL2、LEDEN与单片机的PTD1、PTD2、PTD3、PTG3相连,通过单片机向74HC138发送3位二进制码,译码后得到数码管的控制位码,并通过LED0~LED7控制8个三极管驱动数码管的位码控制。

图2-4

2.2.1 74HC595简介

74HC595是一款8位的串行输入,并(串)行输出的移位寄存器,可实现串并行转,具有3态输出,其移位寄存器和存储寄存器具有独立的时钟信号。

图2-5

74HC595芯片串行输入引脚为DS ,并行输出引脚为Q0~Q7(Q7也可作为串行数据输出,用于两块74HC595芯片级联),SH_CP 为移位寄存器时钟输入引脚,ST_CP 存数寄存器时钟输入引脚,输出使能引脚为OE 引脚(低电平使能),复位引脚为MR 引脚(低电平使能将移位寄存器的数据清零)。

表2-1

数据在SH_CP 时钟上升沿时触发移位寄存器数据移位,而在ST_CP 上升沿时将每个寄存器中的数据送入存储寄存器,下降沿时存储寄存器数据不变。

图2-6

2.2.2 74LS138简介

74HC138译码器是一款高速CMOS器件,可接受3位二进制加权地址输入(A0, A1和A3),当使能时可提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。

图2-7

2.3 串口通信模块电路设计

2.3.1 原理

串行通过串行通信协议,首先是起始位(低电位),然后是8位数据位,最后

是停止位。RS-232通信协议的发送端用的驱动电路将TTL电平转换成RS-232C电平。单片机包含两个独立的串行通信接口模块(SCI),通过对SCI控制寄存器和SCI数据寄存器进行设置,使SCIS1_TDRE==1才能将单片机里的值发送到计算机上。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。

b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。

c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步

2.3.2 电路结构

图2-8

2.4 测压模块电路设计

A/D转换模块是将电压信号转换为对应的数字信号。

原理介绍:ADC在通道上执行一次AD转换,将通道上的电压转换成数字结果,转换结束后,数字结果转换为8位放入到ADC数据寄存器ADC1RH和ADC1RL中,然后转换完成标志COCO=1.

S08单片机内部AD模块结构分为:时钟源模块、状态控制寄存器、配置寄存器、AD转换器、比较逻辑及模拟输入引脚。

ADC状态和控制寄存器(ADCSC1)的功能是:选取要转换的通道、决定转换结束数据获取的方式、设置是连续还是一次转换。写ADCSC1可以终止当前的转换并初始化一个新的转换。

图2-9

第三章系统软件设计3.1 A/D转换模块软件设计

AD模块初始化

void ADCINIT(void)

{ ADC1CFG=0x41;

ADC1SC1=0x1F;

ADC1SC2=0x00;

APCTL1=0x02;

APCTL2=0x00;

ADC1R=0X0000;

}

AD采样函数

unsigned int advalue()

{ unsigned int v;

ADC1SC1=0X01;

while(ADC1SC1_COCO==0);

v=ADC1R;

return v;

}

显示模块

void display(unsigned int a)

{ float vx;

a&=0X03FF;

vx=a*5.0/255.0;

ad_value[0]= ((int)vx)/10;

ad_value[1]= ((int)vx)%10;

ad_value[2]= ((int)(vx*10))%10; }

3.2 串口模块软件设计

SCI初始化

void SCIinit()

{

SCI1BDH=0X00;

SCI1BDL=0X1A;

SCI1C1=0X00;

SCI1C2=0X0c;

SCI1C3=0X00;

SCI1S2=0XC0;

}

串行通信发送函数

void send(unsigned char x)

{ while(SCI1S1_TDRE==0);

SCI1D=x;

}

串口显示

For(;;)

{ send(ad_value[0]+0x30);

send(ad_value[1]+0x30);

send('.');

send(ad_value[2]+0x30);

send(0x0a);

dy(900);

}

第四章系统测试与心得

4.1 系统测试

测试环境:PC机一台、下载器一个、开发板一块、RS232串口线一个

测试步骤:首先编好程序代码,确认编译无错误,然后用下载器连接PC 机与开发板,RS232串口线连接开发板,将编辑好的程序代码,编译,链接,下载,转动电位器,打开串口助手调试。

测试结果:运行后调整电位器,数码管显示正确的电压值会根据电位器的转动而改变电压值并通过串口线顺利上传至计算机。

4.2 实训心得

经过两周的单片机教程实训,让我学到了很多。此次课程设计软件与硬件相结合,考察了我们的焊接水平和编程能力。实训的第二天,我们便投入到焊接电路板的工作之中,真的是不焊不知道,一焊吓一跳。我们焊接的板子五花八门,有虚焊的,起大包的,冒尖的,至此终于明白自己的焊接水平有多差。所以我们更要加强练习,加强焊接技术。我们组抽到的题目是电压表远程数据显示。要求制作一个电压测量与数据传输装置,测量范围:0~5V,数值精度0.1V,测量值通过单片机的串行通信口上传至计算机端,并通过超级终端或串口助手显示当前测量值。在抽到这个题目的时候,感觉还不是太难,可到了真正编程的时候就出现了很大的障碍。当我们编好程序,经过第一次调试,串口上显示的是乱码。

我们进行了程序修改,但结果却不尽人意。通过老师的指导,我们组终于编好了程序,但在进行串口连接调试时还是显示乱码,我们更换了几个电路板,可结果还是有一点小遗憾,原因是我们在焊接电路时没有确切地测量电容值,故显示的结果有乱码的出现。

通过这次实训学习,让我对Fresscale单片机有了更深的了解,对一个系统的如何设计有了一定的体会。在现代化生活和生产中,单片机系统已渗透到我们生活的各个领域。同时在这次实验中,我体会到了合作的重要性,通过小组的分工明确,集思广益,可以使我们更好更快地完成我们的工作。在此期间,我们还可以更好地知道自己的不足和缺陷,做任何事都不能急于求成,错过一些细节,要把握好每一个细微处。本次实训还让我知道了自己的优势所在,让我们熟悉和掌握乐儿系统的软件、硬件设计的方法、设计步骤,我们集体讨论设计题目的总体方案、编程、软件硬件调试、编写实训报告,真正让我们懂得理论联系实际,

提高我们的动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的过渡。此外,本次实训培养了我们实事求是和严肃认真的工作态度,这也将为我以后的工作学习打下了良好的基础。

相关文档