<?xml version="1.0" encoding="GBK"?>
<?xml-stylesheet href="/style/rss.css" type="text/css"?>
<rss version="2.0" xmlns:eb="http://blog.tom.com/">
<channel>
  <title>单片机学习</title>
  <link>http://blog.tom.com/coolnie888</link>
  <description><![CDATA[单片机学习博客网集单片机学习,单片机编程. ]]></description>
  <language>zh</language>
  <generator>newblog.tom.com RSS</generator>
  <pubDate></pubDate>    <item>
		<title><![CDATA[ 基于C51的多任务机制及应用 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3320.html</link>
		<description><![CDATA[ <p><strong>引言<br></strong>&nbsp;&nbsp;&nbsp; 传统的单片机程序一般采用单任务机制，单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行，缺乏灵活性，只能使用中断函数实时地处理一些较短的任务，在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中，可以同时执行多个并行任务，任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时，也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要，本文设计的这种简单的多任务机制，在只增加极少量C语言代码的前提下，不需使用汇编，无需对原本的程序进行大改动，就可以实现多任务操作。<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;实时操作系统RTOS的核心是中断，利用中断进行任务切换。在大部分RTOS如μC/OS-II中，每个任务都有自己的堆栈，用来保存任务的一些信息，任务之间通过信号量、邮箱、消息队列等传递信息。在很多情况下并不需要这些功能，只需要使单片机在接收到控制信号后，切换到不同的工作状态，也就是只要进行任务切换，不需要保存任务的相关信息。舍弃这些复杂的功能可以使程序结构变得简洁易用。</p>
<p><strong>两种机制在应用实例中的比较<br></strong>&nbsp;&nbsp;&nbsp; 下面用一个应用实例来说明本设计的思路。要设计一个智能安防系统，它的功能包括：当有人入侵时执行报警工作；用户可以通过键盘板进行功能设置；主板能与管理中心进行通讯，当发生火灾、地震等灾情时，管理中心能通知用户。其结构如图1所示。平时状态下，主板的CPU不断地扫描各个传感器的状态。当检测到传感器的异常信号（有人闯入）时，CPU进入入侵报警状态，执行响警铃、拨打户主电话、通知管理中心等工作。当发生火灾地震时，管理中心发送一个串口代码给主板CPU，使CPU进入灾难报警状态，执行响警铃、语音报警等操作。用户需要进行功能设置时可以通过键盘板使主板CPU进入功能设置状态。因此主板的CPU有4种不同的工作状态。</p>
<p><img alt="" src="http://www.avrw.com/article/pic/2006125155441734.jpg" border="undefined"><br>
&nbsp;<br>
图1&nbsp; 智能安防系统结构示意图</p>
<p>&nbsp;&nbsp;&nbsp; 如果采用单任务机制, 主板的程序流程如图2所示。在主函数中循环检测传感器状态,如有异常则调用报警函数，灾难报警和功能设置在串口中断中完成。这种单任务结构有两个缺点。首先，在各种非平时状态中，程序需要不停地检测是否收到撤除信号，这个要求在程序代码量大、执行工作较多的情况下很难实现。其次，各状态之间的切换十分困难，用C语言写的程序为求模块化，一般函数数量较多，函数调用的嵌套层数也多，要从一个较深的嵌套立刻跳出到主函数，是非常困难的。一般的解决方法或是使用C51的库函数setjmp()和longjmp()实现长跳转，但是这两个函数在中断函数内部是无能为力的；再或是在C函数中嵌入汇编指令。虽然用汇编指令可以实现程序的长距离跳转，但是这种方法的调试过程十分烦琐，而且程序的可移植性差。对于习惯用C51编程而不想用汇编的设计者，该部分程序是一个难题。</p>
<p><img alt="" src="http://www.avrw.com/article/pic/2006125155442580.jpg" border="undefined"><br>
&nbsp;图2&nbsp; 单任务机制程序流程</p>
<p><strong>实现多任务机制的程序结构<br></strong>&nbsp;&nbsp;&nbsp; 本文提供了一种方法，可以在完全不使用汇编指令的前提下实现可移植性强的多任务程序，程序流程如图3所示。<br>
&nbsp;<img alt="" src="http://www.avrw.com/article/pic/2006125155442621.jpg" border="undefined"><br>
<br>
图3&nbsp; 多任务结构程序流程</p>
<p>&nbsp;&nbsp;&nbsp; 实现这个多任务机制的完整源代码如下：<br>
word idata PC_Value, SP_Value;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://储</font>存中断返回点、SP初值的全局变量<br>
byte idata Ctrl_Code;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://控</font>制任务切换的全局变量，在中断函数里被赋值<br>
void main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
{<br>
&nbsp;Initial();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://初</font>始化函数，与程序结构无关<br>
&nbsp;SP_Value=SP;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 <font color="#003399">file://获</font>取ＳＰ的初始值<br>
&nbsp;&nbsp;&nbsp; PC_Value=Get_Next_PC();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://获</font>取下一条指令的地址<br>
&nbsp;EA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://获</font>取PC、SP初值后再开中断保证稳定性<br>
&nbsp;if(Ctrl_Code!=0)<br>
&nbsp;&nbsp;&nbsp; SP=SP_Value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://重</font>置堆栈指针，防止堆栈溢出<br>
&nbsp;&nbsp;&nbsp; switch( Ctrl_Code)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://任</font>务入口地址，即中断的返回点&nbsp;<br>
&nbsp;{<br>
&nbsp;&nbsp;case 1: &nbsp;&nbsp;goto&nbsp;&nbsp;TASK1;<br>
&nbsp;&nbsp;case 2: &nbsp;&nbsp;goto&nbsp;&nbsp;TASK2;<br>
&nbsp;&nbsp;case 3: &nbsp;&nbsp;goto&nbsp;&nbsp;TASK3;<br>
&nbsp;&nbsp;default:&nbsp;&nbsp;break;<br>
&nbsp;}<br>
TASK1:&nbsp; for( ; ; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://任</font>务1代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
TASK2:&nbsp; for( ; ; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://任</font>务2代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
TASK3:&nbsp; for( ; ; )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#003399">file://任</font>务2代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
}<br>
word Get_Next_PC(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#003399">file://获</font>取下一条指令的地址<br>
{<br>
&nbsp; word address;<br>
&nbsp; address=*((unsigned char *)SP); &nbsp;&nbsp;&nbsp;<font color="#003399">file://PC</font>的高字节<br>
&nbsp; address &lt;&lt;= 8;<br>
&nbsp; address+=*((unsigned char *)(SP-1));&nbsp;&nbsp;<font color="#003399">file://PC</font>的低字节<br>
&nbsp; return address+4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#003399">file://查</font>看反汇编代码，计算所得<br>
}<br>
void Chuan_Kou_Interrupt(void) interrupt 4 using 0<br>
{<br>
&nbsp;&nbsp;&nbsp; byte a1,a2;<br>
&nbsp;a1=a1*a2;<br>
&nbsp;*((unsigned char *)(SP-5))=PC_Value&gt;&gt;8;<br>
&nbsp;*((unsigned char *)(SP-6))=PC_Value &amp; 0x00ff;<br>
&nbsp;{<br>
&nbsp;&nbsp;&nbsp; &nbsp;<font color="#003399">file://接</font>收串口代码并根据代码修改Ctrl_Code的值<br>
&nbsp;&nbsp;<font color="#003399">file://其</font>他操作<br>
&nbsp;}<br>
&nbsp;}</p>
<p><strong>任务调度原理与实现<br></strong>&nbsp;&nbsp;&nbsp; 程序的整体思路是在主函数main中依次放置几个死循环作为任务框架，即每个任务都是一个死循环，利用中断进行任务切换。以刚才所说的安防系统为例，由于主板、键盘、管理中心之间是通过串口通讯的，因此串口是用来触发任务切换的理想中断源。程序为所有任务设置一个总入口并放在主函数中，串口中断每次返回时必须先经过这个总入口，在总入口处检查任务控制变量（全局变量）的值，任务控制变量已在串口中断中被赋值，其值决定要切换到哪个任务。<br>
<br>
　　设计中可以把平时状态、入侵报警状态、危机报警状态、功能设置状态分别作为任务１、任务2、任务３、任务４。主板CPU平常工作在平时状态，即任务１；当串口收到管理中心的危机代码，在串口中断函数中令Ctrl_Code = 3，中断返回后会切换到任务3；同样，接收到键盘的功能设置代码后，会切换到任务4；由于入侵检测是由主板CPU自己负责，因此如果检测到有人入侵需要切换到入侵报警状态时，可以借由键盘中转产生串口中断，即向键盘发送一串口数据并要求键盘回送。这样就实现了各个状态的切换。<br>
<br>
　　实现任务调度需要解决3个关键问题：<br>
<br>
　　① 获取任务入口点的程序地址。由于使用C语言不能直接获取和修改程序计数器PC的值，而在调用函数时会将PC值入栈，利用这个特点在任务入口处之前调用Get_Next_PC函数即可从堆栈中获得入口地址。Get_Next_PC中，SP为堆栈指针，得到的PC值要加4才是任务入口地址，因为查看反汇编窗口可知，将函数返回值传给全局变量PC_Value需要两条2字节长的mov指令。<br>
<br>
&nbsp;&nbsp;&nbsp; ② 修改中断返回地址。修改中断返回地址的操作与获取PC值类似，都是通过修改堆栈中的内容实现。但是由于编译器自身的特点，在进入中断时，编译器除了把返回地址入栈外，还会计算自身及它所调用的函数对寄存器ACC、 B、 DPH、 DPL、 PSW、 R0 ～ R7的改变，并将它认为被改变了的寄存器也入栈保护。如果堆栈结构会随中断函数内容改变而变化，就没办法计算中断返回地址堆栈中的位置。解决方法是，在中断函数定义时加上关键字using 0 告诉编译器中断函数及其调用的函数将使用寄存器组0，这样工作寄存器R0～R7将不会被保存。ACC、PSW、DPH、DPL在对PC_Value操作时已经用到，在中断函数开头定义两个变量a1、b1并令它们相乘，使B寄存器也被入栈，这样堆栈的结构就是固定的了。<br>
<br>
　　　③防止堆栈溢出。由于在调用函数时编译器会将当前地址入栈，返回时再出栈，当任务切换即中断多次发生在函数调用过程中时，堆栈会因为只入不出而最终导致溢出。这是不能容许的。因此，应在主函数开头初始化后立刻将ＳＰ值保存，再在每次任务切换后都将ＳＰ恢复为初值，这可以有效防止堆栈溢出。</p>
<p><strong>结语</strong><br>
　　根据以上的比较与分析可以看出这种实现多任务机制的方法具有如下优点：与采用单任务机制的程序相比，其结构简单清晰，易于控制；利用中断和堆栈实现任务切换时的长跳转，完全不需使用汇编语言，可移植性强；增加的代码量极小，实时性好，节省程序开发时间。<br>
<br>
&nbsp;&nbsp;&nbsp; 以上介绍的方法已经通过测试并应用于几个实际项目中，包括智能小区安防系统、汽车CAN总线控制系统等，取得了良好效果。只要根据具体的硬件与编译环境稍作修改，亦可应用于其他的单片机系统中。<br>
<br>
参考文献<br>
1.&nbsp;张培仁. 基于C语言编程MCS-51单片机原理与应用. 北京：清华大学出版社, 2003.1.<br>
2.&nbsp;胡大可等. 基于单片机8051的嵌入式开发指南. 北京：电子工业出版社, 2003.1<br></p> ]]></description>
		<eb:creationDate>2008-04-16 16:51:35</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ MSP430的血糖仪设计 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3319.html</link>
		<description><![CDATA[ &nbsp;当前市场上血糖仪种类繁多，外形结构千奇百态，而价格和精度却大相径庭；且价格和精度难以兼得。原因在于没有找到一款合适的微处理器。另外，出于屏幕尺寸的限制，界面普遍采用英文字符显示，这给中国病人上带来一定的困惑。<br>
随着电子技术的发展，微处理器功能日益增强，价格日趋降低。有必要选出一款功能强大而价格便宜的微处理器来重新设计血糖仪。本系统选用的MSP430系列微处理器使上述设想成为可能。
<div><strong>原理<br></strong>&nbsp;&nbsp;&nbsp; 血糖仪是根据电生物化学原理——施加一定电压于经酶反应后的血液产生的电流会随着血液中的血糖浓度的增加而增加——设计的。通过精确测量出这些微弱电流，并根据电流值和血糖浓度的关系，反算出相应的浓度。所以，确定这个关系是问题的核心。但其关系复杂，受多方面因素影响。电压强度、所使用的试条以及检测的血液量都会对其产生影响。理论上需要在所有浓度点上大量实验才能确定最终的关系。在实际操作中，只需在选择若干重要浓度点做大量实验，并确定其与电流值之间的关系。而相邻浓度点之间用简单的线性关系取代。图1是本设计总结出一定量电压下的关系曲线。</div>
<div><strong>系统硬件设计<br></strong>&nbsp;&nbsp;&nbsp; 根据血糖仪功能的实际需求，结合MSP430系列单片机特点，采用型号为MSP430F435的单片机作为控制核心，其它模块还有电流检测、按键输入和电源、显示、扬声器及串口通信等。如图1所示。</div>
<div><img alt="" src="http://www.avrw.com/article/pic/2006125155528734.jpg" border="undefined"><br>
&nbsp;<br>
图1 系统组成<br>
<br>
<strong>MSP430F435单片机<br></strong>&nbsp;&nbsp;&nbsp; 本系统选用的单片机MSP430F435具有16Kb Flash存储器、512B RAM、多达160段LCD驱动器、8通道/12位ADC及大量的I/O端口等，完全满足本血糖仪的各项功能需求。</div>
<div><img alt="" src="http://www.avrw.com/article/pic/2006125155528580.jpg" border="undefined"><br>
&nbsp;<br>
图2 微处理器的端口设置<br>
<br>
&nbsp;&nbsp;&nbsp; 主要端口设置如图2所示。其中COM0~COM3、S16~S39、R03~R33用于实现LCD显示； Port74和Port75用于串行通信；Port79~Port81为按键的输入端；Port76和Port77分别为运算放大器和RS-232芯片提供供电电压。Port78连接蜂鸣器；Port2和Port3为ADC输入；Port7参考电压输出；XOUT和XIN连接32KHz的晶振，这是系统的时钟源。<br>
<br>
LCD显示<br>
&nbsp;&nbsp;&nbsp; MSP430F435具有液晶驱动功能，最大能支持160段LCD，并且具有功耗低等特点。本系统采用中文界面的LCD显示，这也是本款血糖仪的一大特点。此LCD有96码段，内容丰富、功能强大。极大地方便了国内病人的使用。<br>
<br>
血糖检测<br>
&nbsp;&nbsp;&nbsp; 从原理中已经知道，测量血糖时需要在相应的电极上施加一定的电压，而电压的稳定性将直接影响测量结果，因此，考虑从相对稳定的参考电压得到，而不是直接从供电电源中得到。<br>
<br>
&nbsp;&nbsp;&nbsp; MSP430单片机A/D采样的是电压值，而被检测的是微量的电流值；因而也需要将电流值放大并转换成相应的电压值。采用如图3所示的电路就能实现这一要求。其中，电阻R用于放大。此外，过少的血液量也将造成结果偏差；所以有必要设计一个用于检测血液是否足量的简单电路。而此电路完全可以用与图3相同的电路来代替。因此采用两个这样的电路就可以实现血糖测量。</div>
<div><img alt="" src="http://www.avrw.com/article/pic/2006125155528621.jpg" border="undefined"><br>
&nbsp;<br>
图3 放大电路<br>
<br>
其它模块<br>
&nbsp;&nbsp;&nbsp; 本系统的供电电压为3V，采用两块电池。其中一块是主供电源；另一块为备用，以便设备在换电池时仍能正常工作。<br>
<br>
&nbsp;&nbsp;&nbsp; 按键采用三个，分别是左键、右键和OK键；OK键主要用于开、关机和确认等，左键用于数字减或选项左移等，而右键则与左键相反。<br>
<br>
&nbsp;&nbsp;&nbsp; 由于血糖仪中存有大量的测量结果，因此有必要增加串口通信功能，将这些结果上传到PC作进一步处理。而单片机本身就具有串行通信接口，只需将TTL电平转化为RS-232电平即可；这里采用SP3232芯片来实现这一功能。SP3232芯片所需的供电电压低，适合便携式设备应用。其外围电路的连接简单，仅需几个0.1F的电容即可。</div>
<div><strong>系统软件设计<br></strong>&nbsp;&nbsp;&nbsp; 系统软件采用C语言编写。其主程序框架如图4所示。</div>
<div><img alt="" src="http://www.avrw.com/article/pic/2006125155528360.jpg" border="undefined"><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图4 主程序框图<br>
<br>
&nbsp;&nbsp;&nbsp; 对于便携式设备，电池寿命至关重要；设计时应尽量降低功耗，使系统尽可能长时间停留在低功耗状态。因此，考虑设备在适当的时候自动关机。这里采用了一个定时器。当定时器大于0时，系统处于开机状态；当定时器倒数到0时，系统自动关机。这个定时器是由单片机中的Basic Timer实现的。通过软件对Basic Timer控制寄存器进行设置，将信号源设为辅助时钟，大小为32KHz，并进行256分频，再对中断定时间隔控制位进行设置，使得中断每秒进行一次，并且每次到来时都对定时器减1，这样就实现了定时器每秒减1的功能。具体操作是这样：开机时，对定时器初始化一个大于0的值，比如30，并且在每按一次有效键时，系统重新初始化这个值。因此，当没有按任何有效键时，30秒后就会自动关机，从而实现省电目的。<br>
系统也具有实时时钟功能，它的实现方式与上述的定时器类似。只是将“每秒减1”改为“每秒加1”；具体操作：每次中断时都对秒变量进行加1，当秒变量的值变为60时，就对分钟变量加1，而秒变量又重新从0开始计数；同样，当分钟变量累加到60时，就对小时变量加一，而自身又从0开始计数。依次类推，就可以实现实时时钟和日期功能。<br>
<br>
&nbsp;&nbsp;&nbsp; 为满足个性化需要，还增加了时钟和单位设置、平均值和温度显示等功能。这里就不再赘述了。下面主要介绍一下测量模块。首先，初始化各个端口以及ADC寄存器；然后等待滴血。当检测到足量血时，断电并等待若干秒，使之与试条上的酶充分反应。随后加电并在一秒后迅速读取。图5是与本血糖仪配套使用的试条在不同浓度的血糖与酶反应若干秒后再加电产生的电流的变化曲线。由图不难看出，加电后一秒曲线就较为平稳，这也是本设计采用“加电一秒”后即可读取的原因。<br>
<br>
计算公式<br>
&nbsp;&nbsp;&nbsp; 这部分无疑是本设计的关键。表1是使用本设计的样机测得的部分数据。由表中的数据不难看出，血糖仪和血糖试条的测量重复性较好——CV&lt;3%，远远高于国家标准&lt;7.5%的要求。<br>
<br>
表1 部分实验数据<br>
<br>
浓度（mg/dl）<br>
电流（A）&nbsp;50&nbsp;100&nbsp;200&nbsp;300&nbsp;400<br>
1&nbsp;3.003&nbsp;6.752&nbsp;13.101&nbsp;16.861&nbsp;19.836<br>
2&nbsp;3.028&nbsp;6.678&nbsp;12.368&nbsp;17.130&nbsp;19.621<br>
3&nbsp;2.918&nbsp;6.800&nbsp;13.272&nbsp;16.764&nbsp;20.366<br>
4&nbsp;2.893&nbsp;6.910&nbsp;13.028&nbsp;17.179&nbsp;20.622<br>
5&nbsp;3.064&nbsp;7.081&nbsp;13.614&nbsp;17.574&nbsp;20.341<br>
6&nbsp;2.881&nbsp;7.106&nbsp;13.211&nbsp;17.264&nbsp;20.268<br>
7&nbsp;3.075&nbsp;6.703&nbsp;12.905&nbsp;17.628&nbsp;19.645<br>
8&nbsp;2.905&nbsp;6.849&nbsp;13.150&nbsp;17.029&nbsp;20.158<br>
9&nbsp;2.991&nbsp;7.130&nbsp;13.233&nbsp;17.081&nbsp;20.024<br>
10&nbsp;2.901&nbsp;7.240&nbsp;12.964&nbsp;16.838&nbsp;20.952<br>
均值&nbsp;2.9659&nbsp;6.9249&nbsp;13.0846&nbsp;17.1348&nbsp;20.1833<br>
均方差&nbsp;0.0746&nbsp;0.2001&nbsp;0.3200&nbsp;0.2924&nbsp;0.4218<br>
CV（%）&nbsp;2.5153&nbsp;2.8896&nbsp;2.4456&nbsp;1.7065&nbsp;2.0898<br>
<br>
&nbsp;&nbsp;&nbsp; 通过对数据进行三次曲线拟合，就可以得到血糖值和电流值之间的关系曲线图。图6是原始数据分段曲线和拟合曲线的对比图。容易看出两条曲线很吻合；因此在实际操作中可以用一个公式代替分段函数。这里的曲线公式为：<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp; 其中，X是电流值，单位A，Y是对应的血糖值，单位为mg/dl。在实际验证过程中，上述公式具有良好的精度。</div>
<div><img alt="" src="http://www.avrw.com/article/pic/2006125155528371.jpg" border="undefined"><br>
&nbsp;<br>
图5 数据分段曲线和拟合曲线的对比图</div>
<div><strong>结语<br></strong>&nbsp;&nbsp;&nbsp; 此款血糖仪采用MSP430F435作为其核心控制单元，它具有12位A/D转换；采样精度达到1/4096。除了基本功能外，系统还增加了闹铃提示和串口通信功能，使用户不仅可以定时测量，而且还可以通过串口将测量结果保存到PC，再通过相应的软件，对数据作进一步处理。本文总结的公式经临床证明具有良好的精度。此外，中文字符界面也极大地方便了用户使用。</div>
<div>参考文献：<br>
1&nbsp;MSP430F43X/F44X data sheet&nbsp;&nbsp;&nbsp; TI. Corp.<br>
2&nbsp;沈建华，杨艳琴，翟骁曙. MSP430系列16位超低功耗单片机原理与应用，2004.11</div> ]]></description>
		<eb:creationDate>2008-04-16 16:48:40</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 单片机自动巡线轮式机器人控制系统设计 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3318.html</link>
		<description><![CDATA[ <p align="left"><b>1 引言</b><br>
&nbsp;&nbsp;&nbsp; 轮式移动机器人是机器人研究领域的一项重要内容．它集机械、电子、检测技术与智能控制于一体。在各种移动机构中，轮式移动机构最为常见。轮式移动机构之所以得到广泛的应用。主要是因为容易控制其移动速度和移动方向。因此．有必要研制一套完整的轮式机器人系统。并进行相应的运动规划和控制算法研究。笔者设计和开发了基于5l型单片机的自动巡线轮式机器人控制系统。</p>
<p align="left"><b>2&nbsp; 控制系统总体设计</b><br>
&nbsp;&nbsp;&nbsp; 机器人控制系统由主控制电路模块、存储器模块、光电检测模块、电机及舵机驱动模块等部分组成，控制系统的框图如图1所示。</p>
<p align="center"><img height="199" src="http://www.avrw.com/article/pic/2006125155555734.jpg" width="279" border="0"></p>
<p align="left"><b>3&nbsp; 主控制模块设计<br>
3．1&nbsp; CPLD设计</b><br>
&nbsp;&nbsp;&nbsp; 在机器人控制系统中．需要控制多个电动机和行程开关．还要进行光电检测．如果所有的任务都由AT89S52型单片机来完成．CPU的负担就会过重。影响系统的处理速度。因此扩展1个CPLD．型号为EPM7128。它属于．MAX7000系列器件。包括2个通用1/0口．2个专用I／O口，专用I／O口可作为每个宏单元和输入输出引脚的高速控制信号(时钟、清除和输出使能等)，电动机的。PWM信号也由其产生。<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp; EPM7128的引脚排列如图2所示。MlP—M4P引脚的输出为PWM脉宽调制信号，M1FB—M4FB引脚为电机的方向控制信号，P00一P07接单片机的PO口，100一1015为扩展的2个通用I／O口，SIl—S17引脚为行程开关输入信号，LI11一LI17引脚为光电探头输入信号。CPLD的编程用VHDL语言，产生1路PWM信号的部分程序源代码如下：</p>
<p align="left">&nbsp;&nbsp;&nbsp; <img height="393" src="http://www.avrw.com/article/pic/2006125155555580.jpg" width="346" border="0"></p>
<p align="left">&nbsp;&nbsp;&nbsp; 单片机采用24MHz的晶体振荡器，ALE信号的频率fALE=f16=6MHz，最终输出PWM信号的引脚MlP的频率为：</p>
<p align="left">&nbsp;&nbsp;&nbsp; <img height="108" src="http://www.avrw.com/article/pic/2006125155556621.jpg" width="439" border="0"></p>
<p align="center"><img height="552" src="http://www.avrw.com/article/pic/2006125155556360.jpg" width="539" border="0"></p>
<p align="left"><br>
&nbsp;&nbsp;&nbsp; 调节这个信号的占空比可以使直流电动机获得O-255级的转速。<br>
<b><br>
3．2&nbsp; 机器人运行参数存储器的扩展</b><br>
&nbsp;&nbsp;&nbsp; 机器人运行路径和动作可以根据比赛情况的不同而发生变化，这样，每改变1次运行参数就必须对单片机的Flash进行1次擦写。为了解决这一问题．扩展了程序参数存储器，用来存放机器人的运行路径和动作参数．扩展电路如图3所示。</p>
<p align="center"><img height="359" src="http://www.avrw.com/article/pic/200612515560371.jpg" width="354" border="0"></p>
<p align="left">&nbsp;&nbsp;&nbsp; 其中IC1为24LC08B，是I2E总线的串行E2PROM存储器，最多能够存储lK字节的数据。IC2为MAX3232型电平转换器，其内部有1个电源电压变换器，可以将计算机的电平转换为标准TTL电平，实现计算机与单片机之间通过串行口传输数据，使单片机完成对24／LC08B的数据存储操作。单片机运行时，直接从24LC08中读取机器人的运行参数，控制机器人运行。</p>
<p align="left"><b>4 光电检测模块设计<br>
4．1 光电检测过程</b><br>
&nbsp;&nbsp;&nbsp; 设计光电检测模块是为了让机器人能够检测地面上的白色引导线。光电检测电路主要包括发射部分和接收部分，其原理如图4所示。</p>
<p align="center"><img height="146" src="http://www.avrw.com/article/pic/200612515562797.jpg" width="251" border="0"></p>
<p align="left">&nbsp;&nbsp;&nbsp; 发射部分的波形调制采用了频率调制方法。由于发光二极管的响应速度快，其工作频率可达几MHz或十几MHz，而检测系统的调制频率在几十至几百kHz的范围内，能够满足要求。光源驱动主要负责把调制波形放大到足够的功率去驱动光源发光。光源采用红外发光二极管，工作频率较高，适合波形为方波的调制光的发射。<br>
<br>
&nbsp;&nbsp;&nbsp; 接收部分采用光敏二极管接收调制光线，将光信号转变为电信号。这种电信号通常较微弱，需进行滤波和放大后才能进行处理。调制信号的放大采用交流放大的形式，可使调制光信号与背景光信号分离，为信号处理提供方便。调制信号处理部分对放大后的信号进行识别，判断被检测对象的特性。因此，此模块的本质是将“交流”的、有用的调制光信号从“直流”的、无用的背景光信号中分离出来，从而达到抗干扰的目的。<br>
<b><br>
4．2&nbsp; 光电探头</b><br>
&nbsp;&nbsp;&nbsp; 光电探头安装在机器人底盘前部，共设置了5个检测点。从理论上讲，检测点越多、越密，识别的准确性与可靠性就越高，但是硬件的开销与软件的复杂程度也相应的增加。采用该巡线系统保证了检测的精确度，节约了硬件的开销。发光二极管发出的调制光经地面反射到光敏二极管。光敏二极管产生的光电流随反射光的强弱而线性变化。把这种变化检测出来，就可以判断某一个检测点是否在白色引导线的上方，从而判断机器人和白色引导线的相对位置。</p>
<p align="center"><img height="146" src="http://www.avrw.com/article/pic/200612515564112.jpg" width="264" border="0"></p>
<p align="left"><b>5&nbsp; 电机驱动模块</b><br>
&nbsp;&nbsp;&nbsp; 机器人的驱动件主要是电机和舵机，都可以采用PWM进行调速与控制。根据脉冲编码器的反馈信号，对机器人的运动状态进行实时控制。直流伺服电机的控制原理如图5所示。调节：PWM的信号就能够快速调节舵机的转角，从而实现机器人的方向控制。</p>
<p align="left"><b>6&nbsp; 结束语</b><br>
&nbsp;&nbsp;&nbsp; 基于5l型单片机的自动巡线轮式机器人控制系统运行平稳可靠，抗干扰能力强，不仅满足了机器人大赛的设计要求，同时也为智能机器人搭建了良好的控制平台。</p> ]]></description>
		<eb:creationDate>2008-04-16 16:47:47</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ QQ空间不显示问题 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3228.html</link>
		<description><![CDATA[ QQ空间不显示，这都是广大网友经常碰到的问题，看了本文相信你会对QQ空间打不开原因有个比较全面的了解！
<p>1、你可以先点QQ下面的菜单-=QQ空间&lt;*左上角*&gt;就可以到空间主页.在点 写日志 就可以进了还很不错.特别是对于那种,会弹出什么什么错误.按F5刷新.或脚本错误的用户.</p>
<p>2、把qq里面的“个人”文件夹删除就好了 3、里面添加的自定义模块的代码有错误，先用安全模式进入，删掉那些模块，然后就可以进了 赶快去试试吧。<a href="http://www.computermannet.com"><strong><font style="FONT-SIZE: 16px">http://www.computermannet.com</font></strong></a><strong><font style="FONT-SIZE: 16px">&nbsp;</font></strong>&nbsp;&nbsp;&nbsp;&nbsp; 电脑专家网</p>
<p>&nbsp;</p>
<p><font color="#F73809"><strong>其它:</strong></font></p>
<p><strong>A：打开空间（包括日志，留言板等）提示：<br>
脚本错误，例如：无法供应请求类别等。该问题是由于您的浏览器组件注册信息丢失造成。建议您可以参考如下试尝试：<br>
第一、打开电脑，选择电脑屏幕左下角“开始”—&gt;“运行”。<br>
第二、输入regsvr32 jscript.dll后选择“确定”<br>
第三、再次输入regsvr32 vbscript.dll 选择“确定”<br>
第四、以上两次输入都会有注册成功提示。说明您已成功修复您的IE组件。再清空IE后打开空间即可。<br>
B.打开空间（包括日志，留言板等）提示：<br>
行: 220<br>
字符: 1<br>
错误: 没有权限<br>
代码: 0<br>
URL: http://u21.qzone.qq.com/proxy.html<br>
出现该问题的原因，是您的浏览器只将自己的“QQ号.qzone.qq.com”加入了信任域，而未将qzone的其它服务器加入信任域所致。可以参考下面的操作步骤解决：<br>
第一，在IE中进入“工具”菜单，依次找到：工具--Internet选项。<br>
第二， 选择“安全”选项卡，再选择“受信任的站点”大图标（绿色的钩子）。确认“受信任的站点”文字变成选中状态。并且“受信任的站点”文字显示在白色选择框下方的灰色提示信息中，点击“站点”按钮，出现“可信任站点”修改页面。在“将该网站添加到区域中”输入框里面输入“http://*.qq.com”，如果对话框左下角的方框中出现一个小勾，请点击这个方框取消它。然后点击“添加”按钮，确认一眼，“http://*.qq.com”出现在可信任站点列表中</strong></p>
<p>一、一定要清除IE垃圾！这可以帮助您解决很多访问上的问题哦！清除方法：<br>
1、请您点击IE浏览器中的“工具”，选择“internet选项”；<br>
2、在“常规”页面点击“删除文件”，然后勾上“同时删除脱机内容”，点击确定；<br>
二、请您点击IE浏览器中的“工具”，选择“internet选项”，进入“安全”页面，点击“自定义级别”，对“对标记为可安全执行脚本的ActiveX控件执行脚本”设置为“启用”；<br>
三、您可以尝试暂时关闭相关上网助手等，再进入QQ空间进行访问，如果可以访问，请检查您的上网助手设置</p> ]]></description>
		<eb:creationDate>2008-03-01 12:27:07</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 硬盘坏道修复 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3227.html</link>
		<description><![CDATA[ <p>1、挂上硬盘MHDD一扫，天，满屏的红红绿绿和XX，4%以前很多处有，23%有红绿XX，60%有红绿XX，75%扔有红绿XX，汗。心想灾不死机才怪</p>
<p>2、既然没数据，记下坏块的位置扇区数，直接用命令erase擦，配合上下方向键30分钟左右75%前面的擦光了，留下18个绿点搞不掉了</p>
<p>3、75%后面的怎么也擦不掉，应该是G表写满了，没有PC3000，没办法，表是转不了了，想起MHDD里的切割命令HPA，为了能让硬盘能工作，少几G就少算了，马上执行命令HPA，选择LBA，很快就OK了。。</p>
<p>4、断电再次进入MHDD扫。。只有18个绿点了</p>
<p>5、开机进入PQ分区，显示只有30G了，分好区，GHOST个系统，使用一天没出现死机。OK</p>
<p>6、注意HPA命令只能切硬盘后面坏扇区，前面的就无能为力了</p>
<p>&nbsp;</p>
<p>听说MHDD里面有个慢速擦除的命令aerase，这个命令我一直没用起来，是不是和我使用的版本有关？还请高手指点</p> ]]></description>
		<eb:creationDate>2008-03-01 12:25:33</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ Vista系统之提高SATA硬盘性能的技巧 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3226.html</link>
		<description><![CDATA[ 　下面介绍在Windows Vista“榨出”SATA硬盘性能优势的技巧。
<p>　　1、以管理员帐户登录Windows Vista，打开设备管理器，这可通过多种方式，比如说右键单击桌面的“计算机”图标，选择“属性”，然后在左侧任务面板上即可看到“设备管理器”的链接;也可在“控制面板”“系统和维护”中找到设备管理器，等等。</p>
<p>　　2、在设备管理器中找到系统所使用的硬盘，双击或右键单击设备选择属性，浏览至“策略”页，勾选其中的“启用高级性能”选项。</p>
<p>　　<strong>注意：</strong>该项仅在使用SATA硬盘时才是可选的，如果使用IDE硬盘，则该项无法选择。另外，正如图中所言，要启用该项设置需保证系统不能存在掉电的凤险，比如说使用UPS等，不然，便存在数据丢失的凤险。——对于<u>笔记本</u>用户而言，这倒不是大问题，毕竟有电池做保障。</p>
<p>　　3、退出设备管理器，这样，与磁盘的写入缓存相结合，“高级性能”项能够在一定程度上提高Windows Vista的整体性能。</p> ]]></description>
		<eb:creationDate>2008-03-01 12:24:13</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 液晶显示器使用注意事项 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3225.html</link>
		<description><![CDATA[ <p><strong>经典应用：认识LCD和CRT的区别、正确维护LCD</strong></p>
<p>　　随着液晶显示器（LCD）的不断降价、技术的不断进步，液晶显示器已进入普及时代。暑期购机高峰，买液晶显示器的朋友也特别多。但液晶显示器与传统的CRT显示器不同，很多初接触液晶显示器的读者都不太明白该怎样正确使用液晶显示器，该怎么去维护。下面就向<br>
<strong>相关知识<br>
LCD如何工作</strong><br>
　　液晶是一种有机复合物，液晶显示器（英文全称为Liquid Crystal Display，简称LCD）具有低辐射、体积小、能耗低的优点。<br>
　　常见的液晶显示器按物理结构分为四种：①扭曲向列型（简称TN，全称Twisted Nematic，主要应用在游戏机液晶屏等领域）；②超扭曲向列型（简称STN，全称Super TN，目前多被手机液晶屏所采用）；③双层超扭曲向列型（DSTN，全称Dual Scan Tortuosity Nomograph，早期笔记本电脑和目前手机等数码设备上皆有采用）；④薄膜晶体管型（TFT，全称Thin Film Transistor，目前应用的主流）。<br>
　　TN液晶显示屏是各种液晶屏的鼻祖，其技术原理是以后液晶显示屏发展的基石（图1）。TN液晶显示屏包括两层由玻璃基板、ITO膜、配向膜、偏光板等制成的夹板，上下夹层中是液晶分子，在接近上部夹层的液晶分子按照上部沟槽的方向来排列，而下部夹层的液晶分子按照下部沟槽的方向排列，整体看起来，液晶分子的排列像扭转螺旋形。一旦通过电极给液晶分子加电，TN液晶将变成竖立的状态，而液晶显示器的夹层贴附了两块偏光板，这两块偏光板的排列和透光角度与上下夹层的沟槽排列相同，在正常情况下光线从上向下照射时，通常只有一个角度的光线能够穿透下来，通过上偏光板导入上部夹层的沟槽中，再通过液晶分子扭转排列的通路从下偏光板穿出，形成一个完整的光线穿透途径。当液晶分子竖立时光线就无法通过，结果在显示屏上出现黑色。这样会形成透光时为白、不透光时为黑，画面就可以显示在屏幕上了。</p>
<p>　　目前主流的TFT型的液晶显示器组成更复杂一些，它主要是由荧光管、导光板、偏光板、滤光板、玻璃基板、配向膜、液晶材料、薄膜式晶体管等等构成。TFT液晶显示器具备背光源荧光管，其光源会先经过一个偏光板然后再经过液晶，这时液晶分子的排列方式就会改变穿透液晶的光线角度，然后这些光线还必须经过前方的彩色的滤光膜与另一块偏光板。而只要改变加在液晶上的电压值就可以控制最后出现的光线强度与色彩，这样就能在液晶面板上变化出不同色调的颜色组合。<br>
六项注意<br>
<strong>LCD与CRT工作原理不同，使用中须注意</strong><br>
<strong>注意一：刷新频率</strong><br>
　　刷新频率也就是显示器的垂直扫描频率（场频），它是指每秒内电子枪对整个屏幕进行扫描的次数，以Hz（赫兹）为单位。对于CRT显示器来说，CRT显示器上显示的图像是由很多荧光点组成，每个荧光点都在电子束的击打下发光，不过荧光点发光的时间很短，所以要不断地有电子束刷新击打荧光粉使之持续发光，而只有刷新够快，人眼才能看到持续更稳定的画面，才不会感觉到画面的闪烁和抖动，眼睛也就不容易疲劳。所以CRT显示器的刷新率在相关分辨率下不低于85Hz才能让人眼看着更舒服。<br>
　　和CRT显示器将画面分成若干“扫描线”来进行刷新会出现画面闪烁的问题相比，LCD产生图像不是通过电子枪扫描，而是通过控制是否透光来控制亮和暗，所以LCD的刷新是对整幅的画面进行刷新，LCD即使在较低的刷新率（如60Hz）下，也不会出现闪烁的现象，图像稳定。所以，在调整LCD时无须调高刷新频率，采用60Hz（1024×768分辨率）/75Hz（1280×1024分辨率）或“默认的示配器”即可。<br>
　　另外，我们还必须选择安装合适的“jian视器”驱动，不要随便选用CRT显示器所用的“jian视器”驱动，应该安装随液晶显示器配送的驱动，或显示属性中jian视器“标准jian视器类型”中的“便携机显示面板（1024×768或1280×1024）”。<br>
<strong>注意二：色彩数</strong><br>
　　大家知道，目前的主流CRT彩色显示器都是支持32位真彩色的，但LCD并不都是如此。目前市场上绝大多数入门级LCD所采用的液晶面板都是6bit面板，它只能显示262144种色彩（64×64×64＝262144），而只有8bit面板可以显示16777216种颜色（256×256×256＝16777216）。<br>
　　所以在调整6bit面板入门级LCD时，将显示“颜色”调为“增强色（16位）”便可满足需求，以免显卡调用更多的显存去支持高彩色，反而造成浪费。</p>
<p><strong>注意三：可视角度<br></strong>　　显示器的可视角度是指从不同的方向可清晰地看到屏幕上所有内容的最大角度，CRT显示器的可视角度理论上可接近上下/左右180度。由于LCD是采用光线透射来显像，所以LCD的可视角度相比CRT显示器要小——在LCD中，直射和斜射的光线都会穿透同一显示区的像素，所以从大于可视角以外的角度观看屏幕时会发现图像有重影和变色等现象。<br>
　　目前市面上的液晶显示器的水平（左右）可视角度一般在120度以上，而垂直（上下）可视角度要稍小些，一般在100度以上。在使用中要获得更好的可视角度，除了调整坐姿或显示器角度以尽量正对LCD外，可适当调高LCD的亮度，这也能让LCD的可用可视角度得到最大发挥。<br>
<strong>注意四：响应时间<br></strong>　　信号反应时间是液晶显示器的液晶单元响应延迟，是指液晶单元从一种分子排列状态转变成另外一种分子排列状态所需要的时间，即屏幕由暗转亮或由亮转暗的速度。响应时间愈短愈好，它反应了液晶显示器各像素点对输入信号反应的速度，一般将响应时间分为两个部分：上升时间（Rise time）和下降时间（Fall time），表示时以两者之和为准，不是单程。<br>
　　目前主流LCD响应时间都能做到25ms以内，新型的主流机种多在8ms~16ms之间。25毫秒=1/0.025=每秒钟显示40帧画面，已能满足视频播放的需要；16毫秒=1/0.016=每秒钟显示63帧画面，已能满足大部分游戏的需求；12毫秒=1/0.012=每秒钟显示83帧画面，但由于受LCD刷新率60/75Hz的限制12ms一般达不到每秒83帧画面。所以目前主流的液晶显示器已完全能应付一般用户DVD播放和游戏的需要。<br>
<strong>注意五：分辨率</strong><br>
　　传统CRT显示器只要行频和带宽足够，一般能稳定支持其所支持的分辨率内的所有画面全屏稳定显示。而LCD的像素是固定的，所以LCD只有在最佳分辨率（最大分辨率，15英寸LCD的最佳分辨率为1024×768，17～19英寸的最佳分辨率通常为1280×1024）下才能显现最佳影像。<br>
　　LCD以低分辨率显示时，一般通过两种方式进行：<br>
　　①居中显示：例如在最佳分辨率1024×768的屏幕上显示800×600的画面，只有屏幕居中的800×600个像素被呈现出来，其它的像素则保持黑暗。②扩展显示：在显示低于最佳分辨率的画面时，各像素点通过差动算法扩充到相邻像素点显示，从而使整个画面被拉伸扩展充满。但这样也使画面失去原来的清晰度和真实的色彩。<br>
　　在实际使用中一般建议使用“居中显示”，虽然画面变小了些，但不会牺牲基本的显示效果。例如某款LCD最佳分辨率是1280×1024，要在这么高的分辨率下流畅地玩3D游戏，对多数500元内的显卡都是巨大考验。所以多数用户选择将游戏设为低分辨率运行，如1024×768或800×600，如果在LCD上以“扩展显示”方式显示，那么带来的图像效果很粗糙难以忍受。而以“居中方式”显示，虽然只能利用到液晶中间800×600或1024×768那样大的一块，但却能保持较佳的显示效果。<br>
　　而要以“居中显示”方式显示，在设置时可将显卡驱动中的“扩展图像到面板大小”选项前的钩去掉。</p>
<p><br>
<strong>注意六：点缺陷</strong><br>
　　CRT显示器基本不会出现屏幕“点缺陷”，而液晶显示器的“点缺陷（包含坏点或暗点、亮点）”从液晶诞生至今就一直存在。所谓的LCD的点缺陷就是液晶显示屏中某个像素损坏，出现一个持续发亮、不亮或单色亮、不接受熄灭信号的死像素。</p>
<p>　　在使用中要避免点缺陷的增多，主要应注意三个方面：①避免用所以硬物触摸或碰撞液晶屏。②避免使用或搬运过程的震动。③不使用LCD时应养成好习惯随手关机。<br>
相关知识：LCD如何保养<br>
　　液晶显示器相比CRT显示器更显“娇嫩”，该如何来进行保养维护呢？<br>
1.如何清洁液晶显示屏<br>
　　液晶显示器使用一段时间后，你会发现显示屏上常会吸附一层灰尘（关掉LCD后侧看更明显），有时还会不小心粘上各种水渍，这肯定将大大影响视觉效果，该如何清洁呢？<br>
　　①先关闭LCD电源，并取下电源线插头和显卡连接线插头。<br>
　　②将LCD搬到自然光线较好的场所，以便能看清灰尘所在，更利于有的放矢，从而达到更好的清洁效果。<br>
　　③清洁液晶显示屏不需要什么专门的溶液或擦布，以笔者的经验，清水 柔软的无绒毛布或纯棉无绒布就是最好的液晶显示屏清洁工具（不掉屑纸巾也行）。在清洁时可用纯棉无绒布蘸清水然后稍稍拧干，再用微湿的柔软无绒毛湿布对显示屏上的灰尘进行轻轻擦拭（不要用力的挤压显示屏），擦拭时建议从显示屏一方擦到另一方直到全部擦拭干净为止，不要胡乱挥舞。<br>
　　小提示：不可用硬布、硬纸张擦拭。同时千万不要使用含有酒精或丙酮的清洁液或含有化学成分的清洁剂，更不能将液体直接喷射到屏面，以免液体渗透进保护膜。<br>
　　④用较湿的柔软湿布清洁完液晶屏后，可用一块拧得较干的湿布再清洁一次。最后在通凤处让液晶屏上水气自然凤干即可。<br>
2.其它保养维护要点<br>
　　（1）避免震动。LCD的液晶屏幕十分脆弱，要避免强烈的冲击和振动。更不要对LCD的液晶屏施加压力或在LCD显示屏背盖上碰撞、挤压。<br>
　　（2）避免屏幕长时间使用。长期工作对于LCD来说不是一件好事，如果在不用的时候，一定要关闭显示器电源。同样道理，在使用LCD时要慎用壁纸和屏保。大多数的壁纸和屏保程序的画面都色彩艳丽，光线明暗变化对比强烈，长时间使用会使LCD色彩失真，从而影响到LCD显示屏的寿命。所以，在使用LCD时最好使用单色屏并取消屏保。<br>
　　（3）防电磁干扰。无论是CRT还是LCD显示器都要远离磁场较强的物体，周围强大的磁场会使显示器的内部产生额外的电压，从而影响到显示器电压的稳定性。长时间处于强大的磁场中，还会使得色彩失真，从而影响到LCD的显示效果和寿命。<br>
　　（4）注意潮湿。不要让任何湿气进入LCD，如室内湿度过高LCD内部可能会产生结露现象，以致LCD发生漏电和短路，严重的还会烧毁显示器。对于湿度较大的一些南方地区，可将LCD放置到较温暖而干燥的地方，也可定期用功率不大的台灯对液晶显示器的背部进行烘烤，以便让其中的水分蒸发掉。</p> ]]></description>
		<eb:creationDate>2008-03-01 12:22:03</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ 电话机原理图 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3152.html</link>
		<description><![CDATA[ <table style="WORD-BREAK: break-all" cellspacing="10" cellpadding="0" width="90%" align="center" border="0">
<tbody>
<tr>
<td valign="top" width="816" height="200" line-height="35pt">
<div align="center"><font size="4"><strong>电话机原理图01</strong></font></div>
<br>
<br>
<img style="CURSOR: hand" alt="" src="http://www.avrw.com/article/pic/2006107102613734.gif" width="600" resized="1"> <span color="#FFFFFF">(<a href="http://www.ttet.cn/" target="_blank">深圳电子技术网</a></span><font color="#FFFFFF">)</font></td>
</tr>
</tbody>
</table> ]]></description>
		<eb:creationDate>2008-01-16 14:27:32</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ FAST馈源舱的静态定标和动态跟踪 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3151.html</link>
		<description><![CDATA[ <div>
<p><strong>摘要：</strong>根据<a href="http://www.pczhishi.com/" target="_blank">计算机</a>视觉和CCD图像分析测量原理，介绍了对ＦＡＳＴ馈源舱多个位置和姿态的静态定标，以及对舱体特征点的图形坐标的摄取。推导了实验中所需馈源舱的空间坐标变换矩阵，实现了对馈源舱的动态跟踪，并为舱体的闭环控制提供了数据基础。</p>
<div>&nbsp;&nbsp; <b>关键词：</b>计算机视觉 CCD图像分析 静态定标 动态跟踪</div>
<div>作为国际新一代大射电望远镜（ＬＴ）阵计划的第一步，拟在我国先行实施一项ＦＡＳＴ（Ｆｉｖｅ ｈｕｎｄｒｅｄ ｍｅｔｅｒｓ Ａｐｅｒｔｕｒｅ Ｓｐｈｅｒｉｃａｌ Ｔｅｌｅｓｃｏｐｅ）项目工程。目前国际上正在更新的Ａｒｅｃｉｂｏ系统难以满足ＬＴ基本单元的要求：低造价、大天空覆盖、宽带以及偏振观测。全球最大的射电望远镜是位于美国波多里格的Ａｒｅｃｉｂｏ３０５ｍ口径天线，但它具有天空覆盖小（天顶扫描角仅２０°）的严重缺陷，以及造价太高、跟踪精度低的不足。ＦＡＳＴ项目计划利用我国某地独一无二的喀斯特（Ｋａｒｓｔ）洼地，铺设主天线的球面望远镜，建造口径为５００ｍ的射电望远镜。这种射电望远镜取消了主反射面的运动，改用馈源移动跟踪目标，基本不受重力形变的影响，可把主反射面建造得很大。<br>
<img height="260" hspace="10" src="http://www.avrw.com/article/pic/20061119165823734.gif" width="549" vspace="10" border="0"><br>
<font size="3">&nbsp;&nbsp;&nbsp;</font> 对射电望远镜的馈源舱实施闭环控制的前提条件是已知馈源舱的位置及姿态，故需对馈源舱进行动态跟踪，以取得相关数据。本文根据计算机视觉和ＣＣＤ图像分析测量原理，详细介绍了对实验模型中的馈源舱进行静态定标与动态跟踪测量的原理及方法。</div>
<div><b>１ ＣＣＤ测量系统</b></div>
<div>结合课题情况，可考虑使用的测量方法有以下四种：（１）ＧＰＳ定位系统：测量范围大，差分处理后的测量精度较高，不足是测量时间较长。（２）无线电定位：受环境影响小，测量范围大，可在较恶劣的环境中工作。但测量成本较高，且无线电信号会影响射电天文望远镜对宇宙信号的接收。（３）激光全站仪：测量范围大、测量精度高、采样周期高。但系统的采样间隔具有不稳定性、时延性与较低的动态精度（３ｍｍ），这给控制带来较大难度。另外受环境影响较大，在降雨和大风扬尘等较恶劣的环境下，测量精度会受影响，且价格很高（一台Ｌｅｉｃａ大约价值１８万元）。（４）ＣＣＤ三维测量系统：成本低，测量范围较小时测量精度较高。但由于测量数据量大，动态跟踪测量的时间较长。另外环境因素对测量精度的影响也较大，夜间工作有一定限制。<br>
<img height="462" hspace="10" src="http://www.avrw.com/article/pic/20061119165823580.gif" width="549" vspace="10" border="0"><br>
<font size="3">&nbsp;&nbsp;&nbsp;</font> 根据实际情况以及顺利实现测量的目的，测量系统应具有快速测量、自动跟踪和成本低的特点。而ＣＣＤ三维测量系统能够满足要求。ＣＣＤ器件是一种固体化器件，体积小、可靠性高、寿命长；图像畸变小，尺寸重现性好；具有较高的定位精度和测量精度；输出信号易于数字化处理，易与计算机连接组成实时自动测量控制系统，便于扩大应用功能和使用范围。</div>
<div>ＣＣＤ图像分析测量系统的原理框图如图１所示。</div>
<div><b>２ 测量原理与方法</b></div>
<div>ＣＣＤ三维测量系统的组成元件主要有ＣＣＤ摄像机（ＭＴＶ－１８８１ＥＸ、７９５×５９６）、图像卡（大恒ＣＧ２１０）、计算机和视频线等。整个系统的工作原理是：测量对象在ＣＣＤ摄像机的测量范围内沿任意方向运动，ＣＣＤ摄像机从三个不同的角度对测量对象的特征点进行摄像，生成被测对象的视频信号；通过图像卡转换成数字信号并输送给控制计算机；计算机调用执行文件，根据一定算法计算被测目标的世界坐标，由此确定对象的位置与姿态。<br>
<img height="342" hspace="10" src="http://www.avrw.com/article/pic/20061119165823621.gif" width="549" vspace="10" border="0"><br>
<font size="3">&nbsp;&nbsp;&nbsp;</font> ５０ｍ实验模型中的馈源舱由六根索向上拉，并分别通过六座钢筋水泥塔与地面的卷扬机相连。其中三根索均布接在舱体顶部，另三根索均布接在舱体底圆上。取下拉索与舱体的绞合点（索耳中心）为特征点，这样共有三个特征点ａ、ｂ、ｃ，三部ＣＣＤ摄像机按照π／３间隔放置，结构分布如见图２。</div>
<div>令Ｐｉ是待测特征点，则其世界坐标与其在摄像机中的投影坐标的关系式为：</div>
<div>(ｘ ｙ ｚ １)Ｔ＝ＲＨ(穴ｘ′ ｙ′ ｚ′ １)Ｔ&nbsp;&nbsp; （１）</div>
<div>其中Ｒ、Ｈ分别是空间旋转和平移变换矩阵。</div>
<div><font size="3">每个特征点分别在左右两个摄像机中投影，投影坐标满足如下关系式：<br>
<img height="213" hspace="10" src="http://www.avrw.com/article/pic/20061119165824360.gif" width="549" vspace="10" border="0"><br>
&nbsp;&nbsp;&nbsp; 式中：(１＋ｋｌ１ｒ２＋ｋｌ２ｒ４)和(１＋ｋｒ１ｒ２＋ｋｒ２ｒ４)分别为左右摄像机镜头沿径向的畸变程度，(ｘｌ,ｙｌ)、(ｘｒ,ｙｒ)分别是左右摄像机镜头的光心坐标，Ａｌ１,…,Ａｌ１１、Ａｒ１,…,Ａｒ１１分别是测量点在左右两摄像机的投影坐标变换参数。</font></div>
<div>采用静态定标的方法确定式（２ａ）、（２ｂ）中的未知参数。测量系统静态定标的原理是：在地面上合适位置（坐标已知）安置两架电子经纬仪，并在馈源舱的工作空间区域选择测量点，利用经纬仪测量若干位置特征点的俯仰角和方位角，通过坐标几何变换确定这些点的世界坐标（ｘ，ｙ，ｚ），并认为是实际坐标。同时记下它们在摄像机中相应的图像坐标（ｕ，ｖ），这里需注意对应关系。把世界坐标与相应投影坐标代入式（２ａ）、（２ｂ）中，用最小二乘法求解超静定方程组，确定未知参数。</div>
<div>确定空间坐标变换矩阵后需进行静态检测，即通过经纬仪测量一些静态特征点的坐标，与ＣＣＤ静态测量结果比较，计算静态定标的ｒｍｓ误差。若不满足精度要求，则重新定标直至满足。</div>
<div>静态定标后即可对特征点进行动态跟踪。其跟踪原理是基于面积的边沿提取跟踪算法?眼５?演。每部摄像机读取并确定其中两个特征点在ＣＣＤ靶面的投影坐标，得到三特征点在摄像机中的六个投影坐标后，根据投影坐标的位置关系与特征点附近区域在靶面投影区域的相关性，确定每个特征点在其对应的两摄像机靶面的投影坐标，再采用双目定位法得到它们的世界坐标。例如摄像机３和１可同时对目标点ａ进行测量跟踪，摄像机１在ｔ时刻采集到图像的左特征点ａｔ附近方形区域作为模板ＴＲｔ，摄像机３在ｔ时刻采集到图像的右特征点ａｔ附近方形区域作为模板ＴＬｔ，实现两幅图的配准。然后分别以ＴＬｔ和ＴＲｔ为模板，在ｔ＋１时刻两摄像机３、１采集的两幅图像中搜索有相似灰度值分布的ＴＬｔ＋１和ＴＲｔ＋１（如图３）。判断此两模板是否满足最大相关性，若满足，则认为两模板的中心点就是摄像机动态跟踪目标点的投影；否则继续搜索特征区域，直至满足。</div>
<div>两模板最相似需满足的最大相关性条件是：当</div>
<div><font size="2"><img height="106" src="http://www.avrw.com/article/pic/20061119165825371.gif" width="478" border="0"></font></div>
<div>最小时，左右模板中的特征点匹配。</div>
<div>动态跟踪测量给出馈源舱三只索耳Ｃ１、Ｃ２和Ｃ３的直角坐标（ｘ１,ｙ１,ｚ１），（ｘ２,ｙ２,ｚ２）和（ｘ３,ｙ３,ｚ３）。采用下述方法反算馈源舱的位置与姿态。因索耳均布在舱体底圆上（如图２），则底圆中心Ｏ１的直角坐标为：</div>
<div>ｘＯ１＝(ｘ１＋ｘ２＋ｘ３)／３, ｙＯ１＝(ｙ１＋ｙ２＋ｙ３)／３,ｚＯ１＝(ｚ１＋ｚ２＋ｚ３)／３&nbsp;&nbsp; (４)</div>
<div>设舱体底圆中心Ｏ１与顶端Ｏ２的连线为舱体对称轴Ｚ１的单位矢量k１，则:</div>
<div><font size="2"><img height="40" src="http://www.avrw.com/article/pic/20061119165825797.gif" width="484" border="0"></font></div>
<div>其中C１C２、C１C３分别表示索耳Ｃ１指向Ｃ２和Ｃ３的矢量。所以馈源舱的方位角α与俯仰角γ为：</div>
<div>α＝ａｒｃｔａｎｋ１ｙ／ｋ１ｘ (６ａ) γ＝ａｒｃｃｏｓｋ１ｚ (６ｂ)</div>
<div><b>３ 实验数据分析</b></div>
<div>为了准确得到定标的精度，采用检测发光二极管的方法。检测时间选在夜间，这样做有利于经纬仪精确地测量目标。表１给出了１１个坐标检测结果（馈源舱速度２ｃｍ／ｓ）。<br>
<br>
<b>表1 定标检测数据</b></div>
<table bordercolordark="#ffffff" width="100%" bordercolorlight="#000000" border="1">
<tbody>
<tr>
<td align="middle" width="9%">编&nbsp; 号</td>
<td align="middle" width="23%">实际坐标</td>
<td align="middle" width="24%">测量坐标</td>
<td align="middle" width="11%">X向误差</td>
<td align="middle" width="11%">Y向误差</td>
<td align="middle" width="11%">Z向误差</td>
<td align="middle" width="11%">距离误差</td>
</tr>
<tr>
<td align="middle" width="9%">1</td>
<td align="middle" width="23%">5603，-3755，7077</td>
<td align="middle" width="24%">5595，-3743，7071</td>
<td align="middle" width="11%">8</td>
<td align="middle" width="11%">-12</td>
<td align="middle" width="11%">6</td>
<td align="middle" width="11%">15.620</td>
</tr>
<tr>
<td align="middle" width="9%">2</td>
<td align="middle" width="23%">5503，-5946，7726</td>
<td align="middle" width="24%">5497，-5940，7727</td>
<td align="middle" width="11%">6</td>
<td align="middle" width="11%">-6</td>
<td align="middle" width="11%">-1</td>
<td align="middle" width="11%">8.544</td>
</tr>
<tr>
<td align="middle" width="9%">3</td>
<td align="middle" width="23%">6603，-3747，6128</td>
<td align="middle" width="24%">6593，-3738，6121</td>
<td align="middle" width="11%">10</td>
<td align="middle" width="11%">-9</td>
<td align="middle" width="11%">7</td>
<td align="middle" width="11%">15.166</td>
</tr>
<tr>
<td align="middle" width="9%">4</td>
<td align="middle" width="23%">6486，-5955，6718</td>
<td align="middle" width="24%">6482，-5952，6719</td>
<td align="middle" width="11%">4</td>
<td align="middle" width="11%">-3</td>
<td align="middle" width="11%">-1</td>
<td align="middle" width="11%">5.099</td>
</tr>
<tr>
<td align="middle" width="9%">5</td>
<td align="middle" width="23%">4690，-3767，6394</td>
<td align="middle" width="24%">4687，-3761，6392</td>
<td align="middle" width="11%">3</td>
<td align="middle" width="11%">-6</td>
<td align="middle" width="11%">2</td>
<td align="middle" width="11%">7.0</td>
</tr>
<tr>
<td align="middle" width="9%">6</td>
<td align="middle" width="23%">4537，-6087，7097</td>
<td align="middle" width="24%">4538，-6088，7104</td>
<td align="middle" width="11%">-1</td>
<td align="middle" width="11%">1</td>
<td align="middle" width="11%">-7</td>
<td align="middle" width="11%">7.141</td>
</tr>
<tr>
<td align="middle" width="9%">7</td>
<td align="middle" width="23%">6117，-4480，7150</td>
<td align="middle" width="24%">6117，-4479，7151</td>
<td align="middle" width="11%">0</td>
<td align="middle" width="11%">-1</td>
<td align="middle" width="11%">-1</td>
<td align="middle" width="11%">1.414</td>
</tr>
<tr>
<td align="middle" width="9%">8</td>
<td align="middle" width="23%">4465，-4055，6183</td>
<td align="middle" width="24%">4469，-4046，6180</td>
<td align="middle" width="11%">-4</td>
<td align="middle" width="11%">1</td>
<td align="middle" width="11%">3</td>
<td align="middle" width="11%">5.099</td>
</tr>
<tr>
<td align="middle" width="9%">9</td>
<td align="middle" width="23%">4467，-6084，6732</td>
<td align="middle" width="24%">4454，-6089，6737</td>
<td align="middle" width="11%">3</td>
<td align="middle" width="11%">5</td>
<td align="middle" width="11%">5</td>
<td align="middle" width="11%">7.681</td>
</tr>
<tr>
<td align="middle" width="9%">10</td>
<td align="middle" width="23%">4493，-3233，6215</td>
<td align="middle" width="24%">4486，-3226，6220</td>
<td align="middle" width="11%">7</td>
<td align="middle" width="11%">-7</td>
<td align="middle" width="11%">-5</td>
<td align="middle" width="11%">11.091</td>
</tr>
<tr>
<td align="middle" width="9%">11</td>
<td align="middle" width="23%">4464，-5287，6678</td>
<td align="middle" width="24%">4456，-5285，6671</td>
<td align="middle" width="11%">8</td>
<td align="middle" width="11%">-2</td>
<td align="middle" width="11%">7</td>
<td align="middle" width="11%">10.817</td>
</tr>
</tbody>
</table>
<div>通过对测量数据进行分析可得到测量系统的ｒｍｓ误差为９．５３４６３ｍｍ。</div>
<div>在测量范围内定标精度是毫米级。具体情况是Ｘ方向上的最大位置误差为１０ｍｍ，Ｙ方向上的最大位置误差为１２ｍｍ，Ｚ方向上的最大位置误差为７ｍｍ，很好地满足了初期实验模型定标精度为１．５ｃｍ的要求。</div>
<div>电子经纬仪精度、人为测量误差都对静态定标精度有影响，对动态跟踪精度也有影响。实际跟踪过程中，如果背景的光线变化过大（例如太阳恰位于空中舱体的一面），会出现跟踪目标丢失的情况，此时应在其它合适环境下再试验。动态跟踪时馈源舱的运动速度有所限制，应低于１０ｃｍ／ｓ。</div>
<div>本文提出的ＣＣＤ动态跟踪方法精度高，为闭环控制的实施提供了重要的数据基础。因ＣＣＤ摄像机的视角范围小，如想扩大测量范围，需设计云台以进行分段测量。</div>
</div> ]]></description>
		<eb:creationDate>2008-01-16 14:24:59</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
    <item>
		<title><![CDATA[ MP3硬件电路原理图 ]]></title>
		<link>http://blog.tom.com/coolnie888/article/3150.html</link>
		<description><![CDATA[ <img style="CURSOR: hand" alt="" src="http://www.avrw.com/article/pic/2006107102956734.gif" width="600" resized="1"> ]]></description>
		<eb:creationDate>2008-01-16 14:16:23</eb:creationDate>
		<eb:modificationDate></eb:modificationDate>
    </item>
</channel>
</rss>