当前位置:文档之家› 实验 10-1 UART驱动分析

实验 10-1 UART驱动分析

实验 10-1 UART驱动分析
实验 10-1 UART驱动分析

实验10-1 UART驱动程序分析实验

【实验目的】

掌握串口的通信原理。

熟悉串口驱动程序的结构。

【实验步骤】

PXA UART串口驱动初始化

第一步:打开linux-2.6.22.10\drivers\serial\pxa.c,找到串口驱动初始化serial_pxa_init(void)

int __init serial_pxa_init(void)

{

int ret;

ret = uart_register_driver(&serial_pxa_reg);

if (ret != 0)

return ret;

ret = platform_driver_register(&serial_pxa_driver);

if (ret != 0)

uart_unregister_driver(&serial_pxa_reg);

return ret;

}

在UART初始化函数中,首先调用uart_register_driver(struct uart_driver *drv)函数来注册UART驱动,在这函数里它会分配一个tty_driver对象,并初始化tty_operations为serial_pxa_pops, 这是serial-core.c提供的统一的UART操作函数。

第二步:在linux-2.6.22.10\drivers\serial\pxa.c找到serial_pxa_reg结构体的定义如下:

static struct uart_driver serial_pxa_reg = {

.owner = THIS_MODULE,

.driver_name = "PXA serial",

.dev_name = "ttyS",

.major = TTY_MAJOR,

.minor = 64,

.nr = ARRAY_SIZE(serial_pxa_ports),

.cons = PXA_CONSOLE,

};

从serial_pxa_reg结构体中,UART使用的设备名为ttySn(n=0~3),主设备号major为4,次设备号minor为64,串口数nr=ARRAY_SIZE(serial_pxa_ports),根据serial_pxa_ports 结构体的定义,可以算出串口数nr =4,当然PXA270只有三个串口(FFUART、BTUART、

STUART),但是PXA255/26x 微处理器还附加了HWUART,serial_pxa_ports定义如下;static struct uart_pxa_port serial_pxa_ports[] = {

{ /* FFUART */

.name = "FFUART",

.cken = CKEN_FFUART,

.port = {

.type = PORT_PXA,

.iotype = UPIO_MEM,

.membase = (void *)&FFUART,

.mapbase = __PREG(FFUART),

.irq = IRQ_FFUART,

.uartclk = 921600 * 16,

.fifosize = 64,

.ops = &serial_pxa_pops,

.line = 0,

},

}, { /* BTUART */

.name = "BTUART",

.cken = CKEN_BTUART,

.port = {

.type = PORT_PXA,

.iotype = UPIO_MEM,

.membase = (void *)&BTUART,

.mapbase = __PREG(BTUART),

.irq = IRQ_BTUART,

.uartclk = 921600 * 16,

.fifosize = 64,

.ops = &serial_pxa_pops,

.line = 1,

},

}, { /* STUART */

.name = "STUART",

.cken = CKEN_STUART,

.port = {

.type = PORT_PXA,

.iotype = UPIO_MEM,

.membase = (void *)&STUART,

.mapbase = __PREG(STUART),

.irq = IRQ_STUART,

.uartclk = 921600 * 16,

.fifosize = 64,

.ops = &serial_pxa_pops,

.line = 2,

},

}, { /* HWUART */

.name = "HWUART",

.cken = CKEN_HWUART,

.port = {

.type = PORT_PXA,

.iotype = UPIO_MEM,

.membase = (void *)&HWUART,

.mapbase = __PREG(HWUART),

.irq = IRQ_HWUART,

.uartclk = 921600 * 16,

.fifosize = 64,

.ops = &serial_pxa_pops,

.line = 3,

},

}

};

第三步:UART平台驱动注册

初始化函数然后调用平台驱动注册函数platform_driver_register(struct platform_driver *drv)注册UART驱动,该函数实际上定义有关“伪总线”(pseudo-bus)驱动的相关操作,Linux-2.6.x内核为简化一些片上系统(SoC)系统的集成外设和传统PC接插件的驱动接口,提出了“伪总线”的概念。

打开linux-2.6.22.10\drivers\Base\ Platform.c文件,找到 platform_driver_register函数:int platform_driver_register(struct platform_driver *drv)

{

drv->driver.bus = &platform_bus_type;

if (drv->probe)

drv->driver.probe = platform_drv_probe;

if (drv->remove)

drv->driver.remove = platform_drv_remove;

if (drv->shutdown)

drv->driver.shutdown = platform_drv_shutdown;

if (drv->suspend)

drv->driver.suspend = platform_drv_suspend;

if (drv->resume)

drv->driver.resume = platform_drv_resume;

return driver_register(&drv->driver);

}

EXPORT_SYMBOL_GPL(platform_driver_register);

platform_driver_register函数中的serial_pxa_driver变量定义如下:

static struct platform_driver serial_pxa_driver = {

.probe = serial_pxa_probe,

.remove = serial_pxa_remove,

.suspend = serial_pxa_suspend,

.resume = serial_pxa_resume,

.driver = {

.name = "pxa2xx-uart",

},

};

该结构体实际上定义驱动探测(probe)、移除(remove)、挂起(suspend)、重启(resume)等相关函数操作:\drivers\serial\pxa.c文件本质上完成对所有这些函数的实现。

UART驱动相关操作函数

第四步: UART驱动侦测函数(probe)

static int serial_pxa_probe(struct platform_device *dev)

{

serial_pxa_ports[dev->id].port.dev = &dev->dev;

uart_add_one_port(&serial_pxa_reg, &serial_pxa_ports[dev->id].port);

platform_set_drvdata(dev, &serial_pxa_ports[dev->id]);

return 0;

}

UART驱动侦测函数serial_pxa_probe,首先获取基于平台设备的相关资源,然后调用uart_add_one_port函数实现将驱动和一个实际的端口结构体相关联,然后调用platform_set_drvdata函数将UART驱动添加到平台设备platform_device *dev中。

第五步:UART驱动卸载函数(remove)

static int serial_pxa_remove(struct platform_device *dev)

{

struct uart_pxa_port *sport = platform_get_drvdata(dev);

platform_set_drvdata(dev, NULL);

if (sport)

uart_remove_one_port(&serial_pxa_reg, &sport->port);

return 0;

}

UART驱动卸载函数与UART驱动侦测函数恰好相反,首先利用platform_get_drvdata 函数获取驱动相关数据,如果驱动存在,则利用uart_remove_one_port函数将驱动和实际端口结构体断开连接。一般对于UART设备,这种情况只有在关闭操作系统时才存在。

第六步:UART驱动的挂起与重启(suspend、resume)

UART驱动的挂起与重启在具有电源管理功能的系统中才可能发生,当系统进入低功耗或休眠状态,系统将调用serial_pxa_suspend函数使设备进入挂起状态,并将驱动的电源状态切换低功耗状态(3),如果系统被唤醒,则调用驱动的重启serial_pxa_resume,同时将驱

动的电源状态切换到全功耗状态(0)。

static int serial_pxa_suspend(struct platform_device *dev, pm_message_t state)

{

struct uart_pxa_port *sport = platform_get_drvdata(dev);

if (sport)

uart_suspend_port(&serial_pxa_reg, &sport->port);

return 0;

}

static int serial_pxa_resume(struct platform_device *dev)

{

struct uart_pxa_port *sport = platform_get_drvdata(dev);

if (sport)

uart_resume_port(&serial_pxa_reg, &sport->port);

return 0;

}

UART驱动操作

在PXA架构的UART驱动侦测函数(probe)调用uart_add_one_port(&serial_pxa_reg, &serial_pxa_ports[dev->id].port)完成将驱动和一个实际的端口结构体相关联时,引用了使用serial_pxa_ports[dev->id].port,而在uart_pxa_port结构体中的port成员变量中,嵌套了一个uart_ops 结构体成员变量ops;,它定义了串口硬件能完成的所有操作(如数据的收发等)。下面为uart_ops结构体实例,该结构体实例过程实际上将一系列serial_pxa_ 函数赋值给了uart_ops结构体的成员。

struct uart_ops serial_pxa_pops = {

.tx_empty = serial_pxa_tx_empty,//发送缓冲区空

.set_mctrl = serial_pxa_set_mctrl,//设置modem控制(MCR)

.get_mctrl = serial_pxa_get_mctrl,//获取modem控制设置

.stop_tx = serial_pxa_stop_tx,//停止接收字符

.start_tx = serial_pxa_start_tx,//开始传输字符

.stop_rx = serial_pxa_stop_rx,//停止接收字符

.enable_ms = serial_pxa_enable_ms,// modem状态中断使能

.break_ctl = serial_pxa_break_ctl,// 控制break信号的传输

.startup = serial_pxa_startup,//启动串口

.shutdown = serial_pxa_shutdown, //禁用串口

.set_termios = serial_pxa_set_termios,//改变串口参数

.pm = serial_pxa_pm,//端口电源管理

.type = serial_pxa_type,//返回描述特定端口的常量字符串指针

.release_port = serial_pxa_release_port,//释放串口占用的内存及IO资源

.request_port = serial_pxa_request_port,//申请串口所需的内存和IO资源

.config_port = serial_pxa_config_port,//执行端口所需的自动配置步骤

.verify_port = serial_pxa_verify_port,//验证新的串行端口信息

};

