UHF基础知识

读卡器根据频段分类:

135kHz以下:读卡距离短,一般只有几十厘米,数据传输速度慢。此频段的系统采用电感耦合的方式,符合ISO/IEC18000-2标准。

13.56MHz:此频段在世界范围内通用,读卡距离一般在十厘米左右,常用于电子车票,小区物业管理等。此频段采用电感耦合的工作方式,符合ISO/IEC18000-3标准。

UHF频段(840-960MHz):UHF频段的典型识别距离是4-6米,一般可做到7米,最远可达10米,通信质量较好,主要应用于铁路车辆自动识别,集装箱识别和高速公路车辆识别和收费领域。此频段的系统采用电磁反向散射耦合的工作方式,符合ISO/IEC18000-6标准。

2.45GHz:此频段的最佳传输距离是100米,但该频段系统穿透性差,适合于电子收费系统和实时定位系统等领域。此频段的系统也采用电磁反向散射耦合的工作方式,符合ISO/IEC18000-4标准。

RFID技术标准体系

ISO(国际标准化组织):

ISO14443,ISO15693,ISO14536,ISO18000

EPC Global(电子产品码全球协会):

UHF Class0 Gen1,UHF Class1 Gen1,UF Class1 Gen1,UHF Class1 Gen2

ISO18000-6C协议

ISO/IEC18000-6C的全称是“信息技术-基于单品管理射频识别-第6部分-频率为860-960MHz的空中通信接口参数”,符合ISO/IEC18000-1标准规定的体系框架。2006年7月EPC Global宣布其UHF Gen2空中接口协议经ISO核准并入ISO/IEC18000-6标准,成为ISO/IEC18000-6中的C型接口协议。

国内UHF可使用的频段:840-845MHz,920-925MHz

无刷直流电机正反转过零点换相

无刷无感直流电机换向时一般采用反电动势过零点的办法,ABC三相端电压经低通滤波器后,求和得出模拟中性点,滤波后的端电压再与模拟中性点电压比较得到过零点。过零点检测电路如下,R72,R73,R74分别接ABC三相端电压。

clip_image002

三相电机一般采用两相导通六步换相的控制方法,正转和反转是相对的,假如正转的通电顺序是A+B-,A+C-,B+C-,B+A-,C+A-,C+B-,

那么反转的通电顺序应该是

C+B-,C+A-, B+A-, B+C-, A+C-, A+B-,

clip_image004

clip_image006

上图是正转时各绕组的电流和感应电动势。 继续阅读

运放测电路电流

电流检测方案一般分低端电流检测和高端电流检测。低端电流检测的检流电阻串联到地,高端电流检测的检流电阻串联到高电压端。

下图是低端电流检测电路示意图:

clip_image002

低端检测电路抬高了地电压,不如高端电流检测电路方便。

下图是高端电流检测电路:

clip_image004

clip_image006

R19是2W检流电阻。运放的同相输入端通过电阻接R19的电流流入端。运放的反相输入端通过电阻接R19的电流流出端。通过测量R19两端的电压,然后用电压/R19,就得到整个电路的电流。

根据运放的虚短特性,得到

V+=V-;

运放的同相输入端电压由R21,R22分压得到:

V+=12V*R22/(R22+R21);

所以

V-=12V*R22/(R22+R21); 式1

根据运放的虚断特性,R15和R12的流过的电流相等。

(Vin-V-)/R15 =(V- – Vout)/R12; 式2

电路中R15=R21,R12=R22

式1代入式2,得到:

(12V-Vin) = Vout*R15/R12

R12是R15的5倍,所以VR19 = Vout/5;

Vout接单片机的ADC脚,测得电压为0.88V时,R19两端电压为0.88/5=0.176V,

流过R19的电流为0.176V/0.82欧=214mA。与实测的电流接近。

注意不能选择最大5V供电的运放,否则运放同相反相输入端电压超过5V时,运放输出电压和预想的不一样。LM358 单电源供电时电压范围为3-30V,能满足需求。

深圳芯成电子承接单片机嵌入式开发

深圳芯成电子工作室,全职承接单片机软件开发项目。有十多年单片机开发经验。熟悉各种8-32位主流单片机的性能和开发环境,熟悉各种外围芯片的应用。善于根据项目需求选择合适的方案,建立合理的程序架构,高效完成开发。有丰富的软硬件一线产品研发经验,善于分析问题,攻克技术难点。
熟练使用NXP lpc1768/STM32 ARM cortex-3 /cortex-0核芯片,stm8s系列单片机,51单片机,PIC,ATMEGA,HOLTEK,松瀚,义隆等单片机,熟练使用单片机的各种接口:UART,IIC,SPI,RS232,RS485,ADC,DAC,PWM,USB等。
能根据需求移植小型嵌入式系统UCOS,移植小型TCP/IP协议栈LWIP,移植文件系统Fatfs。
熟悉RFID各种卡片的读写,EM125k门禁卡 HID125K门禁卡 UTC门禁卡 基于13.56MHZ ISO14443A ISO14443B的M1卡和CPU卡,以及基于ISO7816的SIM卡。熟悉3DES,SM1加密算法。
熟悉无刷直流电机驱动,熟悉PID控制算法。
熟悉LCD控制,STEMWIN GUI图形界面移植。
熟悉温湿度传感器,压力传感器,压差传感器等的应用。
熟悉指纹模块的使用。
熟悉USB的HID协议。
熟悉各种外围芯片:FM24CL64,W2Q128, At45db161d等EEPROM,FLASH芯片,ISD系列语音芯片,HT9170,HT9200等电话芯片,收音机芯片SI4730,串口扩展芯片,蓝牙模块,LCD驱动芯片,CH376系列USB驱动芯片,DM9000A,LAN8720等网络芯片,中兴GSM短信模块等。
技术博客:http://www.dpj365.com
联系方式:QQ/微信:1776791388
E-MAIL:dpj365@126.com

