收藏 分享(赏)

全自动血凝仪检测系统.doc

上传人:HR专家 文档编号:5555204 上传时间:2019-03-07 格式:DOC 页数:16 大小:370KB
下载 相关 举报
全自动血凝仪检测系统.doc_第1页
第1页 / 共16页
全自动血凝仪检测系统.doc_第2页
第2页 / 共16页
全自动血凝仪检测系统.doc_第3页
第3页 / 共16页
全自动血凝仪检测系统.doc_第4页
第4页 / 共16页
全自动血凝仪检测系统.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、1全自动血凝仪检测系统摘要:血凝仪的检测方法有很多种,但就稳定性和先进性,双磁珠检测法克服了传统的光学检测方法的不足。测试的基本原理:测试杯两侧的有一组驱动线圈,它们产生恒定的交替电磁场,使测试杯内特制的去磁小钢珠保持等幅振荡运动。凝血激活剂加入后,随着纤维蛋白的产生增多,血浆的粘稠度增加,小钢珠的运动振幅逐渐减弱,仪器根据另一组测量线圈感应到小钢珠运动的变化,当运动幅度衰减到 50时确定凝固终点。对于次级输出的信号,本设计采用锁相环同步检波的方法对信号进行解调,再用单片机对 AD 采样的数据进行处理,线圈驱动部分采取智能驱动的方案,即每个通道都可以进行强弱档的切换,防止由于个别血液样本的黏度

2、过大而造成小球不起振的发生。这种检测方法在这个领域还属于独创,并计划申请专利。关键字:锁相环 同步检波 MAGA16 单片机 RTOS 引言:岗位: 硬件工程师课题简介和任务:全自动血凝仪的核心检测模块的设计,其中包括了模拟前端的设计和单片机软件部分的设计一、 项目概述硬件电路部分由正弦波产生模块、前级放大与滤波模块、检测线圈、锁相环同步检波模块、后级平滑滤波与放大模块、AD 转换器、线圈驱动模块、单片机模块等部分组成。系统框图如下:2图(1)系统工作过程:由振荡器产生一个频率为 3kHz 的正弦波并经放大输入到 4 个通道的检测线圈的输入端;由驱动模块产生的频率为 3Hz 左右的占空比为 5

3、0%的脉冲信号使测试杯中的小钢球做近视谐振运动;由于小钢球的谐振运动将切割检测线圈的磁感线,故检测线圈输出端将产生一个低频的近视 AM 的波形,然后再经放大滤波和同步检波即可实现对低频 AM 信号的解调,然而这个低频 AM 信号恰恰是反映小钢球运动轨迹的信号,这个低频 AM 信号与小球的振幅是成正比的,所以再经 AD 采样测出波峰值,即容易得到当小钢球由初始的血液未凝固态的谐振运动,到加入试剂后由于血液凝固致使小球幅度下降到一半时的时间。二、 系统组成I、 硬件电路部分:1、正弦波产生模块:3正弦波产生单元反向放大器 组合框图图(2)直接由 NE555 振荡器产生一个频率约为 3 kHz 占空

4、比为约 50%的方波信号,主要是利用电容 C26 上的电压 Uc 在 2/3Vcc 和 1/3Vcc 之间来回充电和放电,从而使电路产生了振荡,输出矩形脉冲。由于 R40 相对于 R49 的电阻值较小,故输出矩形脉冲近视为方波。方波的周期 T 由 R40、R49、R52 和 C26 决定。紧跟在 NE555 振荡器后面是两级 RC 无源低通滤波,R51 左端产生的信号是频率为3kHz 的锯齿波信号,然后再经 RC 滤波即可输出正弦的信号,RC 无源低通滤波器 1dB跌落时的截止频率 ,串联电容 C,并联电阻 R 的计算表达式分别如下:Jf, ,RCfJ2.31f2.31f2.314由此,可计算

5、得: RC 的截止频率为 3.125kHz ,可以满足设计的要求。由于 NE555 的输出功率较小,可以满足单通道的放大器,但是由于滤波器的增益衰减和四通道放大器的分流作用,难以达到运放 LM224 的输入门限电流故增加了一级射级跟随器,起缓冲器的作用。最后再对信号进行放大,放大器的增益为G=R42/R41。最终经放大后 Signal_out0、Signal_out1、Signal_out2、Signal_out3幅度为 5 ,而检测线圈的初级作为反向放大器的负载。pV2、检测线圈与驱动线圈图(3)检测线圈(测量线圈)的初次级匝数比为 1:1,匝数为 550 圈,线径为 0.03mm,骨架外套

