成都学院学士学位论文(设计)
输出PWM信号,由此控制风扇直流电机的速度与启停。
图3-6 电机驱动电路 3.3 本章小结
本章主要介绍温度调控系统的硬件部分,本章节主要分成两部介绍了各部分的组成,首先根据实际要求制定出各部分的选择方案,然后确定最佳方案,之后根据选定方案进一步实现硬件电路,硬件系统主要由单片机最小单元,LED显示单元,按键设置单元和电机风扇模块组成。
成都学院学士学位论文(设计)
第四章 系统软件设计
软件设计部分是关键的一部分,在进行具体的编程实现之前,我们需要对总体结构进行分析,然后制定出总体流程图,软件测试平台的程序流程图如图4-1所示。
开始 SPI初始化 初始化UART串口 片 NT901初始化 LED初始化 定时器初始化 检测按键输入 采集温度 温度显示 温度调控 4-1 软件系统流程图
4.1 软件开发平台和开发语言
此部分的软件平台是以51单片机为控制核心的装置,这部分的软件设计部分的开发工具使用Keil平台,Keil平台是一个非常成熟的开发平台,Keil平台提供了各种单片机的启动程序,这使得开发人员可以把大部分的主要精力用在具体的功能设
成都学院学士学位论文(设计)
计实现上,减小了开发人员的开发阻力,并且在开发的过程中我们需要进行程序的测试,而Keil平台恰恰能满足这一功能的需求,Keil平台提供了各种调试工具,调试工具使我们可以快速的进行程序调试,同时由于Keil平台的流行,有很多的第三方库可以使用,资源非常丰富。
在进行51单片机的开发中,我们可以采用汇编语言或者高级语言C语言。汇编语言实质上机器语言的助记符。CPU只能运行它所支持的指令集,而这些指令集当中的每天条指令都是一些二进制数的序列,也就是“0”和“1”的有序组合;2.“0”和“1”的组合不便于程序员的记忆因此有了“MOV A 0x40”等这样的助记符,也就是说在程序员编写程序的时候,用“MOV A 0x40”来代替一串“0”和“1”的序列,这样一看就知道是吧“0x40”单元中的数据搬到累加器A当中来。而如果是用0”和“1”的序列,毫无特征,很难被程序员记住。这也是为什么要有汇编语言产生的原因了。根据以上部分的解释,我们可知汇编语言编译成CPU可执行的机器语言其实只要做一个翻译的动作就好了,因为,助记符与对应的二进制指令是一一对应的。因此汇编程序的效率非常高,但实际上汇编语言会因为各种控制器的不同,汇编语言会出现不同,从而导致程序十分难移植,通用性差。
C语言属于高级语言,但为了达到高效率和通用性之间的优秀折中,C语言并不是向C++、C#那样的面向对象的高级语言,它属于面向过程的编程语言,C语言在单片机编程方面的最大优势是通用性,在面向不同的单片机时,我们不必重新学习其语言,并且之前的其他程序可以完美的移植,同时随着编译器的逐渐发展,再将C语言编译成汇编语言时的效率高达70%,并且随着编译器的发展,效率还会提高。
综合上述考虑我们本次的设计选择在Keil平台进行开发,并且我们选择C语言作为开发语言。
4.2 UART串口系统部分实现
UART串口是异步串行传输串口,该总线双向通信,可以实现全双工传输和接收。UART串口是一种非常方便的串口,并且51单片机自带UART串口,我们仅需了解即可应用,我们可以不用普通IO口来模拟UART产口时序,为了与PC机通信我们需要将UART串口转为USB串口。图4-2为UART转USB串口线。 51单片机的设置如下
成都学院学士学位论文(设计)
TMOD=0x20; //设定T1定时器工作方式2
TH1=0xFD; //T1定时器装初值,12M晶振时为0XFD,32M晶振时为0XF7 TL1=0xFD; //T1定时器装初值,12M晶振时为0XFD,32M晶振时为0XF7 EA=1; //开总中断 ES=1; //开串口中断 ET1=0;
TR1=1; //启动T1定时器 SM0=0; //设置串口工作方式1 SM1=1; //设置串口工作方式1
SCON |= 0x50; //控制寄存器,用来设定串口的工作方式、接受/发送控制及设置状态标志等 REN=1;
由于UART串口是异步串口,在接收数据时我们需要利用中断,并且在中断处理函数中接收数据。
图4-2 UART转USB串口
4.3 SPI红外温度采集
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
红外温度传感器TN901是标准的SPI接口,但是51单片机自身并没有SPI接口,因此我们需要利用51单片机的普通IO口来模拟标准SPI串口的时序。在通过
成都学院学士学位论文(设计)
软件模拟SPI串口之前,我们首先需要认真的研究SPI串口的时序,然后根据串口的时序图编写各个部分的函数。SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图4-3所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
图4-3 SPI时序图
根据以上的时序图分析,我们需要首先编写初始化SPI串口函数void SPI_Init(),根据发送和接收时序图,我们编写了最基本的SPI字节的发送和接收函数驱动void IO_Send_Byte(uint8 dataout)和uint8 IO_Receive_Byte(),同时在使用SPI传输数据完成后,我们需要结束传送void SPI_End(),使用这些基本的驱动函数即可与传感器通信来采集数据。
TN901的数据格式 信息格式 Item MSB LSB Sum 其中各含义如下
Item :“L”(4CH): Tobj (目标温度) “f”(66H): Tamb (环境温度) MSB:8 bit Data 最高有效位 LSB:8 bit Data最低有效位 Sum:Item+MSB+LSB=Sum CR:0DH, 结束信息 4.4 电机风扇调节
电机风扇的转速快慢可以直接调节温度的升降,因此我们可以利用单片机来对
CR