LPC2132 matlab语音采集数据采集

LPC2132FBD64/01 数据表, Datasheet - Alldatasheet
数据搜索系统,热门电子元器件搜索
Selected language &
LPC2132FBD64/01 Datasheet, 数据表, PDF
&&LPC2132FBD64/01(2) 被推存结果.
ALLDATASHEET是否为您带来帮助?& &
All Rights Reserved(C)
2003 - 2016&& &
Mirror Sites
Chinese : &&|&&
Japanese : &&|&&
Spanish : &&|&&
French : &&|&&
Italian : &&|&&
Portuguese
: Alldatasheet.plLPC2132 调试记
最近公司开发一个新项目,出于成本的考虑,要求空间只能是32K+8K。选用LPC2131(ARM7 微控制器芯片芯片),同时也选择了UCOS-II实时操作系统。移植整个操作系统加上一些必备的驱动,总共花了12K。现在作个小结,简单的介绍下整个流程。(写得非常肤浅,新手而已,只是因为以前调过LPC2100开发板,所以经理将这个任务交给了我)(以前的项目是数据采集系统。上位机用的三星的 S3C2410,LINUX2.6.x内核,用QToptia用户界面+sqlite数据库,底层是SOCKET编程,下位机是菲利浦的LPC2100,主要用于采
集数据和AD转换(OS:usLinux, SOCKET编程+底层ADC驱动))
1、查看快速入门,快速掌握烧写FLASH和JTAG工具,ADS1.2。(相关工具在Software&Driver文件夹下)
(1)LPC2131 FLASH 工具:philips公司的LPC2100 Flash Utility V2.2.0 .
&&&&&(a)波特率设置为9600,时钟设为11050KHZ,time-ou[sec]:2(另外,buffer-&flashbuf operation-&Download flash 可以从flash上下载程序到本机后,再与本机的程序比较是否一致,选择Compare Flash时可以进行flash上程序的校验)
&&&&&&&& (b) &Upload to Flash&前先要P0.14对地拉低(将ISP(JP1)跳线),程序固化后,将ISP(JP1)跳线帽断开,重新复位系统即可运行程序。LPC2100 系列ARM7 微控制器芯片具有ISP 功能,可以通过串口进行程序下载。(这点非常重要,在我们公司的硬件出板后,我调试板子时,用JTAG调试,程序可以运行,但是用串口下载完程序,重新复位后没有一点反应。后来查过就是硬件设计上没有设置这个跳线。也没有按照如上的要求来进行程序的下载和运行。下载和运行时P0.14脚都为低电平。说明一直是在ISP模式下。)
(2)EasyJTAG-H和H-JTAG可进行硬件仿真调试(不知道有谁知道如何固化,敬请赐教)EasyJtag可以固化,但是我使用时,总是有错误出现,连接不到,网上查过错误原因,很多人有过这样的错误,但是没有找到解决方法。
(3)ADS1.2集成开发环境几个注意点:
(a)Debug Settings -&linker-&ARM Linker设置RO(或者指定.scf文件)
(b)Debug Settings -&Target-&Target Settings-&Post-Linker (ARM fromELF)
(c) Debug Settings -&Liker-&ARM fromELF 指定output format(Intel 32 bit Hex)
&&&&& 和output file name(/xx/xx/xxx.hex)
(d)指定生成的文件夹为DebugInRam,如果是RelInFlash的话,会对芯片加密,需
要用ISP全局擦除后,才能恢复JTAG 调试及ISP 读/写操作。
(e) ADX 配置好调试目标。Option-&configure Target-&ADD-& D:&Program
Files&H-JTAG V0.3.1目录下的H-JTAG .dll,点击“打开”即可。
Option-&configure Target -&Choose Target-&H-JTAG
2、快速运行示例代码。在此基础上进行修改可以省去很多时间。移植了UCOS-II操作系统,修改了I2C(模拟I2C),UART0, BEEP(用于测试),中断处理,用一个硬件时钟模拟多个软件时钟。参考网上代码后修改(作者:21icbbs LPC900,2005-08)示例代码见最后例1。
3、开发板上调试完毕后,关键在于板子出来后的调试。此时的问题,可能是硬件,可能是软件。需要软硬件配合调试。做好工作日志,因为此时的问题如果不做好记录,会导致大货时问题没有得到更改。比如前面提到的这次硬件设计上没有设计ISP跳线的问题。另外,开发板上的某些硬件可能与实际板子的有所不同,要稍加注意。如:我们公司出板时用的CPU是LPC2132,与LPC2131的不同是LPC2132是64K+16K,还有时钟更改了,不要忘记在代码中把时钟的值更改过来。其他的基本上没有什么问题,直接移植就可以了。现在还差的就是做个最小文件系统啦(留出一块空间512字节,可存储,可擦除,还要带CRC校验)啊,努力吧。要学的东西太多啦。
4、附带讲一下减少代码的一些办法。
(a)在startup.s中的跳转函数入口,不要写main函数,改为其它名字,也就是把自己的入口函数的名字改掉。因为如果是main入口的话,ads1.2会做一大堆全局变量的COPY和搬移。在用ADS单步调试时会发现在进入main之前会先做_main.这就是在做这些工作。但是如果这样做的话,要记得全局变量和静态变量RODATA段的初始值会丢失,需要在用这些变量前再赋下值。
(b)尽量不用或少用库函数,如atoi,strcmp,strcp等等,而是由自己去实现,这样可以减少链接一些不必要的库文件。
以上二者做的适中的话,可能可以减少10K的代码量
(c)UCOS_II.h中提供了内核裁减的可配置,轻松减少代码。
例1: target.c文件
//定义软件定时器数量(至少1个)
#define TIMER_N&& 8
//定义软件定时器结构
//每个定时器只占用2个字节
&&&& volatile unsigned TV:32;&&&&& && //32位定时值
&&&&&&&&&&&&&&& //作为参数被传入定时器处理函数
&&& void (*function)(unsigned long); //callback
&&&& volatile unsigned TR:1;&&&&&&&&& //起停标志,0-停止运行,1-开始运行
&&&& volatile unsigned TF:1;&&&&&&& && //溢出标志,0-未溢出,1-溢出
}Timer[TIMER_N];
&&&&& 利用定时器T0模拟多个软件定时器
原创作者:21icbbs LPC900,2005-08
更改:May Wong
&&&& 只占用一个硬件定时器T0,就可以扩展出多达数十个以上的软件定时器
&&&& 软件定时器基本定时单位是5ms,定时范围很宽:0.01~163.84s
&&&& 软件定时器数量可以按需要设定,
&&&& 利用定时器T0的自动重装特性,能够实现所有软件定时器的精确定时
&&&& 所有软件定时器都工作在32位倒计时方式,用TR和TF位控制,使用极为方便
&&&& 第0号定时器专门用于Delay()函数,其它定时器可供用户程序自由使用
函数:TimerOn()
功能:启动定时器
&&& &&&&&&&&&&&&& t:定时器初值,取&#
&&& &&&&&&&&&&&&& t&0时,定时(0.01*t)s
&&&& &&&& &&&&&& t=0时,定时163.84s
&&&&&&&&& && unsigned long data&&&&&&&&&&&&&&& :作为参数被传入定时器处理函数
 &&&&&&& && void (*function)(unsigned long): callback function
