STM32笔记(三)ADC、DMA、USART的综合练习

STM32笔记(三)ADC、DMA、USART的综合练习
STM32笔记(三)ADC、DMA、USART的综合练习

STM32笔记(三)ADC、DMA、USART的综合练习

这是一个综合的例子,演示了ADC模块、DMA模块和USART模块的基本使用。

我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器)。因为使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value[2]数组,并设置了相应的DMA模块,使ADC在每个通道转换结束后启动DMA传输,其缓冲区数据量为2个HalfWord,使两路通道的转换结果自动的分别落到AD_Value[0]和AD_Value[1]中。

然后,在主函数里,就无需手动启动AD转换,等待转换结束,再取结果了。我们可以在主函数里随时取AD_V alue中的数值,那里永远都是最新的AD转换结果。

如果我们定义一个更大的AD_V alue数组,并调整DMA的传输数据量(BufferSize)可以实现AD结果的循环队列存储,从而可以进行各种数字滤波算法。

接着,取到转换结果后,根据V=(AD_V alue/4096)*Vref+的公式可以算出相应通道的电压值,也可以根据 T(℃) = (1.43 - Vad)/34*10^(-6) + 25的算法,得到片内温度传感器的测量温度值了。

通过重新定义putchar函数,及包含"stdio.h"头文件,我们可以方便的使用标准C的库函数printf(),实现串口通信。

相关的官方例程,可以参考FWLib V2.0的ADC\ADC1_DMA和USART\printf两个目录下的代码。

本代码例子是基于万利199的开发板EK-STM32F实现,CPU=STM32F103VBT6

/****************************************************************************** * 本文件实现ADC模块的基本功能

* 设置ADC1的常规转换序列包含CH10和CH16(片内温度传感器)

* 设置了连续转换模式,并使用DMA传输

* AD转换值被放在了AD_Value[2]数组内,[0]保存CH0结果,[1]保存CH16结果

* GetV olt函数计算[0]的值对应的电压值(放大100倍,保留2位小数)

* GetTemp函数计算[1]的值对应的温度值,计算公式在相应函数内有说明

* 作者:jjldc(九九)

******************************************************************************* /

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x_lib.h"

#include "stdio.h"

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

#define ADC1_DR_Address ((u32)0x4001244C)

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

vu16 AD_Value[2];

vu16 i=0;

s16 Temp;

u16 V olt;

/* Private function prototypes -----------------------------------------------*/

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART1_Configuration(void);

void ADC1_Configuration(void);

void DMA_Configuration(void);

int fputc(int ch, FILE *f);

void Delay(void);

u16 GetTemp(u16 advalue);

u16 GetVolt(u16 advalue);

/* Private functions ---------------------------------------------------------*/

/****************************************************************************** *

* Function Name : main

* Description : Main program.

* Input : None

* Output : None

* Return : None

******************************************************************************* /

int main(void)

{

RCC_Configuration();

GPIO_Configuration();

NVIC_Configuration();

USART1_Configuration();

DMA_Configuration();

ADC1_Configuration();

//启动第一次AD转换

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

//因为已经配置好了DMA,接下来AD自动连续转换,结果自动保存在AD_V alue处while (1)

{

Delay();

Temp = GetTemp(AD_Value[1]);

V olt = GetV olt(AD_Value[0]);

USART_SendData(USART1, 0x0c); //清屏

//注意,USART_SendData函数不检查是否发送完成

//等待发送完成

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

printf("电压:%d.%d\t温度:%d.%d℃\r\n", \

Volt/100, V olt%100, Temp/100, Temp%100);

}

}

/****************************************************************************** *

* Function Name : 重定义系统putchar函数int fputc(int ch, FILE *f)

* Description : 串口发一个字节

* Input : int ch, FILE *f

* Output :

* Return : int ch

******************************************************************************* /

int fputc(int ch, FILE *f)

{

//USART_SendData(USART1, (u8) ch);

USART1->DR = (u8) ch;

/* Loop until the end of transmission */

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)

{

}

return ch;

}

/****************************************************************************** *

* Function Name : Delay

* Description : 延时函数

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void Delay(void)

{

u32 i;

for(i=0;i<0x4f0000;i++);

return;

}

/****************************************************************************** *

* Function Name : GetTemp

* Description : 根据ADC结果计算温度

* Input : u16 advalue

* Output :

* Return : u16 temp

******************************************************************************* /

u16 GetTemp(u16 advalue)

{

u32 Vtemp_sensor;

s32 Current_Temp;

// ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:

// V25 - VSENSE

// T(℃) = ------------ + 25

// Avg_Slope

// V25:温度传感器在25℃时的输出电压,典型值1.43 V。

// VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue 之间的转换关系为:

// ADC_ConvertedValue * Vdd

// VSENSE = --------------------------

// Vdd_convert_value(0xFFF)

// Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。

Vtemp_sensor = advalue * 330 / 4096;

Current_Temp = (s32)(143 - Vtemp_sensor)*10000/43 + 2500;

return (s16)Current_Temp;

}

/****************************************************************************** *

* Function Name : GetVolt

* Description : 根据ADC结果计算电压

* Input : u16 advalue

* Output :

* Return : u16 temp

******************************************************************************* /

u16 GetVolt(u16 advalue)

{

return (u16)(advalue * 330 / 4096);

}

/****************************************************************************** *

* Function Name : RCC_Configuration

* Description : 系统时钟设置

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void RCC_Configuration(void)

{

ErrorStatus HSEStartUpStatus;

//使能外部晶振

RCC_HSEConfig(RCC_HSE_ON);

//等待外部晶振稳定

HSEStartUpStatus = RCC_WaitForHSEStartUp();

//如果外部晶振启动成功,则进行下一步操作

if(HSEStartUpStatus==SUCCESS)

{

//设置HCLK(AHB时钟)=SYSCLK

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//PCLK1(APB1) = HCLK/2

RCC_PCLK1Config(RCC_HCLK_Div2);

//PCLK2(APB2) = HCLK

RCC_PCLK2Config(RCC_HCLK_Div1);

//设置ADC时钟频率

RCC_ADCCLKConfig(RCC_PCLK2_Div2);

//FLASH时序控制

//推荐值:SYSCLK = 0~24MHz Latency=0

// SYSCLK = 24~48MHz Latency=1

// SYSCLK = 48~72MHz Latency=2

FLASH_SetLatency(FLASH_Latency_2);

//开启FLASH预取指功能

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//PLL设置SYSCLK/1 * 9 = 8*1*9 = 72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

//启动PLL

RCC_PLLCmd(ENABLE);

//等待PLL稳定

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

//系统时钟SYSCLK来自PLL输出

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//切换时钟后等待系统时钟稳定

while(RCC_GetSYSCLKSource()!=0x08);

}

//下面是给各模块开启时钟

//启动GPIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \ RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,\

ENABLE);

//启动AFIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

//启动USART1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

//启动DMA时钟

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

//启动ADC1时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

}

/****************************************************************************** *

* Function Name : GPIO_Configuration

* Description : GPIO设置

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//PC口4567脚设置GPIO输出,推挽2M

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

//KEY2 KEY3 JOYKEY

//位于PD口的3 4 11-15脚,使能设置为输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_11 | GPIO_Pin_12 |\ GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD, &GPIO_InitStructure);

//USART1_TX

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//USART1_RX

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//ADC_CH10--> PC0

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOC, &GPIO_InitStructure);

}

/****************************************************************************** *

* Function Name : NVIC_Configuration

* Description : NVIC设置

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

// Set the Vector Table base location at 0x20000000

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else /* VECT_TAB_FLASH */