PID算法控制马达转速

PID算法听起来高大上,理解后实际上是很简单的,实现代码也很小。

PID控制是将实际值与目标值的偏差的比例(P),积分(I),微分(D)的线性组合作为控制量,控制被控对象。

PID控制器各个校正环节的作用如下:

1、 比例环节:用来控制当前,即时成比例地反映偏差信号,偏差一旦出现,比例环节立即产生作用来减小偏差。

2、 积分环节:用来控制过去,主要作用是消除静差,积分常数Ti越小,积分作用越强,Ti越大,积分作用越弱。

3、 微分环节:用来控制将来,能对偏差的变化做出反应,在偏差变化太大之前加入控制信号。微分常数越大,做出的反应越快,从而减小系统调节时间。

一、模拟PID控制原理:

clip_image002

其中,r(t)是给定值,y(t)是系统的实际输出值,给定值与实际输出值的差值e(t)=r(t)-y(t).e(t)作为PID控制器的输入,u(t)作为PID控制器的输出,也是被控对象的输入。所以,模拟PID的控制规律为:

clip_image004

其中,Kp为控制器的比例系数;Ti为控制器的积分时间常数;Td为控制器的微分时间常数。

(1)比例部分:Kp*e(t)

在模拟PID控制器中,比例环节的作用是对偏差瞬间作出反应。偏差一旦产生,控制器立即产生控制作用,使控制量向减小偏差的方向变化。控制作用的强弱取决于比例系数Kp。Kp越大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小。但是Kp越大,也越容易产生振荡,破坏系统的稳定性。

(2)积分部分
从积分的数学表达式可知:只要存在偏差,则它的控制作用就不断增加。只有在偏差值为零时,它的积分才是一个常数。控制作用才是一个不会增加的常数。可见,积分部分可以消除系统的偏差。
积分环节虽然会消除静态误差,但是也会降低系统的响应速度,增加系统的超调量。积分时间常数越大,积分的积累越弱。这时,系统在过渡时不会产生振荡。但是,增大积分时间常数会减慢静态误差的消除过程,消除偏差所需的时间也较长,但可以减少超调量,提高系统的稳定性。
当积分时间常数较小时,则积分的作用较强。这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定积分时间常数。
积分系数(积分增益)是指:Ki=K_p/T_i 。
(3)微分部分:Kp*Td*(de(t))/dt
控制系统除了期望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可以在PI控制器的基础上加入微分环节,形成PID控制器。
微分环节的作用是阻止偏差的变化。它根据偏差的变化趋势(变化速度)进行控制。偏差变化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入,有助于减小超调量、克服振荡,使系统趋于稳定。特别对高阶系统有利,它加快了系统的跟踪速度。但微分的作用对输入信号的噪声很敏感。对那些噪声较大的系统一般不用微分,或在微分起作用之前先对输入信号进行滤波。
微分部分的作用由微分时间常数决定。微分时间常数越大时,则它抑制偏差变化的作用越强;微分时间常数越小时,则它反抗偏差变化的作用越弱。微分部分显然对系统稳定有很大的作用。适当地选择微分时间常数,可以使微分作用达到最优。
微分系数是指:Kd= Kp*Td。

继续阅读

MDK 出现#68-D: integer conversion resulted in a change of sign(转)

在KeilARM的LPCARM,存在(1<<31)编译警告问题main.c(174): warning: #61-D: integer operation result is out of rangemain.c(174): warning: #68-D: integer conversion resulted in a change of sign由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位)依此类推,(2<<30),(3<<29)…等都会出现编译警告问题.解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),…

keil5 编译程序出现错误Error: L6411E: No compatible library exists with a definition of startup symbol __main(转)

Error: L6411E: No compatible library exists with a definition of startup symbol __main.
之前装过ADS,ADS与MDK冲突,依据网友提供的资料,最终的解决办法如下