所有函数的原型定义中linux-2.6.22.10\include\Linux \Serial_core.h文件中struct uart_ops结构体中:

/*

* This structure describes all the operations that can be

* done on the physical hardware.

*/

struct uart_ops {

unsigned int(*tx_empty)(struct uart_port *);

void(*set_mctrl)(struct uart_port *, unsigned int mctrl);

unsigned int(*get_mctrl)(struct uart_port *);

void(*stop_tx)(struct uart_port *);

void(*start_tx)(struct uart_port *);

void(*send_xchar)(struct uart_port *, char ch);

void(*stop_rx)(struct uart_port *);

void(*enable_ms)(struct uart_port *);

void(*break_ctl)(struct uart_port *, int ctl);

int(*startup)(struct uart_port *);

void(*shutdown)(struct uart_port *);

void(*set_termios)(struct uart_port *, struct ktermios *new,

struct ktermios *old);

void(*pm)(struct uart_port *, unsigned int state, unsigned int oldstate);

int(*set_wake)(struct uart_port *, unsigned int state);

/*

* Return a string describing the type of the port

*/

const char *(*type)(struct uart_port *);

/*

* Release IO and memory resources used by the port.

* This includes iounmap if necessary.

*/

void(*release_port)(struct uart_port *);

/*

* Request IO and memory resources used by the port.

* This includes iomapping the port if necessary.

*/

int(*request_port)(struct uart_port *);

void(*config_port)(struct uart_port *, int);

int(*verify_port)(struct uart_port *, struct serial_struct *);

int(*ioctl)(struct uart_port *, unsigned int, unsigned long);

};

set_mctrl()函数的原型为:

void(*set_mctrl)(struct uart_port *, unsigned int mctrl);

它将参数port所对应的调制解调器控制线的值设为参数mctrl的值。

get_mctrl()函数的原型为:

unsigned int(*get_mctrl)(struct uart_port *);

该函数返回调制解调器控制输入的现有状态,这些状态信息包括:TIOCM_CD(CD 信号状态)、TIOCM_CTS(CTS信号状态)、TIOCM_DSR(DSR信号状态)、TIOCM_RI(RI信号状态)等。如果信号被置为有效,则对应位将被置位。

端口启动函数startup()的原型为:

int(*startup)(struct uart_port *);

该函数申请所有中断资源,初始化底层驱动状态,并开启端口为可接收数据的状态。

shutdown()函数完成与startup()函数的作用相反,其原型:

void(*shutdown)(struct uart_port *);

这个函数禁用端口,释放所有的中断资源。

下面主要对串口操作的启动与停止、数据的数据进行分析

第七步:串口的启动与停止

串口驱动uart_ops结构体的startup ()成员函数serial_pxa_startup用于启动端口,申请端口的发送、接收中断,使能端口的发送和接收,其实现如代码:

static int serial_pxa_startup(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned long flags;

int retval;

if (port->line == 3) /* HWUART */

up->mcr |= UART_MCR_AFE;

else

up->mcr = 0;

/*

* Allocate the IRQ

*/

retval = request_irq(up->port.irq, serial_pxa_irq, 0, up->name, up);

if (retval)

return retval;

/*

* Clear the FIFO buffers and disable them.

* (they will be reenabled in set_termios())

*/

serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);

serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |

UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);

serial_out(up, UART_FCR, 0);

/*

* Clear the interrupt registers.

*/

(void) serial_in(up, UART_LSR);

(void) serial_in(up, UART_RX);

(void) serial_in(up, UART_IIR);

(void) serial_in(up, UART_MSR);

/*

* Now, initialize the UART

*/

serial_out(up, UART_LCR, UART_LCR_WLEN8);

spin_lock_irqsave(&up->port.lock, flags);

up->port.mctrl |= TIOCM_OUT2;

serial_pxa_set_mctrl(&up->port, up->port.mctrl);

spin_unlock_irqrestore(&up->port.lock, flags);

/*

* Finally, enable interrupts. Note: Modem status interrupts

* are set via set_termios(), which will be occurring imminently

* anyway, so we don't enable them here.

*/

up->ier = UART_IER_RLSI | UART_IER_RDI | UART_IER_RTOIE | UART_IER_UUE;

serial_out(up, UART_IER, up->ier);

/*

* And clear the interrupt registers again for luck.

*/

(void) serial_in(up, UART_LSR);

(void) serial_in(up, UART_RX);

(void) serial_in(up, UART_IIR);

(void) serial_in(up, UART_MSR);

return 0;

}

串口驱动uart_ops结构体的shutdown ()成员函数serial_pxa_shutdown用于串口关闭时释放收发中断、清空数据缓冲和屏蔽FIFO功能其实现如代码:

static void serial_pxa_shutdown(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned long flags;

free_irq(up->port.irq, up);

/*

* Disable interrupts from this port

*/

up->ier = 0;

serial_out(up, UART_IER, 0);

spin_lock_irqsave(&up->port.lock, flags);

up->port.mctrl &= ~TIOCM_OUT2;

serial_pxa_set_mctrl(&up->port, up->port.mctrl);

spin_unlock_irqrestore(&up->port.lock, flags);

/*

* Disable break condition and FIFOs

*/

serial_out(up, UART_LCR, serial_in(up, UART_LCR) & ~UART_LCR_SBC);

serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |

UART_FCR_CLEAR_RCVR |

UART_FCR_CLEAR_XMIT);

serial_out(up, UART_FCR, 0);

}

第八步:串口数据收发中断过程

在PXA的UART串口启动函数serial_pxa_startup中,利用中断注册函数request_irq 注册了一个中断服务程序,在中断服务程序中,首先判断所产生的中断,如果为接收中断,则响应receive_chars(up, &lsr)函数,如果为发送中断,则响应transmit_chars(up)函数。static inline irqreturn_t serial_pxa_irq(int irq, void *dev_id)

{

struct uart_pxa_port *up = dev_id;

unsigned int iir, lsr;

iir = serial_in(up, UART_IIR);

if (iir & UART_IIR_NO_INT)

return IRQ_NONE;

lsr = serial_in(up, UART_LSR);

if (lsr & UART_LSR_DR)

receive_chars(up, &lsr); //接收字符函数

check_modem_status(up);

if (lsr & UART_LSR_THRE)

transmit_chars(up); //发送字符函数

return IRQ_HANDLED;

}

第九步:串口数据接收中断过程

接收字符函数receive_chars调用ch = serial_in(up, UART_RX)函数以获得接收到的字符,并调用uart_insert_char()将该字符添加了tty设备的flip缓冲区中,当接收到256个字符或者不再能接受到字符后,调用tty_flip_buffer_push()函数向上层“压栈”tty设备的flip 缓冲。uart_insert_char函数是串口核心层对tty_insert_flip_char()的封装,它作为内联函数被定义于linux-2.6.22.10\include\Linux \serial_core.h文件文件中。

static inline void receive_chars(struct uart_pxa_port *up, int *status)

{

struct tty_struct *tty = up->https://www.doczj.com/doc/8e13889528.html,->tty;

unsigned int ch, flag;

int max_count = 256;

do {

ch = serial_in(up, UART_RX); //读出字符

flag = TTY_NORMAL;

up->port.icount.rx++;

if (unlikely(*status & (UART_LSR_BI | UART_LSR_PE |

UART_LSR_FE | UART_LSR_OE))) {

/*

* For statistics only

*/

if (*status & UART_LSR_BI) {

*status &= ~(UART_LSR_FE | UART_LSR_PE);

up->port.icount.brk++;

/*

* We do the SysRQ and SAK checking

* here because otherwise the break

* may get masked by ignore_status_mask

* or read_status_mask.

*/

if (uart_handle_break(&up->port))

goto ignore_char;

} else if (*status & UART_LSR_PE)

up->port.icount.parity++;

else if (*status & UART_LSR_FE)

up->port.icount.frame++;

if (*status & UART_LSR_OE)

up->port.icount.overrun++;

/*

* Mask off conditions which should be ignored.

*/

*status &= up->port.read_status_mask;

#ifdef CONFIG_SERIAL_PXA_CONSOLE

if (up->port.line == up->port.cons->index) {

/* Recover the break flag from console xmit */

*status |= up->lsr_break_flag;

up->lsr_break_flag = 0;

}

#endif

if (*status & UART_LSR_BI) {

flag = TTY_BREAK;

} else if (*status & UART_LSR_PE)

flag = TTY_PARITY;

else if (*status & UART_LSR_FE)

flag = TTY_FRAME;

}

if (uart_handle_sysrq_char(&up->port, ch))

goto ignore_char;

//插入字符到tty设备的flip 缓冲

uart_insert_char(&up->port, *status, UART_LSR_OE, ch, flag);

ignore_char:

*status = serial_in(up, UART_LSR);

} while ((*status & UART_LSR_DR) && (max_count-- > 0));

tty_flip_buffer_push(tty); //刷新tty设备的flip 缓冲

}

第十步:串口数据中断发送过程