6、半个磁罐,以增加偶合强度。检测线圈其实就相当于一个变压器的作用,但实测时发现次级线圈的输出幅度很小,大约为 200mV 左右,而且失真也很严重。驱动线圈分别位于小钢球的前后方,线圈绕在磁棒上,相当于电磁铁,其作用就是为了产生交替变化的磁场,驱动小球做往返运动。2、前级放大与滤波模块和锁相环: COIN9MPSGUTHD0A6B7LER8FK.u+-ignal_cotre5图(4)由于检测线圈的初、次极间间距较大,故易受外界干扰信号的影响,并且的波形受到驱动线圈的电磁场的干扰,所以把各通道的输入信号经一阶低通滤波并放大送至锁相环的输入端,滤波器的截止频率同前面的 RC 无源滤波器,R、C 参数也

7、是相同的,后面再经一级放大,最后输入到锁相环 14 号输入脚的电压峰值为 5V(小钢球静止时) 。(如图(4)所示)图(5)如图(5)所示,HEF4046 锁相环芯片由压控振荡器、相位比较器和环路滤波器三部分组成。本电路中使用的是相位比较器 2,其中图(4)中 R78、R80、R82 和 C37 决定了锁相环 VCO 锁定频率的范围,而 R73、R65、R66、C28、C29 则组成了低通滤波器,将相位比较器输出的脉动的电压信号转换为直流信号,并送至 VCO 输入端。这时 VCO将产生振荡,由于分频系数 N=1,所以当环路稳定时,相位比较器将输出一固定频率的电压信号,即实现了对输入信号的相位锁

8、定。前级放大器输出的正弦信号输入至相位比较器的输入端时,在 HEF4046 的 4 号脚将产生一个同频同相的方波信号,1 号脚将产生低电平的脉冲信号,不过实测时有相位误差,不过是可以接受的。其他 3 通道也是同样的道理。3、同步检波与后级放大滤波6GND0.1uFC579X2Y34+Vs8WZ-UALMKRcarie_not图(6)同步检波器由乘法器和运放 U10C 组成的低通滤波器组成。乘法器 AD633 实现正弦信号(当小钢球运动时相当于 DSB 信号)与锁相环 VCO 输出信号(载波信号)的相乘,所得到的信号然后再经低通滤波器,即可解调出缓慢变化的包络信号(调制信号) ,此信号即为小球的

9、往返运动所产生的轨迹信号。R121、C62 为 RC 滤波器,去处干扰所用,最后经放大器放大,调节电位器 R117 使 LM224 的输出电压 DC_out0 峰值为 1.8Vp。输出波形分析:a 段 b 段图(7)7输出波形如图(7)所示,其中类似正弦信号的波形即是小钢球谐振运动的轨迹信号,即调制信号。由实验观察,得出结论:当小球由测试杯圆弧轨道一侧最高点向下运动至最底点,再向上运动到另一侧的最高点所得到的轨迹波形为 a 段;同理反向运动所得到的轨迹波形为 b 段;并且从图象上可以发现 a 段和 b 段的波形并不一样,这是由于驱动线圈不对称所造成的,但这种影响是很小的,可以看成是相同的。另外

10、由上图还可看出,DC_out0 的频率是驱动信号(方波信号)的 2 倍。其他三个通道也是如此,不再详诉。4、AD 模拟数字转换器图(8)TLC1543 是具有 SPI 接口的 11 通道 10 位的模数转换器,其中 SPI 通信的最高速率可达到 2MHz,由于 MAGA16 也具有 SPI 口,所以不需要用单片机进行模拟时序。为了提高测量的精度,AD 转换器的参考电压选用 LM336M2.5,输出的参考电压为 2.5V,可以通过调节电位器 R5,对参考输出电压进行小范围的精密调节。由于只有四通道的模拟电压输出,为了减小干扰,所以把其他七个通道接地。8TLC1543 的 SPI 时序MAGA16