&&&&&&&&&&& return: -1(error)&&&&& else 定时器序号
int TimerOn(unsigned int t,unsigned long funpara,void(*function)(unsigned long))
&&&& INT32U da_year,da_mon,da_day,ti_hour,ti_min,ti_&& /*test start time*/
&&&& for (i = 1; i & TIMER_N;i++)
&&&&&&&&&&&&&&
&&&&&&&& if (Timer[i].TR == 0)
&&&&&&&& {
&&&&&&&&&&&& //Timer[i].TR = 0;
&&&&&& &&&& Timer[i].TF = 0;
&&&&&& &&&&& Timer[i].TV =
&&&&&& &&&&& Timer[i].TR = 1;
&&&&&& &&&&& Timer[i].function =
&&&&&& &&&&& Timer[i].data =
&&&&&&&&&&&&&
&&&&&&&& }
&&& if (i == TIMER_N)
&&&&&&&&&&&&& return -1;
&&& &&&&&&
函数:TimerOff()
功能:关闭定时器
&&&& n:定时器序号
void TimerOff(unsigned char n)
&&&& Timer[n].TR = 0;
&&&& Timer[n].TF = 0;
函数:Delay()
功能:延时0.01~163.84s
&&&& t:延时参数,取&#383
&&&& t&0时,延时(0.01*t)s
&&&& t=0时,延时163.84s
void Delay(unsigned int t)
&&& Timer[0].TR = 0;
&&& Timer[0].TF = 0;
&&& Timer[0].TV =
&&&& Timer[0].TR = 1;
&&& // TimerOn(t,NULL,NULL);
&&&& for (;;)
&&&&&&&& //PCON |= 0x01;
&&&&&&&& T0TCR |= 0x01; /*reset*/
&&&&&&&& if (Timer[0].TF)
&&&&&&&& {
&&&&&&&&&&&& TimerOff(0);
&&&&&&&&&&&&
&&&&&&&& }
/*********************************************************************************************************
** Function name:&&&&&&&&&&&&&&& Timer0_Exception
** Descriptions:&&&&&&&&&&&&&&&&&& Timer0 interrupt service function
** input parameters:&&&&&&&&&&&& None
** Returned value:&&&&&&&&&&&&&&& None
**&&&&&&&&
** Used global variables:&&&&&& None
** Calling modules:&&&&&&&&&&&&&& None
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
函数:Timer0_Exception()
功能:定时器中断服务函数,每(Fcclk / 4) * 1/ 200中断1次
void Timer0_Exception(void)
&&&& //TF2 = 0;
&&&& for ( i=0; i&TIMER_N; i++ )
&&&&&&&& //beep();&&&&&&&&&&&&& //beep ok
&&&&& &&& if (Timer[i].TR)
&&&&&&&& {
&&&&&&&&&&&&&&
&&&&&&&&&&&& if ( --Timer[i].TV == 0 )
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&& UART0Putch('0');
&&&&&&&&&&&&&&&& Timer[i].TF = 1;
&&&&&&&&&&&&& && &&&&&&& TimerOff(i);
&&&&&&&&&&&&& &&&&&&&& (Timer[i].function)(Timer[i].data);
&&&&&&&&&&&&& && &&&&&&& UART0Putch('0');
&&&&&&&&&&&&& && &&&&&&&& // beep();
&&&&&&&&&&&&& && &&&&&&&& //UART0Putch('0');&&&&&&&
&&&&&&&&&&&&& &&&& }
&&&&&&&&&&&&&
&&& T0IR = 0x01;&&&&&&&&&&&&& /* match tunnel 1 intrrupt flag 清除中断标*/&&&
&&& VICVectAddr = 0;&&&&&&&&&&& //interrupt close 通知中断控制器中断结束&&&
&&& OSTimeTick();
/*********************************************************************************************************
** Function name:&&&&&&&&&&&&&&& Timer0Init
** Descriptions:&&&&&&&&&&& &&&&&& Initialize the Time0
** input parameters:&&&&&&&&&&&& None
** Returned value:&&&&&&&&&&&&&&& None
**&&&&&&&&
** Used global variables:&&&&&& None
** Calling modules:&&&&&&&&&&&&&& None
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
&&&&&&& void Timer0Init(void)
&&&&&& for ( i=0; i&TIMER_N; i++ )
&&&&&&&& Timer[i].TR = 0;
&&&&&&&& Timer[i].TF = 0;
&&&&&&&& Timer[i].TV = 0;
&&& T0IR = 0&&&& &&&&&& /*timer intrrupt register&& 1 reset*/
&&& T0PR&& = 0;&&&&&&&&&&&&&&& &&&& /* 时钟不分频*/
&&& T0TC = 0;&&&&&&&&&&&&&&&&&&&& /*counter*/
&&& T0TCR = 0x01;&&&&&&&&&&&& /*counter control reginster 1 reset */
&&& T0MCR = 0x03;&&&&&&&&&&&& /*[0:1] 11&& tc reset/ intrrupt when match*/
&&& T0MR0 = (Fpclk / OS_TICKS_PER_SEC);&&& /*(Fcclk / 4) * 1/ 200 5ms 钟定时*/
/*********************************************************************************************************
** Function name:&&&&&&&&&&&&&&& VICInit
** Descriptions:&&&&&&&&&&&&&&&&&& Initialize the Interrupt Vevtor Controller
** input parameters:&&&&&&&&&&&& None
** Returned value:&&&&&&&&&&&&&&& None
**&&&&&&&&
** Used global variables:&&&&&& None
** Calling modules:&&&&&&&&&&&&&& None
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
&&&&&&& void VICInit(void)
&&& extern void IRQ_Handler(void);
&&& extern void Timer0_Handler(void);
&& extern void I2c_Handler(void);
&& extern void UART0_Handler(void);
&&& VICIntEnClr = 0&&&&&&&&&&&&&&&&&& /*clear interrupt*/
&&& VICDefVectAddr = (uint32)IRQ_H
&&& VICVectAddr0 = (uint32)Timer0_H/* 设置中断服务程序地址&&&&&&&&&&&& */
&&& VICVectCntl0 = (0x20 | 0x04);&&&&&&&&&&&& /* 设置定时器0中断通道分配最高优先级*/
&&& VICIntEnable = 1 && 4;&&&&&&&&&&&&&&&&&&&&&&&& /* 使能定时器0中断
&& VICVectAddr12 = (uint32)I2c_H
&&& VICVectCntl12 = (0x20 | 9);
&&& VICVectAddr14 = (uint32)UART0_H
&&& VICVectCntl14 = (0x20 | 0x06);
&&& VICIntEnable = 1 && 6;
/*********************************************************************************************************
** Function name:&&&&&&&&&&&&&&& TargetInit
** Descriptions:&&&&&&&&&&&&&&&&&& Initial it is called in a necessary place, change it as
**&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& needed
** input parameters:&&&&&&&&&&&& None
** Returned value:&&&&&&&&&&&&&&& None
**&&&&&&&&
** Used global variables:&&&&&& None
** Calling modules:&&&&&&&&&&&&&& None
********************************************************************************************************/
void TargetInit(void)
&&& OS_ENTER_CRITICAL();
&&& srand((uint32) TargetInit);
&&& VICInit();
&&& Timer0Init();
&&& I2cInit(100000);
&& UART0Init(115200);
&&& OS_EXIT_CRITICAL();
Main中测试代码如下:
#include &config.h&
#define TASK_STK_SIZE&&&&&&&&&&&&&&&&& 64
#define&& LEN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 50
//OS_STK&&&&&&& TaskStk[TASK_STK_SIZE];
OS_STK&&&&&&& TaskStartStk[TASK_STK_SIZE];
void TaskStart(void *data);
#define&&& BEEP&& (1&&7)&&&&&&&&&& /* P0.7引脚控制BEEP just test I2C */
void initbeep()
&&&&&&& /* 关闭BEEP */
&& &&& IO0DIR |= BEEP;&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /* 设置BEEP控制口为输出 */
&&&&& PINSEL0 = (PINSEL0 & 0xffff3fff);
&&&&& IO0SET = BEEP;&&
void beep()
&&&&&&& /*for test*/
&&&&&& IO0CLR = BEEP;
&&&&&& OSTimeDly(OS_TICKS_PER_SEC / 2);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /* 蜂鸣器响一声 */
&&&&&& IO0SET = BEEP;
/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: PC_DispClrScr,OSInit,OSTaskCreate,OSStart
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main (void)
&&&& OSInit();
&&& TargetInit();
&&& initbeep();
&& OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 5);
&&& OSStart();
&& return 0;
void testfun3(unsigned long para)
&& UART0Putch('3');
void testTimer()
&&&& /* -1 not enough timer else return timer No.*/
&&&&&& if(TimerOn(800,10,testfun3) == -1)&&&&&&
&&&&&&&&&&&&& beep();&&& &&&&&&&
&&&&&& else
&&&&&&&&&&&&& UART0Putch('n');&& && //ok
/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
********************************************************************************************************/
void TaskStart (void *pdata)
&&& pdata =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /* 避免编译警告 */
&& /*test timer0*/
&& testTimer();
&& while(1)
/*********************************************************************************************************&&&&&&& End Of File***************************
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:80424次
积分:1095
积分:1095
排名:千里之外
原创:17篇
转载:92篇
(3)(5)(3)(3)(1)(5)(1)(19)(16)(6)(7)(7)(33)基于LPC2132和DS18B20的单总线数字测温系统设计
查看: 463|
摘要: 基于LPC2132和DS18B20的单总线数字 测温系统设计 常君,刘坤,安毅,许晓丽,张永新 (大连恒为电子有限公司大连116023) 摘要:本文介绍一种新型嵌入式数字测温系统,该系统采用美国DAM。AS公司生产的单总线数字温度传 ...
基于LPC2132和DS18B20的单总线数字
测温系统设计
常君,刘坤,安毅,许晓丽,张永新
(大连恒为电子有限公司大连116023)
摘要:本文介绍一种新型嵌入式数字测温系统,该系统采用美国DAM。AS公司生产的单总线数字温度传感器
DSl8820为核心测温元件,以ARM7(LPC2132)为微处理器,给出了该系统的电路硬件设计与软件实现方法,并
针对它在智能家居控制系统应用中出现的与硬件和软件有关的问题给出了解决方法。该系统具有结构简单、测
温准确等特点,可作为一种新型的数字测温系统。
关键词:数字温度传感器;单总线;DS18B20;LPC2132
中图分类号:TU976 文献标识码:B
Design of 1-wire bus digital measuring temperature system
based on LPC2132 and DSl8820
Chang Jun,Liu Kun,An Yi,Xu Xiaoli,Zhang Yongxin
(Dalian ttengwei Electron Co.Ltd,Da lian 116023,China)
Abstract:This paper designed a new type of embedded digital measuring temperature system,u—
sing ARM7(LPC2132)as microprocessor and DSl8820 as main temperature transducer.We
gave some answers about hardwares and shoft to this system when using it in intelligent home
control system.The character of DSl8820 and notices in using was introduced。the hardwares
design and pivotal programme code was given.it’S configuration is simple,it cammeasure tem—
perature exactly,and it is a new type of embedded digital measuring temperature system.
Keywords:digital temperature ransducer;1-wire bus;DSl8820;LPC2132
在智能家居控制系统中,需要对空气温度进
行测量。传统的测温方案是将传感器采集到的模
拟信号经过处理后传输至A/D转换器,完成数字
化处理,而在实际应用中必须要考虑到器件体积、
转换速度、转换精度、抗干扰能力等问题。当采
用数字温度传感器在测试点就可以完成信号的
数字化,减少了数据采集过程,提高了传输的可
靠性,同时简化了外围电路。本文介绍一种采用
数字温度传感器测量温度自:方案,温度传感器采
ELECT只QNClii盈丽
用基于单总线(1-wre bus)技术的可编程数字温
度传感器DS18B20,控制器采用32位ARM微
控制器LPC2132。ARM处理器完成对数字温
度传感器信号的采集、处理、送显示功能,并与远
端网络接口通讯,实现了远程上传到PC的功
本系统的技术指标要求如下:
(1)采集温度,精度达到0.5℃;
(2)实时显示温度;
(3)具有远程通讯功能,可以将采集的温度定
期远程上传到PC。
根据系统的技术指标,选择LPC2132作为微
处理器,DSl8820作为温度传感器。本系统由温度
采集、微处理器、界面显示3部分组成。整个系统
其工作原理如图1所示。
主控制芯片
图1系统框图
1.1硬件设计
1.1.1微处理器选择
微处理器选用LPC2132,为控制单元,该芯片
是一种支持实时仿真和跟踪的16/32位基于
ARM7TDMI-S内核的CPU。带有64 KB的高速
Flash存储器,4个通信接口,2个32位定时器,1
个10位8路ADC,2个硬件铁电接口,外部多达
47个与TTL电平兼容的通用I/O口,非常适用
于作为主控单元。在本系统中主要完成测温、数
据处理、显示、与远程网络通讯传输功能。
1.1.2温度传感器选择
DSl8820是DALLAS公司生产的单总线式
数字温度传感器,具有3引脚TO一92小体积封
装形式;温度测量范围为一55~+125℃,可编程
为9~12位A/D转换精度;测温分辨率可达
电蚤.趣gi瑟
0.062 5℃;被测温度用符号扩展的16位数字量
方式串行输出;其工作电源既可在远端引入,也可
采用寄生电源方式产生;多个DSl8820可以并联
到3根或2根线上;CPU只需一根端口线就能
与诸多DSl8820通信,占用微处理器的端口较
少,可节省大量的引线和逻辑电路。以上特点使
DSl8820非常适用于远距离多点温度检测系
1.1.3中文界面显示
测量结果需要有中文显示,因此选用128×64
点阵、8位数据线、5位控制线、带有对比度调节功
能、单+3.3 V供电、单色液晶显示模块。
1.1.4引脚接口
微处理器LPC2132与DSl8820之间采用普通
I/O操作方式,引脚P0.21与数据线相连,加一个
上拉电阻4.7 kt'l,另外2个脚分别接电源和地。本
文主要通过对I/0引脚的电平读写来完成单总线
的通讯,采用ARM内部的定时器产生中断来完成
有时隙要求的工作。
微处理器工作晶体选用12.000 MHz。程序代
码采用嵌入式C语言编写,在ADSl.2编译环境中
进行,结构清晰,便于移植。
1.2软件设计
应用程序结构采用循环方式。主程序经初始
化后,分别调用测温函数测温、显示函数显示、调用
发送数据函数发送数据,判断是否到设定的时问,
当时间到后,重新执行。
在启动DSl8820温度转换前需要对
DSl8t320参数初始化,包括跳过ROM操作指令、
存储器操作指令、报警上下限、设定转换分辨率
等。这些命令操作由复位脉冲、应答脉冲、写、读
时序等几种信号类型构成。与DSl8820进行通
讯主要完成以下3个基本子程序:初始化程序(复
位程序)、‘读’子程序,‘写’子程序。DSl8820数
据接口采用单总线控制形式,对单总线接口控制
具有较严格的通信协议,以保证数据访问的完整
闻、、...../
初始化DSl8820
一I k<≤多●Y
写DS I 8820命令,
跳过ROM命令设置
长时J'HJ延时
初3晗化DSl8820
写Dsl8820命令,开始测温
循环取得温度
图2软件流程图
2实验结果及注意事项
2.1实验结果
根据以上所述方法,已经设计并做出了温度测
控装置。用该装置对室内空气温度进行测试,对
DSl8820采用11位A/D转换精度设置,其结果如
表1所示。表1中标准温度是采用标准水银温度
计的读数。
表1温度测量测试结果
实验结果表明,该温度测量装置能够满足设计
要求。温度设置精度越高,温度误差频率变化越
快。为了在显示中达到稳定,可以通过软件形式来
修正结果。
2.2注意事项
DSl8820具有测温系统简单、测量精度高、连
接方便、占用口线少等优点,但经实验和现场调试
中,发现了一些应注意的事项。
(1)I]S18820从测温结束到将温度值转换成数
字量需要一定的转换时间,这是必须保证的,不然
会出现转换错误的现象,使温度输出总是显示85。
(2)在实际使用中发现,应使电源电压保持在
3 V以上。若电源电压过低,会使所测得的温度与
实际温度出现偏高现象。
(3)由于DSl8820控制时序较严格,为保证
DSl8820的严格I/O时序,需要做较精确的延时。
在对DSl8820进行读写编程时,必须严格保证读
写时序,经仔细调整,在反复的调试中找出合适的
延时时间。
(4)当单总线上所挂DSl8820超过8 h,就需
要考虑总线驱动问题。
(5)DSl8820工作时电流高达1.5 IIA,当总线
上挂接点数较多且同时进行转换时要考虑增加总线
驱动,可用一个MOSFET到电源,提供一个强上拉。
(6)为防止程序将进人一等待的死循环中,在
程序等待DSl8820发出的存在信号时,最好设置
一有限的等待时间。
DSl8820能够很好地解决传统温度传感器的
一些常见问题,并且可在一线上多点测温,使用简
单。我们将DSl8820应用于自行开发的“嵌入式
远程智能家居控制系统”中,其构成系统简单,测量
精度高,转换速度快,占用口线资源少,给硬件设计
工作带来了很大的方便,能够有效地节约成本,缩
短了开发周期,完成了预定的测试任务。
[1]周立功.ARM与嵌入式系统的基础教程EM].北京:
北京航空航天大学出版社,2004.
(下转第89页)
电蚤麴gi豇
日一EC丁.RQNCl睡g翮
意传感器功戆,建立频率一速度型传感器,透丽可得我刻的速度值,可与光电门测速值进行毙对。
到速度曲线。频率一速度传感器曲线如图6所示。
4系统中的闻题分析
’ 鼹6频率一速度传感器越线
3.3光电门触发检测
为了毙对速度,这里测量通过光电门时多普勒
频移。把DM3064表笔接到多普勒系统的差频输
出端,按照任意传感器的设置方法设置好频率一速
度对应关系。选择魅发源为外部触发,并把触发电
缆引到光电门的整形输出端。
嚣己置好后,每经过光电门一次,DM3064盟示
按照上述方案搭建的系统符合预期要求,能够
较好的完成精灌的多普勒测速功能。健在测量中
发现速度曲线的起始段发生畸变。借助DM3064
强大的高速采集功能分析初始段波形。发现出现
的是尖峰于撬。分析褥知是黧动有裂泡视瞬澜所
致的干扰,调整电刷两线与地间电容后,使用Data-
Log功能再次查看,干扰有效的得到解决。
RIGOL RIGOL DM3064的引入大大加快了
系统的开发进程,更便于系统各部分功能模块的测
试与故障分橇。任意传感器与高速数据采集功麓
使台式数字万用表与系统融为一体,承担起系统的
功能,在可行性验证以及系统调试时是十分必要
(上接第45页)
[2] 周立功,张华。深入浅出ARM7一LPC213X/
214X(上)(下)E~rj.北京:北京航空航天大学
出舨社,2006。
[3]DALI.S公司DSl8820 DataSheet[EB/
oL].http//:www.dalsemi.corn.
胡振宇,划鲁源,杜振辉。DSl8820接瓣的e
语言程序设计EJ].单片机与嵌入式系统应
用,2002(1):35-39.
吴江,陈尚松.单总线技术在测控系统中的
应用EJ].电测与仪表,):34—36.
罗文广,兰红荔,隧子杰。基于单总线的多点
温度测量技术Ⅱ].传感器技术,2002,21
(3):47-50.
刘呜,陈兴梧,赵煜.单总线技术及其应用
D]。仪表技本与传感器,2002(1):40—42。
Dallas Semiconductor Data Books[Z].Dal—
hs Semiconductor Corporation,2000.
常君,男,工程师,生要研究方向为嵌入式系统与自动
绣址:辽宁大连枣高耢匿区七瑟岭基建爱瑟街32号,
E-mail:ehangjunxy@163.com
乓哇醚鲤试
f:隧eT穷Q瞄1ll穗黼】
Copyright &

我要回帖

更多关于 matlab语音采集 的文章

 

随机推荐