发送字符函数transmit_chars读取环形缓冲区中的字符,并调用serial_out(up, UART_TX, up->port.x_char)函数将数据写入发送缓冲寄存器UART_TX。当发送环形缓冲区中的字符数小于WAKEUP_CHARS(256),驱动将通过uart_write_wakeup函数请求上层向下传递更多的数据,uart_circ_chars_pending、uart_circ_empty是定义于serial_core.h中的宏,分别返回环形缓冲区剩余的字符数以及判断缓冲区是否为空。

static void transmit_chars(struct uart_pxa_port *up)

{

struct circ_buf *xmit = &up->https://www.doczj.com/doc/8e13889528.html,->xmit; //得到环形缓冲区

int count;

//如果定义了xchar,发送

if (up->port.x_char) {

serial_out(up, UART_TX, up->port.x_char); //发送字符

up->port.icount.tx++;

up->port.x_char = 0;

return;

}

/* 如果没有更多的字符需要发送,或者uart Tx停止,则停止uart并退出 */

if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {

serial_pxa_stop_tx(&up->port);

return;

}

count = up->port.fifosize / 2; //每次最多发送字符的字符数

do {

serial_out(up, UART_TX, xmit->buf[xmit->tail]); // 发送环形缓冲中的数据

xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);

up->port.icount.tx++;

if (uart_circ_empty(xmit)) //发送环形缓冲中的数据已发空

break;

} while (--count > 0);

// 如果环形缓冲区中剩余的字符少于WAKEUP_CHARS,唤醒上层

if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)

uart_write_wakeup(&up->port);

if (uart_circ_empty(xmit)) //如果发送环形buffer为空

serial_pxa_stop_tx(&up->port);//停止发送

}

第十一步:串口的数据发送中断启动过程

串口数据的接收由启动函数所注册的中断服务程序中所调用的接收字符函数receive_chars函数完成,发送数据则有serial_pxa_start_tx函数通过置位发送中断寄存器UART_IER再响应中断服务程序,然后由中断服务程序发送字符函数transmit_chars完成数据的发送。

static void serial_pxa_start_tx(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

if (!(up->ier & UART_IER_THRI)) {

up->ier |= UART_IER_THRI;

serial_out(up, UART_IER, up->ier);//置位发送中断

}

第十二步:串口参数设置

串口驱动uart_ops结构体的set_termios()成员函数用于改变端口的波特率、字长、停止位、奇偶校验等参数设置,它会根据传递给它的port、termios参数成员的值设置PXA架构的UART 的线路控制寄存器(LCR)、波特率分频锁存寄存器(DLL、DLH)、接收FIFO控制寄存器(FCR)等。

static void serial_pxa_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned char cval, fcr = 0;

unsigned long flags;

unsigned int baud, quot;

//设置数据位

switch (termios->c_cflag & CSIZE) {

case CS5:

cval = UART_LCR_WLEN5;

break;

case CS6:

cval = UART_LCR_WLEN6;

break;

case CS7:

cval = UART_LCR_WLEN7;

break;

default:

case CS8:

cval = UART_LCR_WLEN8;

break;

}

if (termios->c_cflag & CSTOPB)

cval |= UART_LCR_STOP; //设置停止位

if (termios->c_cflag & PARENB)

cval |= UART_LCR_PARITY; //奇偶校验使能选择

if (!(termios->c_cflag & PARODD))

cval |= UART_LCR_EPAR; //奇偶校验设置

//获取波特率

baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); quot = uart_get_divisor(port, baud); //UART端口时钟分频系数

//UART端口时钟分频系数设置接收FIFO的大小阈值

if ((up->port.uartclk / quot) < (2400 * 16))

fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR1;

else if ((up->port.uartclk / quot) < (230400 * 16))

fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR8;

else

fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR32;

spin_lock_irqsave(&up->port.lock, flags);//屏蔽中断

up->ier |= IER_UUE;

//更新UART端口的超时设置

uart_update_timeout(port, termios->c_cflag, baud);

up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; if (termios->c_iflag & INPCK)

up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE;

if (termios->c_iflag & (BRKINT | PARMRK))

up->port.read_status_mask |= UART_LSR_BI;

up->port.ignore_status_mask = 0;

if (termios->c_iflag & IGNPAR)

up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;

if (termios->c_iflag & IGNBRK) {

up->port.ignore_status_mask |= UART_LSR_BI;

if (termios->c_iflag & IGNPAR)

up->port.ignore_status_mask |= UART_LSR_OE;

}

if ((termios->c_cflag & CREAD) == 0)

up->port.ignore_status_mask |= UART_LSR_DR;

up->ier &= ~UART_IER_MSI;

if (UART_ENABLE_MS(&up->port, termios->c_cflag))

up->ier |= UART_IER_MSI;

serial_out(up, UART_IER, up->ier);//重新开启中断

if (termios->c_cflag & CRTSCTS)

up->mcr |= UART_MCR_AFE;

else

up->mcr &= ~UART_MCR_AFE;

serial_out(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */

serial_out(up, UART_DLL, quot & 0xff); /* LS of divisor */

serial_out(up, UART_DLM, quot >> 8); /* MS of divisor */

serial_out(up, UART_LCR, cval); /* reset DLAB */

up->lcr = cval; /* Save LCR */

serial_pxa_set_mctrl(&up->port, up->port.mctrl);

serial_out(up, UART_FCR, fcr);//设置接收FIFO控制寄存器

spin_unlock_irqrestore(&up->port.lock, flags);//恢复中断

}

第十三步:串口驱动Modem控制的获取与设置

串口驱动Modem控制的获取主要通过获取PXA架构微处理器的Modem状态寄存器(MSR)中的位信息。

static unsigned int serial_pxa_get_mctrl(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned char status;

unsigned int ret;

status = serial_in(up, UART_MSR);//读取Modem状态寄存器

ret = 0;

if (status & UART_MSR_DCD)//数据载波检测状态(DCD)

ret |= TIOCM_CAR;

if (status & UART_MSR_RI) //振铃状态(RI)

ret |= TIOCM_RNG;

if (status & UART_MSR_DSR) //数据设置准备状态(DSR)

ret |= TIOCM_DSR;

if (status & UART_MSR_CTS) //清除发送状态(CTS)

ret |= TIOCM_CTS;

return ret;

}

串口驱动Modem控制器的设置主要设置PXA架构微处理器的Modem状态控制寄存器(MCR)中的位信息。

static void serial_pxa_set_mctrl(struct uart_port *port, unsigned int mctrl) {

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned char mcr = 0;

if (mctrl & TIOCM_RTS)

mcr |= UART_MCR_RTS;

if (mctrl & TIOCM_DTR)

mcr |= UART_MCR_DTR;

if (mctrl & TIOCM_OUT1)

mcr |= UART_MCR_OUT1;

if (mctrl & TIOCM_OUT2)

mcr |= UART_MCR_OUT2;

if (mctrl & TIOCM_LOOP)

mcr |= UART_MCR_LOOP;

mcr |= up->mcr;

serial_out(up, UART_MCR, mcr); //设置Modem控制寄存器(MCR)

}

第十四步:串口的数据停止收发

串口驱动uart_ops结构体stop_ tx ()成员函数serial_pxa_stop_tx ()用于停止发送串口的数据,主要通过屏蔽发送中断的方式完成。