11、 的 SPI 时序图(9)从以上的时序图分析,可以发现 AD 是 16 位的 SPI,其中 B3-B0 为地址,后面的12 位均为空,但是单片机 MAGA16 为 8 位的 SPI,所以必须连续两次送同样的通道号来读取一次采样值,然后再切换通道,单片机 SPI 中断函数如下:AVRX_SIGINT(SIG_SPI)IntProlog();if(q=0)ad1=SPDR;q+;else if(q=1)9ad0=SPDR;q-;AvrXIntSetSemaphore(SPDR = num;Epilog();说明:ad0为 AD 转换的低 8 位,ad1为 AD 转换的高 8 位,num 存取通道号

12、。5、MAGA16 单片机及其外围电路图(10)说明:P7 为 232 串口,单片机晶振为 8MHz,指令周期为 0.125us。PA 口为控制口,控制驱动的强弱,PD4 和 PD5 为 PWM 输出,输出方波频率为 3Hz,且相位相反,LED1、LED2、LED3 为状态指示灯。其他部分的外围电路分别为 RESET 复位和 JTAG 编程口,电路分析略。6、线圈驱动电路图(11)10Q1、Q5 为一对开关管,驱动线圈工作,任意时刻只有一只管子工作,LM317 三端稳压电源为驱动线圈提供驱动电源,DriverPower0 和 Driver1_R0 分别接一侧的驱动线圈的两端,DriverPow

13、er0 和 Driver2_R0 分别接另一侧的驱动线圈的两端。4066 为模拟开关,CNTL 为控制信号,当 CNTL=1时,开关导通;反之关闭。PowerSelect00选择正常的驱动电源,PowerSelect01 选择强的驱动电源。II、 软件部分(测试程序):由于选择的是 AVR 单片机,可以使用实时操作系统 RTOS-AVRX,使软件部分设计变得模块化。测试程序如下:#include #include #include / This defers to avr/signal.h for GCC#include “Avrx.h“#include “serialio.h“ / From

14、 AvrX.#include “hardware.h“#include “avr_macros.h“#define Vref 25600void InitSerial(void);void InitSpi(void);void InitTc1(void);void InitTc2(void);void Putchar(INT8U c);void Putstr(INT8U *s);void Puts(INT8U *s);INT8U *long2str(INT16U hh);INT8U q,num=0x00,ad2;INT8U *value = “0.000 V“;INT16U temp;INT3

15、2U cnt=0;INT16U t=4734,d=2367; /周期,占空比AVRX_IAR_TASK(Monitor, 0, 20, 0);TimerControlBlock timer2,MyTimer,timer1; / Declare the control blocks needed for timersMutex int_spi; / Simple messages (no internal data)/MessageQueue MyQueue; / The message queue/*Timer 0 Overflow Interrupt HandlerPrototypical

16、Interrupt handler:. Switch to kernel context. handle interrupt. switch back to interrupted context.11*/AVRX_SIGINT(SIG_OVERFLOW0)IntProlog(); / Switch to kernel stack/contextTCNT0 = TCNT0_INIT;AvrXTimerHandler(); / Call Time queue managerEpilog(); / Return to tasksAVRX_SIGINT(SIG_OVERFLOW2)IntProlog

17、(); / Switch to kernel stack/contextcnt+;Epilog(); / Return to tasksAVRX_SIGINT(SIG_SPI)IntProlog();if(q=0)ad1=SPDR;q+;else if(q=1)ad0=SPDR;q-;AvrXIntSetSemaphore(SPDR = num;Epilog();void delay_1us(void) /1us 延时函数unsigned char i;for(i=0;i6);if(adtempn0 0) /判断门限阀值,阀值实际只须小于最大值的 1/2 即可,暂设为 0 ad_diff1 =

18、 adtempn0 - adtempn1;ad_diff2 = adtempn1 - adtempn2;adtempn2 = adtempn1;adtempn1 = adtempn0;else /当采样值为零时,清空所有缓冲区ad_diff1 = 0;ad_diff2 = 0;adtempn1 = 0;adtempn2 = 0;13if(ad_diff1=0)wave_crestn+ ; /对波峰标志进行计数if(wave_crestn = 1)waverest_timen0 = cnt;else if(wave_crestn = 2)waverest_timen1 = cnt;Putchar

19、(0x30+n);waverest_time_temp = waverest_timen1-waverest_timen0;Puts(long2str(waverest_time_temp);wave_crestn = 0;if(n = 3)n=0;num = 0x00;elsen+;num += 0x10;value=data_convert(temp);Puts(value);/*Task 2*/AVRX_IAR_TASKDEF(task2, 2, 6, 3)while(1)PORTB = 0x01;AvrXDelay(/*main14*/int main(void) / Main run

20、s under the AvrX StackAvrXSetKernelStack(0);outp(1SE), MCUCR); / Enable “Sleep“ instructionoutp(TCNT0_INIT, TCNT0);outp(TMC8_CK256, TCCR0); / Set up Timer0 for CLK/256 rateoutp(1TOIE0), TIMSK); / Enable Timer0 overflow interruptAvrXRunTask(TCB(task1);AvrXRunTask(TCB(task2);InitSerial();InitSpi();Ini

21、tTc1();InitTc2();Epilog(); / Switch from AvrX Stack to first taskwhile(1);/*InitSerial*/void InitSerial(void)UBRRL = 0x19; /set baud rate lo 19200UBRRH = 0x00; /set baud rate hiUCSRA = 0x00;UCSRB = (1TXEN) | (1RXEN);UCSRC = (1URSEL) | (1UCSZ1) | (1UCSZ0);/*InitSpi*/void InitSpi(void)PORTB=0x40;DDRB=

22、0xb0;PORTB |= 0x10;SPCR=0xd3;SPSR=0x00;/*InitTc1*/void InitTc1(void)15DDRD=0xff;PORTD=0xff;TCCR1A |=(1COM1A1)|(1COM1B1)|(1COM1B0); /初始化 1HZ 方波TCCR1B |=(1WGM13)|(1CS12);ICR1=t; /送周期OCR1A=d; /送占空比OCR1B=d; /送占空比/*InitTc2*/void InitTc2(void)TCCR2=(1CS21); /时钟 8 分频TCNT2=0x00;asm(“sei“);TIMSK=1TOIE2;/*Put

23、char*/void Putchar(INT8U c)while (!(UCSRAUDR=c;/*Putstr*/void Putstr(INT8U *s)while (*s)Putchar(*s);s+;/*Puts*/void Puts(INT8U *s)while (*s)16Putchar(*s);s+;Putchar(0x0d); /回车换行Putchar(0x0a);INT8U *long2str(INT16U hh)INT8U *ss=“ “;ss1=48+hh/1000;ss2=48+(hh%1000)/100;ss3=48+(hh%100)/10;ss4=48+(hh%10)

24、;ss5=0x4C;return ss;以上程序紧作为测试程序,函数 InitTc1()是产生一对相位相反的 PWM 信号,作为线圈驱动的驱动源。当每采到一个 AD 数据数组 ad0和 ad1,中断函数就以信号量的方式向任务 Task1 发信号量。当 Task1 接到来自中断的信号量时就进行信号的处理,信号处理部分就是找到电压信号的波峰值。然后把得到的峰值通过 232 串口发送到 PC 机,再通过串口调试助手观察所得到的电压峰值。III、 结论最终经过 5 个月的时间,完成了这个项目,通过制作发现了很多问题,并经过坚持不懈的努力把问题一一解决,感受很深,收获也很大。测试时所采集到的运动轨迹峰值是很好的,而且受驱动磁场的干扰也很小小,波形很平滑。当谐振运动的小球由于阻尼的增加幅度下降到一半时,这时可以很精确的测出当电压峰值下降到一半的时间。IV、 致谢感谢上海鸿臻电子有限公司为我提供了良好的硬件与软件的环境,很幸运给我以表现的机会,我也没有辜负公司领导的厚望,最终帮他们完成了这个项目,通过实践自己也学到了很多课本以外的东西,扩大了自己的实践经验。同时也要感谢我实习的指导老师基于的支持。V、 参考文献常用电子元件及典型应用 作者:周惠潮 电子工业出版社新型电子电路应用实例 作者:何希才 科学出版社http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信信息 > 电子电气自动化

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报