// Set the Vector Table base location at 0x08000000

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

//设置NVIC优先级分组为Group2:0-3抢占式优先级,0-3的响应式优先级

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//串口中断打开

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

/****************************************************************************** *

* Function Name : USART1_Configuration

* Description : NUSART1设置

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void USART1_Configuration(void)

{

USART_InitTypeDef USART_InitStructure;

USART_https://www.360docs.net/doc/3a6027980.html,ART_BaudRate = 19200;

USART_https://www.360docs.net/doc/3a6027980.html,ART_WordLength = USART_WordLength_8b;

USART_https://www.360docs.net/doc/3a6027980.html,ART_StopBits = USART_StopBits_1;

USART_https://www.360docs.net/doc/3a6027980.html,ART_Parity = USART_Parity_No;

USART_https://www.360docs.net/doc/3a6027980.html,ART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_https://www.360docs.net/doc/3a6027980.html,ART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);

}

/****************************************************************************** *

* Function Name : ADC1_Configuration

* Description : ADC1设置(包括ADC模块配置和自校准)

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void ADC1_Configuration(void)

{

ADC_InitTypeDef ADC_InitStructure;

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换开启

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel = 2; //设置转换序列长度为2

ADC_Init(ADC1, &ADC_InitStructure);

//ADC内置温度传感器使能(要使用片内温度传感器,切忌要开启它)

ADC_TempSensorVrefintCmd(ENABLE);

//常规转换序列1:通道10

ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5);

//常规转换序列2:通道16(内部温度传感器),采样时间>2.2us,(239cycles)

ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);

// Enable ADC1

ADC_Cmd(ADC1, ENABLE);

// 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)

ADC_DMACmd(ADC1, ENABLE);

// 下面是ADC自动校准,开机后需执行一次,保证精度

// Enable ADC1 reset calibaration register

ADC_ResetCalibration(ADC1);

// Check the end of ADC1 reset calibration register

while(ADC_GetResetCalibrationStatus(ADC1));

// Start ADC1 calibaration

ADC_StartCalibration(ADC1);

// Check the end of ADC1 calibration

while(ADC_GetCalibrationStatus(ADC1));

// ADC自动校准结束---------------

}

/****************************************************************************** *

* Function Name : DMA_Configuration

* Description : DMA设置:从ADC模块自动读转换结果至内存

* Input : None

* Output : None

* Return : None

******************************************************************************* /

void DMA_Configuration(void)

{

DMA_InitTypeDef DMA_InitStructure;

DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

//BufferSize=2,因为ADC转换序列有2个通道

//如此设置,使序列1结果放在AD_Value[0],序列2结果放在AD_Value[1]

DMA_InitStructure.DMA_BufferSize = 2;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

//循环模式开启,Buffer写满后,自动回到初始地址开始传输

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA1_Channel1, &DMA_InitStructure);

//配置完成后,启动DMA通道

DMA_Cmd(DMA1_Channel1, ENABLE); }

语文六大修辞手法详解

语文六大修辞手法详解 一修辞手法详解:比喻 1、定义 比喻就是“打比方”。是根据两种不同性质的事物之间的相似之处,用一种事物来比方另一种事物的修辞手法。 2、结构 比喻一般由三个部分组成,即本体(被比喻的事物或情景)、喻体(被拿来用作比喻的事物或情景)和比喻词(比喻关系的标志性词语)。 3、构成条件——注意事项 构成比喻的关键:①甲(本体)和乙(喻体)必须是本质不同的事物;②甲乙之间必须有相似之处。①②两条必须同时成立,否则比喻不能成立。 一个句子是不是比喻,不能单看比喻词。 下面几例不是比喻句: ①他的性格像母亲。——同类事物做比较 ②这天黑沉沉的好象要下雨。——表示猜测 ③不要带着思想包袱去工作。——词的比喻意 4、比喻的目的 比喻旨在于用形象的语言阐明思想。即通过比喻的手法,让人对不明白、不理解、不清楚、不认识的事物得到认识和理解。 因此,必须是用人们所熟悉的事物做喻体来比喻人们不熟悉的事物(本体),以让人对原本不认识的事物得以认识,绝不可用人们不熟悉的事物来比喻人们熟悉的事物,更不可用人们都不认识的事物去比喻人们都不认识的事物。则否适得其反,事与愿违。 比喻的具体目的主要有下面几种: ①说明本体的可能性。本体被一件令人诧异的事物所修饰,须运用比喻消除这种诧异性。例如: 残酷的战争起于片言之语,君不见熊熊烈火大多来自些微火星。 某人少时劳累老时休息,恰如一只蚂蚁,夏天努力收集食物,以便冬天坐享。 ②阐明本体的情况。本体的特性原先不为人知,用比喻加以形容,大家便一目了然。 地球圆圆的,象只橙子。 她体段柔软,仿佛生就一身藤骨。 ③阐明本体情况的程度。原先对本体的特性只有概括性的了解,经过比喻,指明了这种特性的程度。这常常是可以感觉得到的事物。例如: 病人服用了一种苦药,它仿佛就是苦瓜。 房子着了火,我仿佛觉得地狱移到了人间。 ④肯定本体的情况。叙述本体的事物须用比喻来肯定和阐明。这种情况下是用可以感知的事物来比喻理性的事物。例如: 学者的长处即使不让发挥,它也象麝香那样,被遮盖住,却不能阻止它香气四溢。 轻浮的人正在不知不觉中走向毁灭,就象飞蛾扑火那样。

子网划分基础的方法步骤详解

子网划分基础的方法步骤详解 导读:我根据大家的需要整理了一份关于《子网划分基础的方法步骤详解》的内容,具体内容:现在我们用的互联网的时间越来越多,需要掌握的网络技能也很多,那么你知道子网划分方法的方法吗?下面是我整理的一些关于子网划分方法的相关资料,供你参考。子网划分的方法大... 现在我们用的互联网的时间越来越多,需要掌握的网络技能也很多,那么你知道子网划分方法的方法吗?下面是我整理的一些关于子网划分方法的相关资料,供你参考。 子网划分的方法 大家都知道,为了确定子网,分开主机和路由器的每个接口,从而产生了几个分离的网络岛,接口端连接了这些独立的网络的端点。这些独立的网络中的每个都叫做一个子网(subnet)。 我们知道IP地址是一个4字节(共32bit)的数字,被分为4段,每段8位,段与段之间用句点分隔。为了便于表达和识别,IP地址是以十进制形式表示的如210.52.207.2,每段所能表示的十进制数最大不超过255。IP 地址由两部分组成,即网络号(Network ID)和主机号(Host ID)。网络号标识的是Internet上的一个子网,而主机号标识的是子网中的某台主机。网际地址分解成两个域后,带来了一个重要的优点:IP数据包从网际上的一个网络到达另一个网络时,选择路径可以基于网络而不是主机。在大型的网际中,这一点优势特别明显,因为路由表中只存储网络信息而不是主机信息,这样可以大大简化路由表。

子网划分的例子 网络地址:10.0.0.0;子网掩码255.255.0.0(/16) 1.子网数=2 的8次方-2=254 2.主机数=2 的16次方-2=65534 3. 有效子网?:block size=256-255=1,2,3,......; 所以第一个子网为10.1.0.0, 最后1 个为10.25 4.0.0 4.广播地址:下个子网-1.所以第一个子网和最后1 个子网的广播地址分别是10.1.25 5.255 和 10.254.255.255 5.有效主机范围是:第一个子网的主机地址是10.1.0.1 到 10.1.255.254;最后1 个是10.254.0.1 到10.254.255.254 子网划分的基础 子网划分(subnetting)的优点 1.减少网络流量 2.提高网络性能 3.简化管理 4.易于扩大地理范围 怎么样创建一个子网: 如何划分子网?首先要熟记2 的幂:2 的0 次方到9 次方的值分别 为:1,2,4,8,16,32,64,128,256和512。还有要明白的是:子网划分是借助于取走主机位,把这个取走的部分作为子网位。因此这个意味划分越多的子网,主机将越少。

STM32学习笔记

输入模式初始化GPIOE2,3,4 ①IO口初始化:GPIO_InitTypeDef GPIO_InitStructure; ②使能PORTA,PORTE时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); ③PE.2.3.4端口配置:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; ④设置成(上拉)输入:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; ⑤GPIO_Init(GPIOE, &GPIO_InitStructure); 输出模式初始化 ①IO口初始化:GPIO_InitTypeDef GPIO_InitStructure; ②使能PB,PE端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); ③3LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; ④设置(推挽)输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ⑤设置IO口速度为50MHz GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ⑥说明初始化哪个端口GPIO_Init(GPIOB, &GPIO_InitStructure); 在LED灯试验中初始为高电平灭GPIO_SetBits(GPIOB,GPIO_Pin_5); 再初始化相同发输出模式时③④⑤可省略例如(经实验初始化恰好为不同IO口相同IO序号③可省略,应该不规范吧) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 端口配置, 推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出,IO口速度为50MHz GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数; 2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。 3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。 4,他并不是C自带的,可以不用。 5,调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h 这个头文件。

电路原理图详解

电子电路图原理分析 电器修理、电路设计都是要通过分析电路原理图,了解电器的功能和工作原理,才能得心应手开展工作的。作为从事此项工作的同志,首先要有过硬的基本功,要能对有技术参数的电路原理图进行总体了解,能进行划分功能模块,找出信号流向,确定元件作用。若不知电路的作用,可先分析电路的输入和输出信号之间的关系。如信号变化规律及它们之间的关系、相位问题是同相位,或反相位。电路和组成形式,是放大电路,振荡电路,脉冲电路,还是解调电路。 要学会维修电器设备和设计电路,就必须熟练掌握各单元电路的原理。会划分功能块,能按照不同的功能把整机电路的元件进行分组,让每个功能块形成一个具体功能的元件组合,如基本放大电路,开关电路,波形变换电路等。 要掌握分析常用电路的几种方法,熟悉每种方法适合的电路类型和分析步骤。 1.交流等效电路分析法 首先画出交流等效电路,再分析电路的交流状态,即:电路有信号输入时,电路中各环节的电压和电流是否按输入信号的规律变化、是放大、振荡,还是限幅削波、整形、鉴相等。 2.直流等效电路分析法 画出直流等效电路图,分析电路的直流系统参数,搞清晶体管静态工作点和偏置性质,级间耦合方式等。分析有关元器件在电路中所处状态及起的作用。例如:三极管的工作状态,如饱和、放大、截止区,二极管处于导通或截止等。 3.频率特性分析法 主要看电路本身所具有的频率是否与它所处理信号的频谱相适应。粗略估算一下它的中心频率,上、下限频率和频带宽度等,例如:各种滤波、陷波、谐振、选频等电路。 4.时间常数分析法 主要分析由R、L、C及二极管组成的电路、性质。时间常数是反映储能元件上能量积累和消耗快慢的一个参数。若时间常数不同,尽管它的形式和接法相似,但所起的作用还是不同,常见的有耦合电路、微分电路、积分电路、退耦电路、峰值检波电路等。 最后,将实际电路与基本原理对照,根据元件在电路中的作用,按以上的方法一步步分析,就不难看懂。当然要真正融会贯通还需要坚持不懈地学习。 电子设备中有各种各样的图。能够说明它们工作原理的是电原理图,简称电路图。 电路图有两种 一种是说明模拟电子电路工作原理的。它用各种图形符号表示电阻器、电容器、开关、晶体管等实物,用线条把元器件和单元电路按工作原理的关系连接起来。这种图长期以来就一直被叫做电路图。 另一种是说明数字电子电路工作原理的。它用各种图形符号表示门、触发器和各种逻辑部件,用线条把它们按逻辑关系连接起来,它是用来说明各个逻辑单元之间的逻辑关系和整机的逻辑功能的。为了和模拟电路的电路图区别开来,就把这种图叫做逻辑电路图,简称逻辑图。 除了这两种图外,常用的还有方框图。它用一个框表示电路的一部分,它能简洁明了地说明电路各部分的关系和整机的工作原理。 一张电路图就好象是一篇文章,各种单元电路就好比是句子,而各种元器件就是组成句子的单词。所以要想看懂电路图,还得从认识单词——元器件开始。有关电阻器、电容器、电感线圈、晶体管等元器件的用途、类别、使用方法等内容可以点击本文相关文章下的各个链接,本文只把电路图中常出现的各种符号重述一遍,希望初学者熟悉它们,并记住不忘。 电阻器与电位器(什么是电位器) 符号详见图 1 所示,其中( a )表示一般的阻值固定的电阻器,( b )表示半可调或微调电阻器;( c )表示电位器;( d )表示带开关的电位器。电阻器的文字符号是“ R ”,电位器是“ RP ”,即在 R 的后面再加一个说明它有调节功能的字符“ P ”。

STM32学习笔记_STM32F103ZET6

STM32F103 系列芯片的系统架构: 系统结构: 在每一次复位以后,所有除SRAM 和FLITF 以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR 来打开该外设的时钟。

GPIO 输入输出,外部中断,定时器,串口。理解了这四个外设,基本就入门了一款MCU。 时钟控制RCC: -4~16M 的外部高速晶振 -内部8MHz 的高速RC 振荡器 -内部40KHz低速RC 振荡器,看门狗时钟 -内部锁相环(PLL,倍频),一般系统时钟都是外部或者内部高速时钟经过PLL 倍频后得到 - 外部低速32.768K 的晶振,主要做RTC 时钟源

ARM存储器映像: 数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。

存储器映像与寄存器映射: ARM 存储器映像 4GB 0X0000 00000X1FFF FFFF 0X2000 00000X3FFF FFFF 0X4000 00000X5FFF FFFF

寄存器说明: 寄存器名称 相对外设基地址的偏移值 编号 位表 读写权限 寄存器位 功能说明 使用C语言封装寄存器: 1、总线和外设基地址封装利用地址偏移 (1)定义外设基地址(Block2 首地址) (2)定义APB2总线基地址(相对外设基地址偏移固定) (3)定义GPIOX外设基地址(相对APB2总线基地址偏移固定)(4)定义GPIOX寄存器地址(相对GPIOX外设基地址偏移固定)(5)使用 C 语言指针操作寄存器进行读/写 //定义外设基地址 #define PERIPH_BASE ((unsigned int)0x40000000) 1) //定义APB2 总线基地址 #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) 2) //定义GPIOC 外设基地址 #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) 3) //定义寄存器基地址这里以GPIOC 为例 #define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00) 4) #define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) #define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08) #define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C) #define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10) #define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14) #define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18) //控制GPIOC 第0 管脚输出一个低电平5) GPIOC_BSRR = (0x01<<(16+0)); //控制GPIOC 第0 管脚输出一个高电平 GPIOC_BSRR = (0x01<<0);

继电器控制电路模块及原理讲解

继电器控制电路模块及原理讲解 发布: 2011-9-8 | 作者: —— | 来源:huangguohai| 查看: 564次| 用户关注: 能直接带动继电器工作的CMOS集成块电路在电子爱好者认识电路知识的的习惯中,总认为CMOS 集成块本身不能直接带动继电器工作,但实际上,部分CMOS集成块不仅能直接带动继电器工作,而且工作还非常稳定可靠。本实验中所用继电器的型号为JRC5M-DC12V微型密封的继电器(其线圈电阻为750Ω)。现将CD4066CMOS集成块带动继电器的工作原理分析如下:CD4066是一个四双向模拟开关,集成块SCR1~SCR4为控制端,用于控制四双向模拟开关的 能直接带动继电器工作的CMOS集成块电路 在电子爱好者认识电路知识的的习惯中,总认为CMOS集成块本身不能直接带动继电器工作,但实际上,部分CMOS集成块不仅能直接带动继电器工作,而且工作还非常稳定可靠。本实验中所用继电器的型号为JRC5M-D C12V微型密封的继电器(其线圈电阻为750Ω)。现将CD4066CMOS集成块带动继电器的工作原理分析如下: CD4066是一个四双向模拟开关,集成块SCR1~SCR4为控制端,用于控制四双向模拟开关的通断。当SCR1接高电平时,集成块①、②脚导通,+12V→K1→集成块①、②脚→电源负极使K1吸合;反之当SCR1输入低电平时,集成块①、②脚开路,K1失电释放,SC R2~SCR4输入高电平或低电平时状态与SCR1相同。 本电路中,继电器线圈的两端均反相并联了一只二极管,它是用来保护集成电路本身的,千万不可省去,否则在继电器由吸合状态转为释放时,由于电感的作用线圈上将产生较高的反电动势,极容易导致集成块击穿。并联了二极管后,在继电器由吸合变为释放的瞬间,线圈将通过二极管形成短时间的续流回路,使线圈中的电流不致突变,从而避免了线圈中反电动势的产生,确保了集成块的安全。 低电压下继电器的吸合措施

stm32学习 c语言笔记

这是前段时间做彩屏显示时候遇到的难题, *(__IO uint16_t *) (Bank1_LCD_C)这个就是将后面的数据转换为地址,然后对地址单元存放数据。可如下等效: __IO uint16_t *addr; addr = (__IO uint16_t *) Bank1_LCD_C; #ifdef和#elif连用,语法和if。。。else if语句一样 推挽输出增加驱动,可以驱动LED起来 static int count=0 count++ 这个语句中,count仅仅被初始化一次 以后加加一次期中的值就不会变化了 SysTick_CTRL(控制和状态寄存器) SysTick_LOAD(重装载寄存器) SysTick_VAL(当前值寄存器) SysTick_CALIB(校准值寄存器)

TFT经验:弄多大的相片,必须先把那个相片的尺寸改掉,再去取模,才可以,要不会有重影的嘿嘿嘿嘿 VBAT 是电池供电的引脚 VBAT和ADD同时都掉电时才能让备份区复位。 volatile一个变量的存储单元可以在定义该变量的程序之外的某处被引用。 volatile主要是程序员要告诉编译器不要对其定义的这个变量进行优化,防止其不能被引用,不能被改变。 VDDA>2.4V ADC才能工作 VDDA>2.7V USB才能工作 VDD(1.8-3.6v) VBAT=1.8-3.6v VSS VSSA VREF必须接到地线 没有外部电源供电时必须VBAT接上VDD 使用PLL时,VDDA必须供电

printf("abs(x)=%d\n",x<0?(-1)*x:x) 条件编译是问号前边为真则取冒号前边的值,为假的,则取后边的值。 所以说上边这条打印的语句是打印x的绝对值。 //stm32f10x_nvic.c stm32f10x_lib.c stm32f10x_gpio.c stm32f10x_flash.c stm32f10x_rcc.c TIM6 TIM7基本定时器 (只有这两个定时器不能产生PWM) TIM1 TIM8高级控制定时器 TIM2 TIM3 TIM4 TIM5为通用定时器 其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出! 修改和自己写代码时候

开关电源入门必读:开关电源工作原理超详细解析

开关电源入门必读:开关电源工作原理超详细解析 第1页:前言:PC电源知多少 个人PC所采用的电源都是基于一种名为“开关模式”的技术,所以我们经常会将个人PC电源称之为——开关电源(Sw itching Mode P ow er Supplies,简称SMPS),它还有一个绰号——DC-DC转化器。本次文章我们将会为您解读开关电源的工作模式和原理、开关电源内部的元器件的介绍以及这些元器件的功能。 ●线性电源知多少 目前主要包括两种电源类型:线性电源(linear)和开关电源(sw itching)。线性电源的工作原理是首先将127 V或者220V市电通过变压器转为低压电,比如说12V,而且经过转换后的低压依然是AC交流电;然后再通过一系列的二极管进行矫正和整流,并将低压AC交流电转化为脉动电压(配图1和2中的“3”);下一步需要对脉动电压进行滤波,通过电容完成,然后将经过滤波后的低压交流电转换成DC直流电(配图1和2中的“4”);此时得到的低压直流电依然不够纯净,会有一定的波动(这种电压波动就是我们常说的纹波),所以还需要稳压二极管或者电压整流电路进行矫正。最后,我们就可以得到纯净的低压DC直流电输出了(配图1和2中的“5”) 配图1:标准的线性电源设计图

配图2:线性电源的波形 尽管说线性电源非常适合为低功耗设备供电,比如说无绳电话、PlayStation/W ii/Xbox等游戏主机等等,但是对于高功耗设备而言,线性电源将会力不从心。 对于线性电源而言,其内部电容以及变压器的大小和AC市电的频率成反比:也即说如果输入市电的频率越低时,线性电源就需要越大的电容和变压器,反之亦然。由于当前一直采用的是60Hz(有些国家是50Hz)频率的AC市电,这是一个相对较低的频率,所以其变压器以及电容的个头往往都相对比较大。此外,AC市电的浪涌越大,线性电源的变压器的个头就越大。 由此可见,对于个人PC领域而言,制造一台线性电源将会是一件疯狂的举动,因为它的体积将会非常大、重量也会非常的重。所以说个人PC用户并不适合用线性电源。 ●开关电源知多少 开关电源可以通过高频开关模式很好的解决这一问题。对于高频开关电源而言,AC输入电压可以在进入变压器之前升压(升压前一般是50-60KHz)。随着输入电压的升高,变压器以及电容等元器件的个头就不用像线性电源那么的大。这种高频开关电源正是我们的个人PC以及像VCR录像机这样的设备所需要的。需要说明的是,我们经常所说的“开关电源”其实是“高频开关电源”的缩写形式,和电源本身的关闭和开启式没有任何关系的。 事实上,终端用户的PC的电源采用的是一种更为优化的方案:闭回路系统(closed loop system)——负责控制开关管的电路,从电源的输出获得反馈信号,然后根据PC的功耗来增加或者降低某一周期内的电压的频率以便能够适应电源的变压器(这个方法称作PW M,Pulse W idth Modulation,脉冲宽度调制)。所以说,开关电源可以根据与之相连的耗电设备的功耗的大小来自我调整,从而可以让变压器以及其他的元器件带走更少量的能量,而且降低发热量。 反观线性电源,它的设计理念就是功率至上,即便负载电路并不需要很大电流。这样做的后果就是所有元件即便非必要的时候也工作在满负荷下,结果产生高很多的热量。 第2页:看图说话:图解开关电源 下图3和4描述的是开关电源的PW M反馈机制。图3描述的是没有PFC(P ow er Factor Correction,功率因素校正)电路的廉价电源,图4描述的是采用主动式PFC设计的中高端电源。 图3:没有PFC电路的电源 图4:有PFC电路的电源 通过图3和图4的对比我们可以看出两者的不同之处:一个具备主动式PFC电路而另一个不具备,前者没有110/220V转换器,而且也没有电压倍压电路。下文我们的重点将会是主动式PFC电源的讲解。

(完整版)子网划分与VLAN技术详解

子网划分与VLAN技术详解 子网划分 子网划分定义:Internet组织机构定义了五种IP地址,有A、B、C三类地址。A类网络有126个,每个A类网络可能有16777214台主机,它们处于同一广播域。而在同一广播域中有这么多结点是不可能的,网络会因为广播通信而饱和,结果造成16777214个地址大部分没有分配出去。可以把基于类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。 子网掩码 RFC 950定义了子网掩码的使用,子网掩码是一个32位的2进制数,其对应网络地址的所有位置都为1,对应于主机地址的所有位都置为0。由此可知,A类网络的默认子网掩码是255.0.0.0,B类网络的默认子网掩码是255.255.0.0,C类网络的默认子网掩码是255.255.255.0。将子网掩码和IP地址按位进行逻辑“与”运算,得到IP地址的网络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址。子网掩码常用点分十进制表示,我们还可以用网络前缀法表示子网掩码,即“/<网络地址位数>”。如138.96.0.0/16表示B类网络138.96.0.0的子网掩码为255.255.0.0。 路由器判断IP 子网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确地进行路由。例如,有两台主机,主机一的IP 地址为222.21.160.6,子网掩码为255.255.255.192,主机二的IP地址为222.21.160.73,子网掩码为255.255.255.192。现在主机一要给主机二发送数据,先要判断两个主机是否在同一网段。 主机一 222.21.160.6即:11011110.00010101.10100000.00000110 255.255.255.192即:11111111.11111111.11111111.11000000 按位逻辑与运算结果为:11011110.00010101.10100000.00000000 主机二 222.21.160.73 即:11011110.00010101.10100000.01001001 255.255.255.192即:11111111.11111111.11111111.11000000 按位逻辑与运算结果为:11011110.00010101.10100000.01000000 两个结果不同,也就是说,两台主机不在同一网络,数据需先发送给默认网关,然后再发送给主机二所在网络。那么,假如主机二的子网掩码误设为255.255.255.128,会发生什么情况呢? 让我们将主机二的IP地址与错误的子网掩码相“与”: 222.21.160.73 即:11011110.00010101.10100000.01001001 255.255.255.128即:11111111.11111111.11111111.10000000 结果为11011110.00010101.10100000.00000000 这个结果与主机一的网络地址相同,主机一与主机二将被认为处于同一网络中,数据不

修辞手法的讲解

小升初修辞手法 ★小学阶段修辞方法有:比喻、拟人、夸张、排比、反问、设问、对比、对偶、引用、双关1、比喻:就是打比方,是利用根本不同的两种事物之间的相似点作比的修辞手法。基本结构:本体+比喻词+喻体。常用的比喻词有:好像仿佛像……似的如同成了宛如比喻由三部分构成1、本体2、喻体3、比喻词 (比喻和拟人最大的不同在于比喻含有喻体,拟人没有。) 作用:将表达的内容说得生动具体形象,给人以鲜明深刻的印象,根据事物的相似点,用具体、浅显、常见的事物对深奥生疏的事物解说,即打比方,帮助人深入理解。 例句:活跃了一天的太阳,依旧像一个快乐的孩童。 比喻一般分为三种:明喻、暗喻、借喻。 (1)明喻是本体、喻体、比喻词都出现。如:共产党像太阳。 (2)暗喻是本体、喻体都出现,比喻词常用“是、变成、成了、构成”等。如:弟弟成了泥了。 (3)借喻是借用喻体代替本体,即只出现喻体,本体和比喻词均不出现。如:落光了叶子的柳树上挂满了毛茸茸、亮晶晶的“银条儿”。 例:在阳光的照耀下,漫山的山茶花仿佛千万颗红星在闪闪发光。 2、拟人:把物当做人写,赋予物以人的思想、感情、活动,用描写人的词来描写物。 作用:使具体事物人格化,语言生动形象有趣。 例句: 1.桃树、杏树、梨树、你不让我,我不让你,都开满了花赶趟儿。 2.感时花溅泪,恨别鸟惊心。《春望》杜甫 3.太阳的脸红起来了。《春》朱自清 拟人有两种类型:一是把事物直接当做人来描写。如:古老的威尼斯又沉沉地入睡了;二是人直接同事物说话。如:延安,你的精神灿烂辉煌!如果一旦失去了你啊,那就仿佛没有了灵魂,怎能向美好的未来展翅飞翔 例:淘气的小闹钟每天准时把我叫醒。 3、夸张:对事物的性质,特征等故意地夸张或缩小。是一种对事物作"言过其实"的描述的修辞手法。 作用:提示事物本质,烘托气氛,加强渲染力,引起联想效果。 例句:柏油路晒化了,甚至铺户门前的铜牌好像也要晒化。只能看到巴掌大的一块天地。她还没有端酒怀,就醉了。 夸张可分为三类,即扩大夸张、缩小夸张和超前夸张。

子网的划分经典例题解析

1个C类地址,地址段为192.168.8.0/24,划分8个子网主机数5,5,13,25,24,26,48,50。请划分子网和子网掩码? 首先明确一点,子网中最大主机数都是2的倍数,因为是【0000 0000】--【1111 1111】,所以一个子网的最大主机个数为2,4,8,16,32,64,128……(就是2的1次方,2的2次方,以此类推) 明白上面一点后按照题目要求,找到题目中主机数与上述最大主机数最接近的两个中较大的一个: 举例说,48这个主机数,和他最接近的应该是32和64,那么我们要取64就可以了。(如果比他小,那岂不是这48个主机要分成两个子网了么) 按照上面的方法,列出题目中给出主机数对应的最大主机数对照表 对照上述表格可以看出,A-F把最大子网数相加为128,G-H相加也是128,刚好是256/2的结果 所以首先要分成两个大的子网128个主机一个子网 192.168.8.0000 0000 192.168.8.0/25 192.168.8.1000 0000 192.168.8.128/25 那G和H就好办了,64=128/2,所以G和H就是上面两个子网任意取其中一个,再分成一半分别给G和H就好了比如我们取第一行192.168.8.0/25段给G和H: G:192.168.8.0000 0000 192.168.8.0/26 H:192.168.8.0100 0000 192.168.8.64/26 剩下的就是A-F了 A+B+C的子网数是32,和DEF的子网数相等,这样就是4个32主机数的子网了 所以,我们把上面第二行的子网192.168.8.128/25再分成4个32主机数的子网好了 4个子网,就是要有4中变化,用二进制表示就00 ,01,10,11 ;所以,4个子网如下 A-C:192.168.8.1000 0000 192.168.8.128/27 D: 192.168.8.1010 0000 192.168.8.160/27

STM32学习笔记

STM32学习笔记——时钟频率 ******************************** 本学习笔记基于STM32固件库V3.0 使用芯片型号:STM32F103 开发环境:MDK ******************************** 第一课时钟频率 STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。目前TI的M3系列芯片最高频率可以达到80M。 在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。 文件开头就有一个这样的定义: //#define SYSCLK_FREQ_HSE HSE_Value //#define SYSCLK_FREQ_20MHz 20000000 //#define SYSCLK_FREQ_36MHz 36000000 //#define SYSCLK_FREQ_48MHz 48000000 //#define SYSCLK_FREQ_56MHz 56000000 #define SYSCLK_FREQ_72MHz 72000000 ST 官方推荐的外接晶振是8M,所以库函数的设置都是假定你的硬件已经接了8M 晶振来运算的.以上东西就是默认晶振8M 的时候,推荐的CPU 频率选择.在这里选择了: #define SYSCLK_FREQ_72MHz 72000000 也就是103系列能跑到的最大值72M 然后这个C文件继续往下看 #elif defined SYSCLK_FREQ_72MHz const uint32_t SystemFrequency = SYSCLK_FREQ_72MHz; const uint32_t SystemFrequency_SysClk = SYSCLK_FREQ_72MHz; const uint32_t SystemFrequency_AHBClk = SYSCLK_FREQ_72MHz; const uint32_t SystemFrequency_APB1Clk = (SYSCLK_FREQ_72MHz/2); const uint32_t SystemFrequency_APB2Clk = SYSCLK_FREQ_72MHz; 这就是在定义了CPU跑72M的时候,各个系统的速度了.他们分别是:硬件频率,系统时 钟,AHB总线频率,APB1总线频率,APB2总线频率.再往下看,看到这个了: #elif defined SYSCLK_FREQ_72MHz static void SetSysClockTo72(void); 这就是定义72M 的时候,设置时钟的函数.这个函数被SetSysClock ()函数调用,而SetSysClock ()函数则是被SystemInit()函数调用.最后SystemInit()函数,就是被你调用的了

语文各种修辞手法的详解

小学语文修辞手法的详解 修辞方法不只是小学语文非常重要的基础知识,而且这一知识点的掌握好与坏直接关系到作文这一重要的知识,所以绝 不能忽视。 什么是修辞手法: 修辞手法,就是通过修饰、调整语句,运用特定的表达形式以提高语言表达作用的方式或方法,使语言表达得准确、鲜明而生动有力。 语文中的修辞手法: 比喻、拟人、夸张、排比、对偶、借代、反问、设问、对比、反复、双关、引用、反语、联想、通感、顶真、互文、回环、移情、拈连、象征、寄寓(寄托),呼告等。 常用的八种修辞手法: 比喻、拟人、夸张、排比、对偶、借代、反问、设问。

一、比喻: 1、什么是比喻 比喻就是“打比方”,即利用不同事物之间的某些相似之处,用一个事物来比方另一个事物。多用一些具体的,浅显的、熟知的事物来说明抽象的、深奥的、生疏的事物。其中比喻可以分为:明喻、暗喻、借喻、博喻(又名复喻)、倒喻(又名逆喻)、反喻、互喻(又名回喻)、较喻(可分为强喻,弱喻)、譬喻、饰喻、引喻、隐喻。 2、比喻必须具备的三个要素 (1)本体:即被比方的事物; (2)喻体:即用来作比方的事物; (3)比喻词:用来表示比喻关系的词。常见的比喻词 主要有:像、好像、若、似、似的、似乎、好似、恰似、如、犹如、有如、仿佛、好比、一样、成了、是、变成等。 3、如何判断一个句子是否是比喻句 虽然有些句子含有上述比喻词,但未必就是比喻句。判断一个句子是否是比喻句,除判断句子是否有三个要素以外,还要重点注意: 本体和喻体必须是本质不同的事物。

4、典型例句 (1)桂林的山真秀啊,像翠绿的屏障,像新生的竹笋,色彩明丽,倒映水中。《(桂林山水)》 (2)小兴安岭一年四季景色诱人,是一座美丽的大花园,也是一座巨大的宝库。《美丽的小兴安岭》 二、拟人: 1、什么是拟人 把物当做人写,赋予物以人的动作、行为、思想、语言、感情、活动,用描写人的词来描写物。 2、判断要点: 描写人的词来描写物。 3、拟人的作用 作用:把禽兽鸟虫花草树木或其他无生命的事物当成人写,使具体事物人格化,语言生动形象。将什么赋予生命,生动形象地写出某事物某特征,表达作者某情感。 4、典型例句 (1)风儿轻轻地唱着歌,唤醒了沉睡中的大地。

详细讲解MOS管工作原理

详细讲解MOSFET管驱动电路 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1,MOS管种类和结构 MOSFET管是FET的一种(另一种是JFET),可以被制造成增强型或耗尽型,P沟道或N沟道共4种类型,但实际应用的只有增强型的N沟道MOS管和增强型的P沟道MOS管,所以通常提到NMOS,或者PMOS指的就是这两种。 至于为什么不使用耗尽型的MOS管,不建议刨根问底。 对于这两种增强型MOS管,比较常用的是NMOS。原因是导通电阻小,且容易制造。所以开关电源和马达驱动的应用中,一般都用NMOS。下面的介绍中,也多以NMOS为主。 MOS管的三个管脚之间有寄生电容存在,这不是我们需要的,而是由于制造工艺限制产生的。寄生电容的存在使得在设计或选择驱动电路的时候要麻烦一些,但没有办法避免,后边再详细介绍。 在MOS管原理图上可以看到,漏极和源极之间有一个寄生二极管。这个叫体二极管,在驱动感性负载(如马达),这个二极管很重要。顺便说一句,体二极管只在单个的MOS管中存在,在集成电路芯片内部通常是没有的。 2,MOS管导通特性 导通的意思是作为开关,相当于开关闭合。

NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。 PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC 时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。 3,MOS开关管损失 不管是NMOS还是PMOS,导通后都有导通电阻存在,这样电流就会在这个电阻上消耗能量,这部分消耗的能量叫做导通损耗。选择导通电阻小的MOS管会减小导通损耗。现在的小功率MOS管导通电阻一般在几十毫欧左右,几毫欧的也有。 MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电压有一个下降的过程,流过的电流有一个上升的过程,在这段时间内,MOS管的损失是电压和电流的乘积,叫做开关损失。通常开关损失比导通损失大得多,而且开关频率越快,损失也越大。 导通瞬间电压和电流的乘积很大,造成的损失也就很大。缩短开关时间,可以减小每次导通时的损失;降低开关频率,可以减小单位时间内的开关次数。这两种办法都可以减小开关损失。 4,MOS管驱动 跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压高于一定的值,就可以了。这个很容易做到,但是,我们还需要速度。 在MOS管的结构中可以看到,在GS,GD之间存在寄生电容,而MOS管的驱动,实际上就是对电容的充放电。对电容的充电需要一个电流,因为对电容充电瞬间可以把电容看成短路,所以瞬间电流会比较大。选择/设计MOS管驱动时第一要注意的是可提供瞬间短路电流的大小。

小学语文修辞手法详细讲解

For personal use only in study and research; not for commercial use 小学语文修辞手法详细讲解 1、比喻:就是打比方,指用具体的、浅显的、人们比较熟悉的事物去表现抽象的、难懂 的、人们少见的事物的一种修辞方法。 比喻由本体、比喻词、喻体三部分构成。本体和喻体两种事物之间必须在某一方面有相 似之处但又不同类,比喻词常用的有“好像、像……一样(似的)、仿佛、是、成了”等。 例:在阳光的照耀下,漫山的山茶花仿佛千万颗红星在闪闪发光。 2、拟人:就是把人以外的事物当作人来写,使它像人一样会说话、有感情、做人的动 作。 nyp内环式高粘度泵 例:淘气的小闹钟每天准时把我叫醒。 3、排比:就是有三个或三个以上结构相似、相同或意思相关,字数大致相等,语气一 致的句子排列在一起的。(一般有相同的字眼为标志。) 例:学好了语文,我们才会读书看报,才会写信写日记,才会写作文。NYP转子泵 4、夸张:就是为了突出某一事物,有意把事物的形态、特征、作用进行扩大或缩小来 描述。例:在巴掌大的监狱里,同志们照常锻炼身体。 5、反问:用疑问的形式来表达肯定的意思的一种修辞方法。无疑而问,不需回答。多 用“难道、怎能、怎么”等词作反问词。 例:(1)作为一个小学生,怎能不努力学习呢?高粘度齿轮泵 6、设问:就是有针对性提出一个问题,然后把自己的看法谈出来。实际上就是自问自 答。 例:我能被中条山的风吓倒吗?不能,绝对不能。 7、对偶:指用结构相同、字数相等、意思相关或相反的两组句子组成对句的一种修辞 方法。(对联一般采用对偶的写法,还有一些古诗句也运用了对偶的写法。)例1:风声雨声读书声,声声入耳;家事国事天下事,事事关心。LC型罗茨泵

划分子网例题详细解析

划分子网例题详细解析 例题一、IPv4地址位202.112.14.137 ,子网掩码为 255.255.255.224,所在的子网的网络地址和广播地址是什么。 分析:根据子网掩码255.255.255.224得出该子网的主机ID分布在IPv4 的最后一个字节里, 各个地址块的大小为:1 (256-255).1(256-255).1(256-255).32(256-224) 而起着关键作用的是包含主机ID中的第一个字节,包含主机ID 的是第四个字节,地址块是32,可以知道各个网段该字节的取值范围为:0 - 31 、32-63、64-95、96-127、128-159……而202.112.14.137在第5个网段上,202.112.14.128 202.112.14.159 广播地址:202.112.14.159 网络地址:202.112.14.128 例题二、有一个IP地址范围10001100 00010001 10101010 0~255,这是一个B类IP地址,可以表示2的16次方台主机,现将该IP地址分给4个子公司,a公司有8000台电脑,b公司有1600台电脑,c公司有2700台电脑,d公司有6000台电脑,请问怎样分配,请给出每个公司的mask地址。 从大到小一个一个切,2的10次方是1024,10位主机号的子网容纳主机=1024-2=1022个,依次类推,容纳8000台的要13位主机号,容纳6000的也要13位主机号,容纳2700的要12位主机号,

容纳1600的要12位主机号。 如果允许全0和全1子网的话,B类可以划分为8个13位主机号的子网。取第一个和第二个子网给8000和6000,再取第三个子网划分为2个12位主机,分别给2700和1600的就OK了。

STM32学习笔记(5)通用定时器PWM输出

STM32学习笔记(5):通用定时器PWM输出 2011年3月30日TIMER输出PWM 1.TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 1.1PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。模式1和模式2的区别如下: 110:PWM模式1-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。 111:PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。 由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。 而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的“14.3.9 PWM模式”一节,在此就不详细赘述了。 1.2PWM输出管脚 PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的“8.3.7 定时器复用功能重映射”一节。在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。但是这些重映像的管脚也是由参考手册给出的。比如

相关文档
最新文档