static void serial_pxa_stop_tx(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

if (up->ier & UART_IER_THRI) {//如果端口发送已使能

up->ier &= ~UART_IER_THRI;//屏蔽发送中断

serial_out(up, UART_IER, up->ier);//设置中断使能寄存器(IER)}

}

串口驱动uart_ops结构体的stop_rx ()成员函数serial_pxa_stop_rx用于停止接收串口的数据,通过屏蔽接收中断的方式完成。

static void serial_pxa_stop_rx(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

up->ier &= ~UART_IER_RLSI;

up->port.read_status_mask &= ~UART_LSR_DR; //接收中断复位

serial_out(up, UART_IER, up->ier); //设置中断使能寄存器(IER)

}

第十五步:串口发送缓冲是否为空的判断

串口驱动uart_ops结构体的tx_empty()成员函数serial_pxa_tx_empty用于判断发送缓冲区是否为空,通过获取UART的线路状态寄存器(LSR)的TEMT位来确定发送缓冲是否为空,代码如下:

static unsigned int serial_pxa_tx_empty(struct uart_port *port)

{

struct uart_pxa_port *up = (struct uart_pxa_port *)port;

unsigned long flags;

unsigned int ret;

spin_lock_irqsave(&up->port.lock, flags);

ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;//判断TEMT位spin_unlock_irqrestore(&up->port.lock, flags);

return ret;

}

第十六步:串口驱动的其他操作函数。

串口驱动uart_ops结构体其他操作函数如type()成员函数serial_pxa_type(struct uart_port *port)、config_port成员函数static void serial_pxa_config_port(struct uart_port *port, int flags)等,相对比较简单,大家可参考linux-2.6.22.10\drivers\serial\ pxa.c文件。

UART驱动调试

第十七步:打开linux-2.6.22.10\drivers\serial\ pxa.c文件,在UART驱动初始化serial_pxa_init函数中增加调试信息。

int __init serial_pxa_init(void)

{

int ret;

printk(KERN_NOTICE"serial_pxa_init......\n");

ret = uart_register_driver(&serial_pxa_reg);

if (ret != 0)

return ret;

ret = platform_driver_register(&serial_pxa_driver);

if (ret != 0)

uart_unregister_driver(&serial_pxa_reg);

printk(KERN_NOTICE"serial_pxa_init-->driver name%s\n",

serial_pxa_https://www.doczj.com/doc/8e13889528.html,);

return ret;

}

第十八步:在UART驱动探测函数serial_pxa_init函数中增加调试信息。

static int serial_pxa_probe(struct platform_device *dev)

{

printk(KERN_NOTICE"serial_pxa_probe......\n");

serial_pxa_ports[dev->id].port.dev = &dev->dev;

uart_add_one_port(&serial_pxa_reg, &serial_pxa_ports[dev->id].port);

platform_set_drvdata(dev, &serial_pxa_ports[dev->id]);

printk(KERN_NOTICE"pxa_serial_probe-->port name is %s\n",

serial_pxa_ports[dev->id].name);

return 0;

}

第十九步:重新编译、下载内核,从串口中断查看调试信息。分析串口驱动加载过程。

【图10-1-1】

局部解剖学实验方案

局部解剖学实验总结周振东 经过一个学期的局解实验课学习,以下是我对每次实验课的总结 第一次实验课主要是腋窝的解剖。 1. 解剖浅层找到肋间臂神经 剔除浅筋膜和腋筋膜后。 。 从喙突向下修洁肱二头肌短头和喙肱肌;2)在喙肱肌内部剖出肌皮神经、正中神经;3)再循正中神经向上找出位于其二根之间的腋动脉;4)剖出位于腋动静脉之间较粗的尺神经和前臂内侧皮神经及位于腋静脉内侧的臂内侧皮神经;5)观察腋动脉的分段,剖出各段的分支;6)在腋动脉的后方,找出桡神经。 (5)解剖腋窝后壁穿三边空、四边孔的结构:剖出穿三边空的旋肩胛动脉和传四边孔的腋神经、旋肱后动脉。 (6)解剖胸背神经,肩胛下神经上支和下支,位于腋中线附近的胸长神经。 (二)臂、肘、前臂前区,肩胛区,臂、肘、前臂后区 Ⅰ臂、肘、前臂前区. 1.解剖浅层结构: (1)寻认头静脉及前臂外侧皮神经,贵要静脉及前臂内侧皮神经。 (2)寻找臂内侧皮神经、肘正中静脉、肘淋巴结。 2.臂部剔除浅筋膜和深筋膜: 3观察肱二头肌内、外侧沟及有关的血管神经:正中神经、尺神经、肱动脉及桡神经,观察它们的走行、分布范围。 4解剖肘窝: (1)清理肘窝的边界:观察肘窝的境界,显露肘窝的内容。 (2)解剖肘窝内的结构:修洁肱二头肌腱,在其内侧剖出和修洁肱动脉的末端至分为桡、尺动脉,在肱动脉的内侧修洁正中神经。 5解剖前臂前肌群、血管和神经: (1)观察前臂肌前群浅层。 (2)剖查桡血管神经束:将肱桡肌拉向外侧,修洁桡动脉和桡神经前支,并寻找其分支。 (3)剖查尺血管神经束:将尺侧腕屈肌拉向外侧,找出尺神经和尺动脉,并寻找其分支。 (4)剖查正中神经:在旋前圆肌两头之间找出已剖出的正中神经,观察其分支分布。 (5)剖查前臂肌前群深层。 6 剖出骨间总动脉、骨间前动脉、骨间后动脉和前臂屈肌后间隙。 Ⅱ肩胛区,臂、肘、前臂后区 1. 解剖浅筋膜及浅筋膜内的结构:找出臂外侧皮神经、臂后皮神经、贵要静脉、头静

步进电机控制实验

步进电机控制实验 一、实验目的: 了解步进电机工作原理,掌握用单片机的步进电机控制系统的硬件设计方法,熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试水平。 二、实验容: 编写并调试出一个实验程序按下图所示控制步进电机旋转: 三、工作原理: 步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对执行机构的控制。步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、打印机以及光学仪器中得到广泛的应用。 步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。从图中可以看出,电机的定子上有六个等分磁极,A、A′、B、B′、C、C ′,相邻的两个磁极之间夹角为60o,相对的两个磁极组成一相(A-A′,B-B′,C-C′),当某一绕组有电流通过时,该绕组相应的两个磁极形成N极和S极,每个磁极上各有五个均匀分布矩形小齿,电机的转子上有40个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为9°。 当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的小齿和转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子和定子的齿相互对齐。由此可见,错齿是促使步进电机旋转的原因。 三相步进电机结构示意图 例如在三相三拍控制方式中,若A相通电,B、C相都不通电,在磁场作用下使转子齿和A相的定子齿对齐,我们以此作为初始状态。设与A相磁极中心线对齐的转子的齿为0

实验室常用标准

1.GB21549-2008实验室玻璃仪器玻璃烧器的安全要求; 2.GB/T21784.2-2008实验室玻璃器皿通用型密度计第2部分:试验方法和使用; 3.GB/T21298-2007实验室玻璃仪器试管; 4.GB/T21297-2007实验室玻璃仪器互换锥形磨砂接头; 5.GB/T11414-2007实验室玻璃仪器瓶; 6.GB/T12804-2011实验室玻璃仪器量筒; 7.GB/T12805-2011实验室玻璃仪器滴定管; 8.GB/T12806-2011实验室玻璃仪器单标线容量瓶; 9.GB/T28211-2011实验室玻璃仪器过滤漏斗; 10.GB/T28212-2011实验室玻璃仪器冷凝管; 11.GB/T28213-2011实验室玻璃仪器培养皿; 12.GB/T22362-2008实验室玻璃仪器烧瓶; 13.GB/T22067-2008实验室玻璃仪器广口烧瓶; 14.GB/T11165-2005实验室pH计; 15.GB/T30431-2013实验室气相色谱仪; 16.GB4793.7-2008测量、控制和实验室用电气设备的安全要求第7部分:实验室用离心机的特殊要求; 17.GB12803-1991实验室玻璃仪器:量杯; 18.GB12807-1991实验室玻璃仪器:分度吸量管; 19.GB12808-1991实验室玻璃仪器:单标线吸量管; 20.GB21549-2008实验室玻璃仪器:玻璃烧器的安全要求; 21.GBT11414-2007实验室玻璃仪器瓶;

22.GBT12804-2011实验室玻璃仪器:量筒; 23.GBT12805-2011实验室玻璃仪器:滴定管; 24.GBT12806-2011实验室玻璃仪器:单标线容量瓶; 25.GB/T12807-1991实验室玻璃仪器:分度吸量管; 26GB/T12808-1991 实验室玻璃仪器:单标线吸量管; 27.GBT12809-1991实验室玻璃仪器:玻璃量器的设计和结构原则; 28.GBT12810-1991实验室玻璃仪器:玻璃量器的容量校准和使用方法; 29.GBT14149-1993实验室玻璃仪器:互换球形磨砂接头; 30.GBT15723-1995实验室玻璃仪器:干燥器; 31.GBT15724-2008实验室玻璃仪器:烧杯; 32.GBT15725.4-1995实验室玻璃仪器:双口、三口球形圆底烧瓶; 33.GBT15725.6-1995实验室玻璃仪器:磨口烧瓶; 34.GBT21297-2007实验室玻璃仪器:互换锥形磨砂接头; 35.GBT21298-2007实验室玻璃仪器:试管; 理化仪器类 1.GBT1914-2007化学分析滤纸; 2.GB24789-2009用水单位水计量器具配备和管理通则; 3.GBT11007-2008电导率仪试验方法;

局部解剖学实验指导胸部参考答案汇总

局部解剖学实验指导参考答案 第一章胸部 一、选择题 A 型题: 1-5 E A A D D 6-10 D D A E B 11-15 D D D C B 16-20 D B E A C 21-25 E E C D C 26-30 B D E C E 31-35 C A C A D 36-40 B C C A C 41-45 C C D C E 46-48 B D D B 型题: 49-50 B A 51-55 A D C A B 56-60 E C D D C 61-65 B A A E D 66-70 B E E D C 71-75 B A B C A 76-77 D E C 型题: 78-80 A B D 81-85 A A C D A 86-90 C C A D D 91-95 A B C D B 96-100 A C A B D X 型题:

101-105 ABCE ACD ABCD ABDE CD 106-110 ACDE BDE ABCDE ACDE ABCE 111-115 ABC ABCDE ABE BDE CE 116-120 ADE ACE BC AB ABCD 121-125 ABC BCDE ABCD AC DE 126-130 BD AB ABCDE BC AD 131-133 BCDE ACE ABCDE 注:第 123题 C 选择项“弓”去掉。 二、填空题 1.皮肤、浅筋膜、深筋膜、胸廓外肌层、肋骨、胸内筋膜、壁胸膜 2.肋弓、剑胸结合 3.乳房、胸肌筋膜、乳房悬韧带 4.胸肌淋巴结、中央淋巴结、尖淋巴结、锁骨上淋巴结、胸骨旁淋巴结、对侧乳房淋巴管、腹前外侧壁上部的淋巴管、膈下间隙、肝、胸肌间淋巴结、尖淋巴结。 5.胸长神经、前锯肌、翼状肩;胸背神经、背阔肌 6.肋胸膜、膈胸膜、纵隔胸膜、胸膜顶;胸膜隐窝、肋胸膜、膈胸膜、肋膈隐窝 7.肺静脉、肺动脉、支气管;肺动脉、支气管、肺静脉;上叶支气管、肺动脉、中下叶支