在我的电脑点击属性>高级系统设置>高级>环境变量>在系统变量中>新建
(如果我的电脑只是快捷方式则属性中不会出现环境变量,需要在屏幕空白处右击,选择个性化,主题,找到桌面图标设置(系统不同,位置不一定一样,在个性化中可以找到),将计算机选项勾选即可)
变量名: ARMCC5LIB      
变量值:F:\Keil_v5\ARM\ARMCC\lib
(变量值是keil的安装目录,本人安装目录在F:\Keil_v5,剩下的目录是安装时系统自己建立,直接相同即可)
———————
作者:lnwechag
来源:CSDN
原文:https://blog.csdn.net/lnwechag/article/details/50760001
版权声明:本文为博主原创文章,转载请附上博文链接!

CH372实现HID键盘功能

有些IC发卡器在刷卡时,卡号可以填写在文档光标处。这种产品很多年前就有了,最近刚好有客户有这方面需求,用CH372做了一款HID键盘类型的发卡器。

一款HID设备包括设备描述符,配置描述符,接口描述符,端点描述符,HID描述符,HID描述符包括报告描述符,另外还有字符串描述符,语言描述符。对HID键盘设备,用BusHound抓包时没看到PC请求语言描述符和字符串描述符。

设备描述符:

image

image

配置描述符:

image

image

image

image

报告描述符: 继续阅读

LPC1768 内部RTC程序

typedef struct{

uint8_t RTC_Sec;

uint8_t RTC_Min;

uint8_t RTC_Hour;

uint8_t RTC_Mday;

uint8_t RTC_Wday;

uint16_t RTC_Yday;

uint8_t RTC_Mon;

uint16_t RTC_Year;

}RTCTime;

RTCTime LocalTime;

void RTCStart(void)

{

LPC_RTC->CCR |= 0x01;

}

void RTCInit( void )

{

LPC_SC->PCONP |= CLKPWR_PCONP_PCRTC; //开启RTC电源

if(!(LPC_RTC->CCR & 0x01)) //如果时钟没使能,使能时钟,使能位在芯片复位时状态不会变化,不用每次上电都使能

{

LPC_RTC->ILR = 0;

LPC_RTC->AMR = 0xff;

LPC_RTC->CIIR = 0;

LPC_RTC->CCR = 0;

LocalTime.RTC_Year = 2019;

LocalTime.RTC_Mon = 1;

LocalTime.RTC_Mday = 1;

LocalTime.RTC_Wday = 2;

LocalTime.RTC_Hour = 0;

LocalTime.RTC_Min = 0;

LocalTime.RTC_Sec = 0;

RTCSetTime(&LocalTime);

RTCStart();

}

}

void RTC_Get_Time(RTCTime* Time)

{

Time->RTC_Year= LPC_RTC->YEAR ;

Time->RTC_Mon = LPC_RTC->MONTH;

Time->RTC_Yday = LPC_RTC->DOY;

Time->RTC_Wday = LPC_RTC->DOW;

Time->RTC_Mday = LPC_RTC->DOM;

Time->RTC_Hour = LPC_RTC->HOUR;

Time->RTC_Min = LPC_RTC->MIN;

Time->RTC_Sec = LPC_RTC->SEC;

}

void RTCSetTime(RTCTime* Time)

{

LPC_RTC->SEC = Time->RTC_Sec;

LPC_RTC->MIN = Time->RTC_Min;

LPC_RTC->HOUR = Time->RTC_Hour;

LPC_RTC->DOM = Time->RTC_Mday;

LPC_RTC->DOW = Time->RTC_Wday;

LPC_RTC->DOY = Time->RTC_Yday;

LPC_RTC->MONTH = Time->RTC_Mon;

LPC_RTC->YEAR = Time->RTC_Year;

}

LPC1768读写W25Q128程序

uint8_t W25QXX_Buf[4096];

GPIO设置

/*SPI pin set*/

PinCfg.Funcnum = PINSEL_FUNC_3;

PinCfg.Portnum = 0;

PinCfg.Pinmode = PINSEL_PINMODE_TRISTATE;

PinCfg.Pinnum = SPI_SCK;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Pinnum = SPI_MOSI;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Pinnum = SPI_MISO;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Funcnum = PINSEL_FUNC_0;

PinCfg.Portnum = 0;

PinCfg.OpenDrain = PINSEL_PINMODE_NORMAL;

PinCfg.Pinnum = SPI_CS;

PINSEL_ConfigPin(&PinCfg);

GPIO_SetDir(0, (1<<SPI_CS), 1);

GPIO_SetValue(0, (1<<SPI_CS));

void Spi_Initial(void)

{

SPI_CFG_Type spi0;

spi0.CPHA = SPI_CPHA_FIRST;

spi0.CPOL = SPI_CPOL_LO;

spi0.ClockRate = 3125000; //spi_clk = 25000000,25000000/8=3125000,能使用的最高频率

spi0.DataOrder = SPI_DATA_MSB_FIRST;

spi0.Databit = SPI_DATABIT_8;

spi0.Mode = SPI_MASTER_MODE;

SPI_Init(LPC_SPI,&spi0);

}

uint8_t SPIF_POLLING(void)

{

uint8_t n = 0xff;

while (n–)

{

if (LPC_SPI->SPSR & 0x80)

return TRUE;

}

return FALSE;

}

继续阅读

第 1 页,共 8 页12345...最旧 »