嵌入式系统及接口技术研Word下载.docx
- 文档编号:19194106
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:13
- 大小:158.48KB
嵌入式系统及接口技术研Word下载.docx
《嵌入式系统及接口技术研Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及接口技术研Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.1节点设计
温度采集系统中的节点包含主控节点与采集节点两种类型,在硬件上的实现过程较为相似,其系统结构框图如下图2所示。
其中*号标注的为主控节点特有外设,#号标注的为采集节点特有外设。
图2基于STM32温度检测节点系统结构框图
3.2STM32核心
主控芯片采用STM32F103VET6,STM32系列32位微处理器采用ARMV7的Cortex-M3内核,接口丰富,外设完整,主频高达72MHz,使用3.3V电压供电。
内置有CAN控制器与FSMC控制器,简化了系统的实现过程[1]。
bxCAN(BaiscExtendedCAN)是STM32内置的CAN控制器,支持2.0A和2.0BCAN协议,最高速率可达到1Mbit/s。
其中包含3个发送邮箱,2组各包含3个接收邮箱的FIFO,14个可变位宽的过滤器组。
报文的发送和接收由CAN内核自动实现。
FSMC(FlexibleStaticMemoryController)是STM32内置的静态存储控制器,FSMC映射管理的1GB空间被分为4个BANK,LCD控制芯片中的Flash可以被映射到BANK1,在之后的显示使用中,只需更改映射后FSMC中BANK1的值即可对LCD的FLASH进行操作[2]。
3.3温度传感器
本系统采用的温度传感器是DS18B20“单总线”接口的温度传感器,与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。
该传感器测量温度范围为-55~+125°
C,精度为±
0.5°
C。
DS18B20数据端与STM32的GPIO口连接,因为要求上拉输出模式,所以可以直接使用GPIO口的IPU(上拉输入)模式,传感器的VDD端接5VDC。
3.4CAN外围收发电路
TJA1050是CAN控制器和物理总线之间的接口,是一种标准的高速CAN收发器。
输入级可与STM32的3.3V输出电压兼容,可以至少连接110个节点。
本系统的CAN外围电路如下图3所示,其中在芯片的S端口设置切换开关,用来选择正常/静默模式,发送接收端口直接与STM32的CAN控制器映射端口相连。
图3CAN外围驱动电路
3.5LCD显示器
本系统采用了分辨率为320×
240的26万像素TFT显示器,LCD控制器为ILI9325,其数据总线为16位,为了简化程序,使用STM32中的FSMC与数据总线连接。
4软件设计
4.1节点程序操作过程
主控节点用来接收采集节点发出的温度信息,处理数据并显示。
主控节点的主程序包括:
(1)初始化配置;
(2)CAN接收中断服务;
(3)转换温度信息程序;
(4)显示程序;
(5)报警程序。
采集节点的主程序分为三部分:
(2)与传感器通讯,获取温度数据;
(3)处理数据并发送至主控节点。
采集节点每隔一秒重复2、3两个步骤,实时发送更新温度数据。
主控节点的程序流程,如下图4所示。
图4主控节点程序流程图
4.2初始化配置
硬件通电后,各个节点需要初始化配置以激活各项功能,采集节点需要进行RCC(时钟)、GPIO(通用外围输入输出口)、CAN控制寄存器的初始化配置,主控节点除以上三种配置外,还需进行NVIC(中断)、FSMC和LCD的初始化。
下面简要介绍CAN控制器、LCD以及STM32时钟的初始化配置。
CAN控制器的初始化分为工作方式配置和过滤器配置,在本系统的初始化流程中只需要对CAN工作方式进行配置。
其中,波特率的设定是通过配置发送过程中各个环节的时间量子数和CAN的时钟关系实现的。
发送1个bit的时间NormalBitTime=Tq+TBS1+TBS2,这三个时间段的单位由设置CAN的Prescaler参数和系统时钟相联系。
本系统设定Tq=1,TBS1=3,TBS2=5,Prescaler=4,由公式
(1)可知:
=
(1)
其中CANCLOCK为AHB1=36MHz,可以算得波特率为1Mbit/s,设置程序如下:
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
//设置重新同步跳转的时间量子
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
//设置字段1的时间量子数
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
//设置字段2的时间量子数
CAN_InitStructure.CAN_Prescaler=1;
//配置时间量子长度为1周期
LCD在使用显示命令之前,需要进行一系列初始化配置,根据需求调节显示器的对比度、Gamma和显示区域等。
初始化完毕,在之后的显示程序中,只需调用显示函数,写入显示区域与颜色数据,即可完成目标。
下面函数的主要功能就是初始化STM32的时钟,其中还包括对向量表的配置以及相关外设的复位及配置。
代码如下:
VoidStm32_Clock_Init(u8PLL)
{
unsignedchartemp=0;
MYRCC_DeInit();
//复位并配置向量表
RCC﹣﹥CR∣=0x00010000;
//外部高速时钟使能HSEON
While(!
(RCC﹣﹥CR﹥﹥17));
//等待外部时钟就绪
RCC﹣﹥CFGR=0x00000400;
//APB1/2=DIV2;
AHB=DIV1;
PLL﹣=2;
//抵消2个单位
RCC﹣﹥CFGR∣=PLL﹤﹤18;
//设置PLL值2~16
RCC﹣﹥CFGR∣=1﹤﹤16;
//PLLSRCON
FLASH﹣﹥ACR∣=0x32;
//FLASH2个延时周期
RCC﹣﹥CR∣=0x01000000;
//PLLON
(RCC﹣﹥CR﹥﹥25));
//等待PLL锁定
RCC﹣﹥CFGR∣=0x00000002;
//PLL作为系统时钟
While(temp!
=0x02);
//等待PLL作为系统时钟设置成功
temp=RCC﹣﹥CFGR﹥﹥2;
temp&
=0x03;
}
}
4.3温度传感器通讯程序
DS18B20采用单总线模式,与其相连的GPIO口需要分时作为输入或输出端口。
单总线的通信以初始化序列开始,首先GPIO口输出500
的低电平,产生复位脉冲,然后释放总线,使总线被拉高15
60
,并将GPIO口置为上拉输入模式,等待60
240
的应答低电平。
成功接收传感器应答脉冲后,进行温度读取操作。
DS18B20输出的温度数据占2个字节,高字节数据中前4位为符号位,当温度为负数时,符号位为1,此时温度的绝对值用补码表示。
DS18B20温度读取程序流程如下图5所示。
图5DS18B20温度读取流程图
4.4CAN发送程序
采集节点与传感器通信后,将所获取的温度数据发送至主控节点。
因为每个采集节点控制2个温度传感器,所以在CAN的通讯协议中,用标准标识符表示节点号,用扩展标识符表示传感器号,便于主控节点的辨别。
然后将温度数据分两个字节发送至CAN总线。
发送报文前,需要对发送规则进行一系列配置。
以下是采集节点1传感器1温度数据的发送程序:
TxMessage.StdId=0x01;
//配置报文的标准标识符
TxMessage.ExtId=0x0001;
//配置扩屏标识符
TxMessage.IDE=CAN_ID_EXT;
//使用标准标识符+扩屏标识符方式
TxMessage.RTR=CAN_RTR_DATA;
//报文为数据帧
TxMessage.DLC=2;
//报文发送数据长度为2字节
TxMessage.Data(0)=k;
//发送第一字节
TxMessage.Data
(1)=(k﹥﹥8);
//发送第二字节
CAN_Transmit(CAN1,&
TxMessage);
//CAN1报文发送
4.5显示程序
为将转换为十进制的温度数据在指定位置显示,首先制作了含有英文与数字字符的1608简易字库,编写了在指定位置显示字符的程序。
显示过程中,首先显示欢迎界面,让采集节点的温度传感器完成初始化并稳定工作;
然后显示传感器号码等固定内容;
最后实时更新温度数据的符号位、整数位、小数位即可。
LCD字符显示程序流程图如下图6所示。
图6LCD字符显示程序流程图
4.6报警程序
程序中分别设定了每个温度传感器采集数据的最大标准值,当某传感器所采集温度超标时,使主控节点的LED灯闪烁并开启蜂鸣器,发出警报。
用户需要按键接收警报才能返回正常测温程序。
在实际应用中,可以连接报警器或制动系统,以及时排除故障。
5结束语
本文使用STM32作为主控芯片配合DS18B20温度传感器、CAN外围电路和LCD显示器,实现基于CAN总线协议的实时温度传感网络,并介绍了其硬件与软件设计与实现过程。
由于其硬件电路与软件设计都较为简洁,因而在电动摩托车温度传感网络上具有较好的应用前景。
参考文献
[1]李宁.基于MDK的STM32处理器开发应用[M].北京:
北京航空航天大学出版社,2008.
[2]潘辉.STM32—FSMC机制的NORFlash存储器扩展技术[J].单片机与嵌入式系统应用,2009(10):
31–34.
附录
温度传感器通讯程序
#include"
ds18b20.h"
delay.h"
//复位DS18B20
voidDS18B20_Rst(void)
{
DS18B20_IO_OUT();
//SETPA0OUTPUT
DS18B20_DQ_OUT=0;
//拉低DQ
delay_us(750);
//拉低750us
DS18B20_DQ_OUT=1;
//DQ=1
delay_us(15);
//15US
//等待DS18B20的回应
//返回1:
未检测到DS18B20的存在
//返回0:
存在
u8DS18B20_Check(void)
u8retry=0;
DS18B20_IO_IN();
//SETPA0INPUT
while(DS18B20_DQ_IN&
&
retry<
200)
{
retry++;
delay_us
(1);
};
if(retry>
=200)return1;
elseretry=0;
while(!
DS18B20_DQ_IN&
240)
=240)return1;
return0;
//从DS18B20读取一个位
//返回值:
1/0
u8DS18B20_Read_Bit(void)//readonebit
{
u8data;
//SETPA0OUTPUT
delay_us
(2);
//SETPA0INPUT
delay_us(12);
if(DS18B20_DQ_IN)data=1;
elsedata=0;
delay_us(50);
returndata;
//从DS18B20读取一个字节
读到的数据
u8DS18B20_Read_Byte(void)//readonebyte
u8i,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
j=DS18B20_Read_Bit();
dat=(j<
<
7)|(dat>
>
1);
}
returndat;
//写一个字节到DS18B20
//dat:
要写入的字节
voidDS18B20_Write_Byte(u8dat)
u8j;
u8testb;
//SETPA0OUTPUT;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)
//Write1
delay_us(60);
else
//Write0
//开始温度转换
voidDS18B20_Start(void)//ds1820startconvert
{
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);
//skiprom
DS18B20_Write_Byte(0x44);
//convert
}
//初始化DS18B20的IO口DQ同时检测DS的存在
不存在
存在
u8DS18B20_Init(void)
RCC->
APB2ENR|=1<
2;
//使能PORTA口时钟
GPIOA->
CRL&
=0XFFFFFFF0;
//PORTA.0推挽输出
CRL|=0X00000003;
ODR|=1<
0;
//输出1
returnDS18B20_Check();
//从ds18b20得到温度值;
//精度:
0.1C
温度值(-550~1250)
shortDS18B20_Get_Temp(void)
u8temp;
u8TL,TH;
shorttem;
DS18B20_Start();
//ds1820startconvert
DS18B20_Write_Byte(0xbe);
//convert
TL=DS18B20_Read_Byte();
//LSB
TH=DS18B20_Read_Byte();
//MSB
if(TH>
7)
TH=~TH;
TL=~TL;
temp=0;
//温度为负
}elsetemp=1;
//温度为正
tem=TH;
//获得高八位
tem<
tem+=TL;
//获得底八位
tem=(float)tem*0.625;
//转换
if(temp)returntem;
//返回温度值
elsereturn-tem;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 接口 技术
![提示](https://static.bdocx.com/images/bang_tan.gif)