步进电机驱动及控制专业技术解答

步进电机驱动及控制技术解答 1.步进电机为什么要配步进电机驱动器才能工作? 步进电机作为一种控制精密位移及大范围调速专用的电机, 它的旋转是以自身固有的步距角角(转子与定子的机械结构所决定)一步一步运行的, 其特点是每旋转一步,步距角始终不变,能够保持精密准确的位置。所以无论旋转多少次,始终没有积累误差。由于控制方法简单,成本低廉,广泛应用于各种开环控制。步进电机的运行需要有脉冲分配的功率型电子装置进行驱动, 这就是步进电机驱动器。它接收控制系统发出的脉冲信号,按照步进电机的结构特点,顺序分配脉冲,实现控制角位移、旋转速度、旋转方向、制动加载状态、自由状态。控制系统每发一个脉冲信号, 通过驱动器就能够驱动步进电机旋转一个步距角。步进电机的转速与脉冲信号的频率成正比。角位移量与脉冲个数相关。步进电机停止旋转时,能够产生两种状态:制动加载能够产生最大或部分保持转矩(通常称为刹车保持,无需电磁制动或机械制动)及转子处于自由状态(能够被外部推力带动轻松旋转)。步进电机驱动器必须与步进电机的型号相匹配。否则将会损坏步进电机及驱动器。 2.什么是驱动器的细分?运行拍数与步距角是什么关系? “细分”是针对“步距角”而言的。没有细分状态,控制系统每发一个步进脉冲信号,步进电机就按照整步旋转一个特定的角度。步进电机的参数,都会给出一个步距角的值。如110BYG250A型电机给出的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这是步进电机固有步距角。通过步进电机驱动器设置的细分状态,步进电机将会按照细分的步距角旋转位移角度,从而实现更为精密的定位。以110BYG250A电机为例,列表说明: 可以看出,细分数就是指电机运行时的真正步距角是固有步距角(整步)的几分指一。例如,驱动器工作在10细分状态时,其步距角只有步进电机固有步距角的十分之一。当驱动器工作在不细分的整步状态时,控制系统每发一个步进脉冲,步进电机旋转1.8°;而用细分驱动器工作在10细分状态时,电机只转动了0.18°。其实,细分就是步进电机按照微小的步距角旋转,也就是常说的微步距控制。当然,不同的场合,有不同的控制要求。并不是说,驱动步进电机必须要求细分。有些步进电机的步距角设计为3.6°、7.5°、15°、36°、180°,就是为了加大步距角,以适应特殊的工况条件。细分功能,只由驱动器采用精确控制步进电机的相电流方法,与步进电机的步距角无关,而与步进电机实际工作状态相关。 运行拍数与驱动器细分的关系是:运行拍数指步进电机运行时每转一个齿距所需的脉冲数。例如:110BYG250A电机有50个齿,如果运行拍数设置为160,那么步进电机旋转

常用实验室检查

常用实验室检查 [血液检查] 1.红细胞计数(RBC)正常值:成年男性为(4.0—5.5)×1012/L;女性为(3.5—5.0)×1012/L。 2.血红蛋白(Hb)正常值:成年男性为120—160g/L;女性为110—150g/L。 3.红细胞与血红蛋白病理性增多常见于慢性肺心病患者。 4.红细胞与血红蛋白降低均称为贫血,其中血红蛋白的降低值对贫血程度判断更重要。 5.红细胞生成减少见于缺铁性贫血、巨幼细胞性贫血、再生障碍性贫血等患者。 6.红细胞破坏过多见于各种溶血性贫血,如遗传性球型红细胞增多症,阵发性睡眠性血红蛋白尿、免疫性溶血性贫血等。 7.白细胞计数(WBC)正常值:成人为(4.0—10.0)×1012/L。 8.白细胞分类计数(DC)中性粒细胞(包括杆状核、分叶核)占50%—75%。 9.白细胞及中性粒细胞增多最常见于急性感染(尤其是化脓菌感染);急性失血、急性溶血、急性中毒、组织严重损伤或坏死、恶性肿瘤等疾病均可引起白细胞及中性粒细胞增多。10.白细胞及中性粒细胞减少多见于病毒感染和部分格兰阴性杆菌感染(如伤寒、流感);再生障碍性贫血、脾功能亢进、电离辐射、使用某些化学药物等均可引起白细胞及中性粒细胞减少。 11.外周血液中中性粒细胞不分叶核粒细胞增多(>5%)即为核左移;核左移常见于急性化脓菌感染、急性失血、急性中毒及急性溶血反应等患者。 12.外周血液中中性粒细胞核分叶5叶以上者增多(>3%)即为核右移;核右移常见于巨幼细胞性贫血、恶性贫血、慢性感染、尿毒症等患者。 13.嗜酸性粒细胞增多见于变态反应性疾病,如支气管哮喘、药物过敏反应等。 14.淋巴细胞增多见于病毒感染、结核感染及慢性淋巴细胞性白血病等。 15.血小板计数(PC或PLT)正常值:(100—300)×109/L。 16.女性月经期的第1日可引起血小板生理性减少。 17.血小板病理性减少常见于再生障碍性贫血、急性白血病、特发性血小板减少性紫癜(ITP)、脾功能亢进、弥散性血管内凝血(DIC)等患者。 18.网织红细胞的增减可反映骨髓造血功能的盛衰;网织红细胞增多见于各种增生性贫血,网织红细胞减少见于再生障碍性贫血等患者。 19.测定红细胞沉降率(血沉)时,标本中应加入的抗凝剂为3.8%的枸橼酸钠0.4ml。 20.血沉病理性增快见于各种急慢性炎症、组织损伤、恶性肿瘤等患者。 [尿液、粪便检查] 21.做尿常规检查尿标本可随时留取新鲜尿液100ml左右,但以晨尿最好。 22.正常成人每天尿量为1000—2000ml;超过2500ml为多尿;少于400ml为少尿;少于100ml 为无尿。 23.每升尿内含有血量超过1ml即出现淡红色,称肉眼血尿;尿液离心沉淀后每高倍视野平均见到3个以上红细胞称为镜下血尿。 24.肉眼血尿或镜下血尿常见于泌尿系统炎症、肾结核、肾结石、肾肿瘤等。 25.新鲜尿液若呈白色或黄色混浊为脓尿或菌尿;尿液离心沉淀后每高倍视野平均见到5个以上白细胞为镜下脓尿。 26.脓尿或菌尿、镜下脓尿常见于泌尿系统感染,如肾盂肾炎、膀胱炎、尿道炎等。 27.尿液呈深黄色且震荡后出现黄色泡沫为胆红素尿;胆红素尿见于阻塞性黄疸和肝细胞性黄疸患者。 28.尿液呈酱油色多见于血红蛋白尿;血红蛋白尿见于各种原因引起溶血的患者。 29.尿液呈乳白色为乳糜尿;乳糜尿见于丝虫病、肾周围淋巴管阻塞的患者。

步进电机的控制实验报告

步进电机的控制实验报告 一、实验目的 1.学习步进电机的工作原理。 2.了解步进电机的驱动电路。 3.学会用单片机控制步进电机。 二、实验器件 1.T IVA C 系列芯片,电机模块和LCD显示模块。 2.电脑以及CCS开发软件。 三、实验内容 设计一个简单的程序驱动步进电机并控制转速,通过LCD板上的滚轮装置可以调节步进电机的转速。 四、实验原理 双极性四线步进电机:一般双极性四线步进电机线序是 A B A/ B/, 其中A 与A/是一个线圈,B和B/是一个线圈,一般这种驱动需要的是H桥电路。 H双极性四线步进电机驱动相序: 1.单相四拍通电驱动时序 正转: A/ B A B/ 反转: B/ A B A/ 2.双相通电四拍驱动时序 正转:A/B AB AB/ A/B/ 反转:A/B/ AB/ AB A/B 3.半步八拍驱动时序 正转:A/ A/B B AB A AB/ B/ A/B/ 反转:A/B/ B/ AB/ A AB B A/B A/

DRV8833驱动芯片: DRV8833为玩具、打印机及其他机电一体化应用提供了一款双通道桥式电机驱动器解决方案。该器件具有两个H 桥驱动器,并能够驱动两个直流(DC)电刷电机、一个双极性步进电机、螺线管或其他电感性负载。每个H桥的输出驱动器模块由N沟道功率MOSFET组成,这些MOSFET被配置成一个H桥,以驱动电机绕组。每个H桥都包括用于调节或限制绕组电流的电路。借助正确的PCB设计,DRV8833的每个H桥能够连续提供高达1.5-ARMS(或DC)的驱动电流(在25℃和采用一个5VVM电源时)。每个H桥可支持高达2A的峰值电流。在较低的VM电压条件下,电流供应能力略有下降。该器件提供了利用一个故障输出引脚实现的内部关断功能,用于:过流保护、短路保护、欠压闭锁和过热。另外,还提供了一种低功耗睡眠模式。 DRV8833内置于16引脚HTSSOP封装或采用PowerPAD?的QFN封装(绿色环保:RoHS和无Sb/Br)。 图1 H桥电路真值表 设计思路:使用单相四拍通电驱动时序驱动步进电机。用单片机生成四个占空比为25%相位逐个延迟90度的PWM信号,按照特定顺序输入到驱动芯片的AIN1、AIN2、BIN1、BIN2引脚。通过调节LCD模块上的滚轮来调节PWM信号的周期从而控制步进电机的转速。调节的频率范围是25HZ-50HZ。步进电机的转速信息通过传感器采样送到单片机,信息处理后送到LCD显示模块显示。 实验主程序: int main(void) { uint32_t pui32ADC0Value[1]; // 保存ADC采样值 int speed = 0; uint32_t cur_Period, old_Period = 0; // 根据滚轮ADC转换值换算出当前的时间周期值 // 系统时钟设置 SysCtlClockSet(SYSCTL_SYSDIV_64 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // 初始化滚轮 Init_ADCWheel();

步进电机驱动器控制信号接口说明

. .. 步进电机驱动器控制信号接口说明 驱动器是把计算机控制系统提供的弱电信号放大为步进电机能够接受的强电流信号,控制系统提供给驱动器的信号主要有以下三路: 1.步进脉冲信号CP:这是最重要的一路信号,因为步进电机驱动器的原理就是要把控制系统发出的脉冲信号转化为步进电机的角位移, 或者说:驱动器每接受一个脉冲信号CP,就驱动步进电机旋转一步距角, CP的频率和步进电机的转速成正比, CP的脉冲个数决定了步进电机旋转的角度。这样,控制系统通过脉冲信号CP就可以达到电机调速和定位的目的。 2.方向电平信号 DIR:此信号决定电机的旋转方向。比如说,此信号为高电平时电机为顺时针旋转,此信号为低电平时电机则为反方 向逆时针旋转。此种换向方式,我们称之为单脉冲方式。另外,还有一种双脉冲换向方式:驱动器接受两路脉冲信号(标注为CW和CCW),当其中一路(如CW)有脉冲信号时,电机正向运行,当另一路(如CCW)有脉冲信号时,电机反向运行。用户使用何种方式,由拨位开关设定。 3.使能信号EN:此信号在不连接时默认为有效状态,这时驱动器正常工作。当此信号回路导通时,驱动器停止工作,这时电机处于无力矩状态(等同于本公司SH系列驱动器的FREE信号),此信号为选用信号。 为了使控制系统和驱动器能够正常的通信,避免相互干扰,我们在驱动器内部采用光耦器件对输入信号进行隔离,三路信号的内部接口电路相同,常用的连接方式为①共阳方式:把CP+、DIR+和EN+接在一起作为共阳端接外部系统的+5V,脉冲信号接入CP-端,方向信号接入DIR-端,使能信号接入EN-端;②共阴方式:把CP-、DIR-和EN-接在一起作为共阴端接外部系统的GND,脉冲信号接入CP+端,方向信号接入DIR+端,使能信号接入EN+端;③差动方式:直接连接。 驱动器输入信号内部接口示意图 如果驱动器输入信号为电压信号,要求:3.6V≤高电平≤5.5V; -5.5V≤低电平≤0.3V,最常用的为TTL电平。 如果驱动器输入信号为电流信号,要求:7mA≤高电流≤18mA; -18mA≤低电流≤0.2mA。 不管是电压信号还是电流信号,最终转化为光耦器件的输入电流以达到信号传输的目的(参考上图),如果电压信号的幅值超出以上要求的范围须在外部另加限流电阻R,保证给驱动器内部光耦提供7-18mA的驱动电流,参见下图和下表。 步进电机的运行是由脉冲信号控制的,步进电机在脉冲信号的有效沿到来的时刻移动一个步距角,本系列驱动器的有效沿是指:脉冲信号电流“由小到大”的时刻,或者说脉冲电平“由低到高”的时刻,或者说是驱动器内部光耦“由截止到打开”的时刻。 脉冲信号的频率要求不大于200KHz; 脉冲信号的宽度要求不小于2μS。 脉冲信号的驱动电流要求为7-18mA 电机换向时,一定要在电机降速停止后再换向。换向信号要求在前一个方向的最后一个脉冲有效沿结束至少5μS以上才能改变换向信号,且不滞后下一个脉冲信号的有效沿。 如果使用双脉冲CW/CCW方式,则要求下一个方向的第一个脉冲(如CCW)在前一个方向的最后一个脉冲(CW)有效沿后至少5μs才能有效。

Linux操作系统的安装使用实验报告

实验报告 课程名称计算机网络原理与技术实验项目Linux操作系统的安装及使用专业班级姓名学号 指导教师成绩日期 一、实验目的 1、掌握虚拟机VMware软件的安装和使用; 2、掌握Linux系统软件的安装和使用; 4、掌握Linux命令的使用; 二、实验设备和环境 个人计算机一台、虚拟光驱、虚拟机VMware软件、Linux系统软件 三、实验内容 1、通过虚拟机安装Linux系统; 2、熟悉Linux的基本命令; 3、在Linux下编译一个C语言程序; 4、在Linux环境下配置TCP/IP协议; 5、设置Linux与Windows文件夹共享。 四、实验过程 1、安装VMware软件 双击安装文件,按照提示逐步安装,完成后的打开软件,如下图 这时就可以安装Linux系统了。

2.安装Lniux系统 选择“新建虚拟机”,按“下一步”,选择“典型”,“Linux”,“red hat linux”,其他按照默认选择。得到一个虚拟机界面(如下图所示)。 选中“CD-ROM”这项,将其设置为:“使用映像文件”然后导入Linux 系统的安装的第一张盘。(如下图所示)

点击“启动此虚拟机”,按照提示选择默认值,选择“个人工作站”。其他全部默认即可。在安装过程中,会提示“插入第二张光盘”,“插入第三张光盘”,这时同样用虚拟光驱加载镜像文件。重起后进入(如下图所示)。 选择默认,进入系统。 3.安装VMware tools。 选择VMware软件的菜单“虚拟机”、“安装VMware工具”,看见如下两个文件。双击rpm 格式文件。完成后,打开如下图的文件夹。

双击第一个压缩包进行解压到/usr/bin目录下。 在终端下运行以下命令(如图所示):

常用实验室检查正常值

临床常用实验室检查正常值 血液检查 红细胞成年男性(4.0~5.5)×1012/L 女性(3.5~5.5)×1012/L 新生儿(6.0~7.0)×1012/L 血红蛋白成年男性120~160g/L 女性110~150g/L 新生儿170~200g/L 白细胞成人(4~10)×109/L 新生儿(15~20)×109/L 6个月~2岁(11~12)×109/L 白细胞分类N 50~70% E 0.5~5% B0~1% L20~40% M3~8% 血小板(100~300 )×109/L 红细胞比容男0.4~0.5 女0.37~0.48 红细胞平均指数MCV82~92fl MCH27~31pg MCHC320~360g/L 出血时间Duke法 1~3min 凝血时间试管法 4~12min 凝血酶原时间11~13s 网织红细胞0.5%~1.5% 平均1%新生儿2%~6% 红细胞沉降率男0~15mm/h 末女0~20mm/h末 尿液检查 颜色淡黄色 尿量1000~2000ml/24h 平均1500ml/h 比重最大变动范围 1.003~1.030以上 一般变动范围 1.015~1.025 晨尿 1.020左右 尿沉渣检查 红细胞 0~偶见/HP 上皮细胞 0~少量/HP 白细胞<5/HP 透明管型 0~偶见/LP 12小时沉渣计数(Addis计数) 白细胞<1000000 /12h 红细胞<500000/12h 管型<5000/12h 1小时尿细胞计数 白细胞男<7×104/h女<14×104/h

红细胞男<3×104/h女<4×104/h 中段尿培养菌落形成单位(CFU) 杆菌:>105CFU肯定为感染 球菌:>103CFU肯定为感染 尿葡萄糖定性(—)定量斑氏法 0.1~0.9g/d 尿蛋白定性(—)定量<150mg/24h 尿蛋原 稀释试验<1∶20 定量 0~5.9mol/L(0~3.5mg/d) 尿酮体试验定性(—) 尿胆红素试验定性(—) 尿妊娠试验定性乳胶法(—) 粪便检查 颜色:黄褐色量100~300g/日细胞(上皮细胞或白细胞)0~偶见/HP,食物残渣、大量植物细胞、淀粉颗粒、肌纤维等。隐血试验阴性。 血清蛋白测定 总蛋白60~80g /L 白蛋白40~55g/L 球蛋白20~30g/L A/G比值 1.5:1~2.5:1 甲胎蛋白(α-FP,AFP)0~25μg/L (0~25ng/ml)血清C反应蛋白(CRP) 单向免疫扩散法〈8mg/L 尿素氮成人3.2~7.1 mmol/L 儿童1.8~6.5 mmol/L 尿酸119~238μmol/L 肌酐全血88.4~176μmol/L 血清男性53~106μmol/L 女性44~97μmol/L 血糖(空腹) 全血(Folin-吴法)4.4~6.7(80~120 血清(邻甲苯胺法)3.9~6.4 mmol/L(70~110 mg/dl) 血钾(K+)4.1~5.6 mmol/L(4.1~5.6 mEq/L) 血钠(Na+)135~144 mmol/L(135~144 mEq/L) 血钙(Ca2+) 2.2~2.7 mmol/L

步进电机实验报告剖析

北华航天工业学院 课程设计报告(论文) 课程名称:微机控制技术课程设计 设计课题:步进电机的控制系统 专业班级: 学生姓名: 指导教师: 设计时间:2013年06月11日

北华航天工业学院电子工程系 微机控制技术课程设计任务书 姓名:专业:班级: 指导教师:职称:教授时间:2013.6.11 课程设计题目:步进电机的控制系统 设计步进电机单片机控制系统,其功能如下: 1.具有对步进电机的启停、正反转、加减速控制; 2.控制按钮分别为正转、反转、加速、减速、以及停止键; 3.能够通过三位LED数码管(或液晶显示器)显示当前的转动速度,并且由两只不同颜色的发光二极管分别指示正转和反转,因此可以清楚的显示当前转动方向和转速; 4.要求每组选择的步进电机控制字不同; 5.用单片机做控制微机; 应用软件:keil protues 成果验收形式: 1.课程设计的仿真结果 2.课程设计的报告书 参考文献: 【1】张家生. 电机原理与拖动基础【M】. 北京:北京邮电大学出版社,2006. 【2】马淑华,王凤文,张美金. 单片机原理与接口技术【M】.北京:北京邮电大学出版社,2007. 【3】顾德英,张健,马淑华.计算机控制技术【M】. 北京:北京邮电大学出版社,2006. 【4】张靖武,周灵彬. 单片机系统的PROTEUS设计与仿真【M】. 北京:电子工业出版社,2007 第16周 时间 安排 指导教师教研室主任: 2013年06 月11日

内容摘要 步进电机是一种进行精确步进运动的机电执行元件,它广泛应用于工业机械的数字控制,为使系统的可靠性、通用性、可维护性以及性价比最优,根据控制系统功能要求及步进电机应用环境,确定了设计系统硬件和软件的功能划分,从而实现了基于8051单片机的四相步进电机的开环控制系统。控制系统通过单片机存储器、I/O接口、中断、键盘、LED显示器的扩展、步进电机的环形分频器、驱动及保护电路、人机接口电路、中断系统及复位电路、单电压驱动电路等的设计,实现了四相步进电机的正反转,急停等功能。为实现单片机控制步进电机系统在数控机床上的应用,系统设计了两个外部中断,以实现步进电机在某段时间内的反复正反转功能,也即数控机床的刀架自动进给运动,随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,自六十年代初期以来,步进电机的应用得到很大的提高。 关键词:步进电机单片机数码管显示

步进电机工作原理、驱动控制系统与选型

步进电机工作原理、驱动控制系统与选型 一、感应子式步进电机工作原理 (一)反应式步进电机原理 由于反应式步进电机工作原理比较简单。下面先叙述三相反应式步进电机原理。 1、结构: 电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开。0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图: 2、旋转: 如A相通电,B,C相不通电时,由于磁场作用,齿1与A对齐,(转子不受任何力以下均同)。 如B相通电,A,C相不通电时,齿2应与B对齐,此时转子向右移过1/3て,此时齿3与C偏移为1/3て,齿4与A偏移(て-1/3て)=2/3て。 如C相通电,A,B相不通电,齿3应与C对齐,此时转子又向右移过1/3て,此时齿4与A偏移为1/3て对齐。 如A相通电,B,C相不通电,齿4与A对齐,转子又向右移过1/3て。 这样经过A、B、C、A分别通电状态,齿4(即齿1前一齿)移到A 相,电机转子向右转过一个齿距,如果不断地按A,B,C,A……通电,

电机就每步(每脉冲)1/3て,向右旋转。如按A,C,B,A……通电,电机就反转。 由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系。而方向由导电顺序决定。 不过,出于对力矩、平稳、噪音及减少角度等方面考虑。往往采用A-AB-B-BC-C-CA-A这种导电状态,这样将原来每步1/3て改变为1/6て。甚至于通过二相电流不同的组合,使其1/3て变为1/12て,1/24て,这就是电机细分驱动的基本理论依据。 不难推出:电机定子上有m相励磁绕阻,其轴线分别与转子齿轴线偏移1/m,2/m……(m-1)/m,1。并且导电按一定的相序电机就能正反转被控制——这是步进电机旋转的物理条件。只要符合这一条件我们理论上可以制造任何相的步进电机,出于成本等多方面考虑,市场上一般以二、三、四、五相为多。 3、力矩: 电机一旦通电,在定转子间将产生磁场(磁通量Ф)当转子与定子错开一定角度产生力 F与(dФ/dθ)成正比 其磁通量Ф=Br*S ;Br为磁密;S为导磁面积; F与L*D*Br成正比;L为铁芯有效长度;D为转子直径;Br=N·I/RN·I为励磁绕阻安匝数(电流乘匝数)R为磁阻。 力矩=力*半径力矩与电机有效体积*安匝数*磁密成正比(只考虑线性状态) 因此,电机有效体积越大,励磁安匝数越大,定转子间气隙越小,电机力矩越大,反之亦然。 (二)感应子式步进电机

博图软件安装实验报告

实验一博图软件的安装 预习报告 一、实验目的 熟练掌握博图软件的安装。 二、实验目的 博图软件、电脑 三、实验原理 完成博图软件的安装 1、硬件要求: ?处理器: Core i5-6640EQ 3.4 GHz 或者相当 ?内存: 16 GB 或更高(大项目为 32 GB) ?硬盘:SSD,至少 50GB 可用存储空间 ?图形分辨率:最小 1920 x 1080 ?显示器:15.6" 宽屏显示 (1920 x 1080) 2、软件要求: ?MS Windows 7 Home Premium SP1 ( 仅 STEP 7 Basic) ?MS Windows 7 Professional SP1 ?MS Windows 7 Enterprise SP1 ?MS Windows 7 Ultimate SP1 ?Microsoft Windows 8.1 ( 仅 STEP 7 Basic ) ?Microsoft Windows 8.1 Professional ?Microsoft Windows 8.1 Enterprise ?Microsoft Server 2008 R2 Standard Edition SP1(仅 STEP 7 Professional) ?Microsoft Server 2012 R2 Standard Edition 3 、基本信息: SIMATIC_STEP_7_Professional_V14: STEP 7 Basic,用于组态 S7-1200; STEP 7 Professional,用于组态 S7-1200、S7-1500、S7-300/400 和 WinAC。WinCCV14: WinCC Basic,用于组态精简系列面板; WinCC Professional,用于可视化软件组态所有面板和 PC 或 SCADA 系统。SIMATIC_TIAP_V14_UPD4: STEP7 V14 和 WinCCV14 的更新版本四,还有更高版本更新在安装完成 STEP7 V14 后,Automation Software Updater 中可以查找。 Startdrive_Standalone_V14:变频器驱动类组态。 Sim_EKB_Install_2014_03_08:SIEMENS 授权,在安装前先授 权。PLCSim V14:仿真 4、安装顺序: 1)STEP 7 V14 SP1 Professional 2)S7-PLCSIM V14 SP1 3)WinCC V14 SP1 Professional

实验室检查正常值大全

(一)血常规 红细胞(RBC)成年男性:(~)×1012/L 成年女性:(~)×1012/L 新生儿:(~)×1012/L 血红蛋白(Hb)成年男性:120~160g/L 成年女性:1l0~150g/L 新生儿:170~200g/L 白细胞(WBC)成人:(~)×109/L;新生儿:(~)×109/L 中性杆状核粒细胞:1%~5% 中性分叶核粒细胞:50%~70% 嗜酸性粒细胞:%~5% 嗜碱粒性细胞:O%~1% 淋巴细胞:20%~40% 单核细胞:3%~8% 血小板(PLT)(100~300)×109/L (二)尿常规 1.酸碱度(pH)5~8 2.比重(SG)~ 3.尿蛋白(Pro)定性定量试验Pro定性:阴性(neg),Pro定量≤O.15g/24h 4.葡萄糖(Glu)定性:阴性(neg)、糖定量:</24小时(0.5g/24小时) 5.酮体(Ket)阴性(neg) 6.胆红素(Bil)和尿胆原(Ubg)均为阴性(neg) 7.亚硝酸盐(Nit)阴性(neg) 8.白细胞(Leu)<25/μl 9.红细胞或血红蛋白(潜血试验)(Ery或OB)≤l0/μl 10.尿沉渣镜检白细胞<5/HP(每高倍镜视野)红细胞<3/HP(每高倍镜视野) (三)粪常规 1.颜色黄褐色成型便 2.镜检 (1)白细胞:正常粪便不见或偶见; (2)红细胞:正常粪便无红细胞; (3)细菌:主要为大肠杆菌和肠球菌; (4)虫卵。 3.粪便潜血试验(occult blood test,OBT)正常粪便OBT阴性。 (四)痰液检验 一般性状检查正常人痰液呈无色或灰白色。 化脓性感染时呈黄色; 绿脓杆菌感染时呈黄绿色;

局部解剖学实验操作指导

. 解剖操作简介 局部解剖学是研究人体各个局部层次结构及各器官之间的位置与毗邻关系的科学。它是临床医学课程尤其是外科学的重要基础课程。局部解剖学的学习方法与系统解剖学不同,系统解剖学是通过理论大课的讲授和实验小课的示教见习进行学习;而局部解剖学主要是通过学生自己大量的实地解剖操作和少量的阶段总结性大课进行学习的。因此,实地解剖操作学习局部解剖学的主要方法,是掌握人体解剖学知识的重要实践过程。通过解剖、观察和辨认,不仅能巩固已获得的系统解剖学知识,而且将进一步熟悉和掌握人体各局部的层次结构和各器官之间的毗邻关系,为学习临床医学课程奠定良好的基础。百闻不如一见,百看不如实践,在实地解剖过程中,要充分利用有限的尸体标本,在教员指导下,严格按照解剖操作步骤和要求,认真细致地进行解剖,细心观察和辨认各层次结构,并作阶段性的归纳总结,真正按教学大纲的目的和要求,掌握局部解剖学知识。 为了更好地进行实地解剖操作,在解剖尸体之前,先简要介绍一下解剖操作的方法和要求。 一、解剖操作前准备 1、每次课前应预习《局部解剖学》和《局部操作指导》,明确本次课的目的要求、解剖部位的层次结构和毗邻关系以及操作步骤和过程中的注意事项。 2、第一次进实验室前学员要进行分组,每个实验室分成若干个组,每组分成4个小组解剖1具标本,每个小组由3~5名学员组成。 3、小组成员要进行分工,要安排主刀、助手、阅读教材和指导者。每个角色要定期交换,使每个学员都有解剖操作的机会。 4、准备好各种操作器械,如刀、镊、止血钳,此外还有咬骨钳、肋骨剪等。 5、放置好尸体的位置。 二、常用的解剖器械及其使用方法 在实地解剖过程中,常用的器械有刀、剪、镊、止血钳和组织钳,此外还有咬骨钳、肋骨剪、锯子、骨凿和锤子等。 1、刀有解剖刀和手术刀两种,现一般使用手术刀。通常用于切开皮肤、翻起皮瓣以及切割各种组织。持刀的方式有执笔式持刀法和指压式持刀法之分。前者与持钢笔的姿势相同,解剖操作时多用此法。后者则将刀柄握于拇指与中指、环指及小指之间,食指压在刀背上,此法除用于作较长的皮肤切口外,一般均不采用。 2、止血钳有各种不同形式的止血钳,其用途亦不尽相同,一般用于钳夹各种组织,亦可借助止血钳分离各种组织结构。持止血钳的方法是将止血钳柄套在拇指和环指上,食指紧贴于止血钳背,起导向和稳定作用。 3、镊含有各种不同形式的镊,用于固定各种组织器官,以免滑动,便于解剖。亦可借助镊剥除各种组织。除固定皮肤采用有齿镊外,固定其它各种组织器官均宜用无齿镊。持镊法与握笔姿势相同。 除上述常用的解剖器械外,还有剪、组织钳、咬骨钳和肋骨剪等器械,将在使用时逐一介

步进电机控制驱动电路设计.

实习名称:电子设计制作与工艺实习 学生姓名:周文生 学号:201216020134 专业班级:T-1201 指导教师:李文圣 完成时间: 2014年6月13日 报告成绩:

步进电机控制驱动电路设计 摘要: 本设计在根据已有模电、物电知识的基础上,用具有置位,清零功能的JK 触发器74LS76作为主要器件来设计环行分配器,来对555定时器产生的脉冲进行分配,通过功率放大电路来对步进电机进行驱动,并且产生的脉冲的频率可以控制,从而来控制步进电机的速度,环形分配器中具有复位的功能,在对于异常情况可以按复位键来重新工作。 关键字:555定时器脉冲源环行分配器功率放大电路 一、方案论证与比较: (一)脉冲源的方案论证及选择: 方案一:采用555定时器产生脉冲,它工作频率易于改变从而可以控制步进电机的速度并且工作可靠,简单易行。 C2 10uF 图一 555定时器产生的方法 方案二:采用晶振电路来实现,晶振的频率较大,不利于电机的工作,易失步,我们可以利用分频的方法使晶振的频率变小,可以使电机工作稳定,但分频电路较复杂,并且晶振起振需要一定的条件,不好实现。

X1 1kohm 1kohm 图二晶振产生脉冲源电路 综上所述,我们采用方案一来设计脉冲源。 (二)环形分配器的设计: 方案一:采用74ls194通过送入不同的初值来进行移位依此产生正确的值使步进电机进行转动。但此方案的操作较复杂,需要每次工作时都要进行置位,正反转的操作较复杂,这里很早的将此方案放弃。 方案二:使用单独的JK 触发器来分别实现单独的功能。 图三双三拍正转 图四单三拍正转

图五三相六拍正转 利用单独的做,电路图较简单,单具体操作时不方便,并且不利于工程设计。块分的较零散,无法统一。 方案三:利用JK触发器的自己运动时序特性设计,利用卡诺图来进行画简。 图六单,双三拍的电路图 单,双三拍的正,反转主要由键s1,s2的四种状态来决定四种情况的选择。

组态软件(实验报告)

组态软件实验报告 专业:电气工程及其自动化 班级: 学号: 姓名:

实验一组态软件概念介绍 实验目的: 介绍组态软件的基本概念应用背景。 介绍组态软件的软件系统结构和功能特点。 认识和比较各个公司组态软件的特点。 以讲述的方式让学生了解组态软件,知道组态软件的由来,组态软件的应用背景,和相关技术特点,从概念上对软件有个初步的认识。 实验内容: 1、介绍组态的概念; 2、计算机监督与控制系统的概念; 3、工控机的特点; 4、原始组态软件和当前组态软件的区别和优缺点; 5、组态软件的基本特性整体结构; 6、介绍各公司组态软件的特点。 实验二软件安装与认知 实验目的: 学习组态软件的安装; 学习组态软件各模块的功能; 区别开发环境和运行环境的操作。 由于组态软件的编程方式是面向对象的方法,以事件触发软件的相关动作。基本操作的熟悉让学生对组态软件运行原理有初步的认识。 实验内容: 1、安装图灵开物组态软件。 2、了解单机版功能与网络版功能的区别。 3、运行演示工程。 4、学习软件界面的功能及基本操作。 实验结果:

实验三工程建立 实验目的: 通过本次实验让学生学习怎么建立一个组态软件工程,建立的各个元素,对应了实际现场的哪些操作,重要的是记住建立工程中的一些关键性步骤。 实验内容: 1、新建组态软件工程。 2、新建计算机节点,了解节点中各功能的含义及配置方法。

3、新建设备,了解组态软件功能设备及驱动的应用方法。 4、新建图页,图页是组态软件界面图形绘制区域。 5、新建标签,了解标签的类型及各种属性,以及标签在工程中作用的区域。实验结果:

实验室检查正常值大全

实验室检查结果及正常值 (一)血常规 红细胞(RBC)成年男性:(4.0~5.5)×1012/L 成年女性:(3.5~5.0)×1012/L 新生儿:(6.0~7.0)×1012/L 血红蛋白(Hb)成年男性:120~160g/L 成年女性:1l0~150g/L 新生儿:170~200g/L 白细胞(WBC)成人:(4.0~10.0)×109/L;新生儿:(15.0~20.0)×109/L 中性杆状核粒细胞:1%~5% 中性分叶核粒细胞:50%~70% 嗜酸性粒细胞:0.5%~5% 嗜碱粒性细胞:O%~1% 淋巴细胞:20%~40% 单核细胞:3%~8% 血小板(PLT)(100~300)×109/L (二)尿常规 1.酸碱度(pH)5~8 2.比重(SG)1.015~1.025 3.尿蛋白(Pro)定性定量试验 Pro定性:阴性(neg),Pro定量≤O.15g/24h 4.葡萄糖(Glu)定性:阴性(neg)、糖定量:<2.8mmol/24小时(0.5g/24小时) 5.酮体(Ket)阴性(neg) 6.胆红素(Bil)和尿胆原(Ubg)均为阴性(neg) 7.亚硝酸盐(Nit)阴性(neg) 8.白细胞(Leu)<25/μl 9.红细胞或血红蛋白(潜血试验)(Ery或OB)≤l0/μl 10.尿沉渣镜检白细胞<5/HP(每高倍镜视野)红细胞<3/HP(每高倍镜视野)(三)粪常规 1.颜色黄褐色成型便 2.镜检 (1)白细胞:正常粪便不见或偶见; (2)红细胞:正常粪便无红细胞; (3)细菌:主要为大肠杆菌和肠球菌; (4)虫卵。 3.粪便潜血试验(occult blood test,OBT)正常粪便OBT阴性。 (四)痰液检验 一般性状检查正常人痰液呈无色或灰白色。 化脓性感染时呈黄色;

相关主题
文本预览
相关文档 最新文档