/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定义 sfr WDT_CONTR = 0xe1;//stc2051的看门狗?????? /**********全局常量************/ //写卡的命令 #define write_command0 0//写密码 #define write_command1 1//写配置字 #define write_command2 2//密码写数据 #define write_command3 3//唤醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //读卡的时间参数us #define ts_min 250//270*11.0592/12=249//取近似的整数 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10调整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI总线 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//测试绿灯 sbit led_light1 = P1^5;//测试红灯 sbit led_light_ok = P1^1;//读卡成功标志 sbit fengmingqi = P1^5; /***********全局变量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存储卡上用户数据(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram uchar command; //第一个命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //缓存定时值,因用同一个定时器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //缓存定时值,因用同一个定时器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函数原型*****************/ //读写操作 void f_readcard(void);//全部读出1~7 AOR唤醒 void f_writecard(uchar x);//根据命令写不同的内容和操作 void f_clearpassword(void);//清除密码 void f_changepassword(void);//修改密码 //功能子函数 void write_password(uchar data *data p);//写初始密码或数据 void write_block(uchar x,uchar data *data p);//不能用通用指针 void write_bit(bit x);//写位 /*子函数区*****************************************************/ void delay_2(uint x) //延时,时间x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能频繁的复位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允许接收 //SCON =0x50; //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1, //REN=1允许接收 TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位) TCON = 0x40; //设定时器1 允许开始计时(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //启动定时器 WDT_CONTR = 0x3c;//使能看门狗 p_U2270B_Standby = 0;//单电源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//读卡 { EA = 0;//全关,防止影响跳变的定时器计时 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用唤醒功能来防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作码读0页 write_bit(0); write_password(&bankdata[24]);//密码block7 p_U2270B_CFE =1 ;// delay_2(516);//编程及确认时间5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断? while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定时器晚启动10个周期 //同步头 if((324 < a.W) && (a.W < 353)) ;//检测同步信号1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //读0~7块的数据 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8个位 { //等待下降沿的到来 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再赋值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//读卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//写卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//写密码:初始化密码 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 for(i = 0;i < 35;i++) { write_bit(1);//写数据位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//测试使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密码存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡参数:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密码写数据 { uchar data*data p; p = &bankdata[24]; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_password(p);//发口令 write_bit(0);//写锁定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//写数据 } else if(x == write_command3)//aor //唤醒 { //cominceptbuff[1]操作码10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密码 p_U2270B_CFE = 1;//此时数据不停的循环传出 } else //停止操作码 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密码 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密码 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作码10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//写新配置参数:pwd=0 //密码无效:即清除密码 DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密码 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密码 DATA = 0x80;//操作码10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//写新密码 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密码存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函数***********************************/ void write_bit(bit x)//写一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延时448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写0 } } /*******************写一个block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0数据 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //读卡 f_writecard(command1); //写卡 f_clearpassword(); //清除密码 f_changepassword(); //修改密码 } }
标签: 12345
上传时间: 2017-10-20
上传用户:my_lcs
随着开关电源的发展,软开关技术得到了广泛的发展和应用,已研究出了不少高效率的电路拓扑,主要为谐振型的软开关拓扑和PWM型的软开关拓扑。近几年来,随着半导体器件制造技术的发展,开关管的导通电阻,寄生电容和反向恢复时间越来越小了,这为谐振变换器的发展提供了又一次机遇。对于谐振变换器来说,如果设计得当,能实现软开关变换,从而使得开关电源具有较高的效率。LLC谐振变换器实际上来源于不对称半桥电路,后者用调宽型(PWM)控制,而LLC谐振是调频型(PFM)。
标签: l6599
上传时间: 2021-11-25
上传用户:slq1234567890
“电路计算器”是工程师的离线电子设计工具。本软件适用于Android平台具有便利性,可见性以及在最短时间内找到最佳解决方案的能力。超过130个模拟电路拓扑,超过40个电子计算器,超过20个应用笔记,逻辑求解器。特征:*电流源和接收器。*低通,高通,带通,带阻滤波器。*数学运算。*电源电路。*开关电源模块。*控制回路补偿。
上传时间: 2021-12-19
上传用户:
Allegro PCB SI的前仿真 前仿真,顾名思义,就是布局或布线前的仿真,是以优化信号质量、避免信号完整性和电源完整性为目的, 在众多的影响因素中,找到可行的、乃至最优化的解决方案的分析和仿真过程。简单的说,前仿真要做到两件 事:其一是找到解决方案;其二是将解决方案转化成规则指导和控制设计。 一般而言,我们可以通过前仿真确认器件的IO特性参数乃至型号的选择,传输线的阻抗乃至电路板的叠层, 匹配元件的位置和元件值,传输线的拓扑结构和分段长度等。 使用Allegro PCB SI进行前仿真的基本流程如下: ■ 准备仿真模型和其他需求 ■ 仿真前的规划 ■ 关键器件预布局 ■ 模型加载和仿真配置 ■ 方案空间分析 ■ 方案到约束规则的转化 2.1 准备仿真模型和其他需求 在本阶段,我们需要为使用Allegro PCB SI进行前仿真做如下准备工作:PCB 打板,器件代采购,贴片,一站式服务!www.massembly.com 麦斯艾姆,最贴心的研发伙伴! www.massembly.com 研发样
上传时间: 2022-02-09
上传用户:slq1234567890
能源短缺和环境恶化是人类共同面临的挑战。开发新型清洁能源是解决能源短缺和环境恶化的捷径,但是太阳能能源不连续和不稳定的缺点影响其单独使用的效果。为了解决这个问题,可以选择使用多种性质互补的能源联合供电,相互弥补彼此的不足,以达到连续稳定的电能输出。基于双输入直流变换器(Multipk-Input Converter,MC)的光电互补系统相对于风光互补系统而言,在太阳能功率充足时,可以选择将多余的能量进行并网,省去了蕃电池等储能设备,也可大大节约成本,简化控制:而且电网是全天候的,比纯新能源联合系统更加可靠。因此本文将对光电互补系统,研究其拓扑、能量管理和系统参数设计等等在隔离应用的中小功率场合,推挽变换器控制方便,结构简单,应用广泛传统的多输入推挽变换器结构复杂,成本高。通过分析MIC的生成方法,利用脉冲电压源 Pulsating Voltage Source Ce,PⅤSC或者脉冲电流源(Pulsating Curren Source Cell,PCSC)中联或者并联构成简单实用的一族多输入推挽变换器,详细分析了BUCK型PVSC串联构成的双输入推挽变换器的小信号模型和控制方式,为了能够提供交流输出,本文还详细分析了半桥逆变电路的控制方式,并推导出其数学控制模型通过分析系统的工作模式、能量管理策略和不同控制方式对系统的影响,阐叨基于双输入推挽变换器的光电互补系统的工作原理。并对系统软件涉及到的太阳能最大功率跟踪、光电互补控制和逆变控制等算法进行重点研究功率电路参数设计合理与否,直接影响着系统的性能和指标,其中推挽变压器和滤波器的参数设计尤为重要,为此专门给出了硬件参数设计步骤;然后,根据软件算法,设计了控制软件流程图来更清晰的表达软件控制的思想软件参数是影响系统鲁棒性和快速性的另一个关键因素,在硬件设计的基础上,对软件参数进行优化设计,并利用 Simulink软件对设计参数进行仿真分析和修正。然后采用TMS320F2809作为控制芯片,搭建了实验原理样机,并进行了相关验证实验
标签: 推挽变换器
上传时间: 2022-03-16
上传用户:
随着材料技术以及开关电源技术的进步,照明领域开启了新的时代。IFD照明作为第四代光源具有节能、环保、高效、长寿命的特点,其正在逐步替代传统白炽灯作为LED灯具的核心部分,LED驱动电源一直是国内外集成电路设计公司重点研究的领域。LED灯具应用于家庭中小功率照明场合时,用户希望其电源具有结构简单,成本低、性能稳定、效率高、安全性高的优点,而市场上现阶段能满足这一特点的ACDC型LED驱动电源不多,因此该类型驱动电源也成为当前研究的重点本文主要任务是根据项目要求对ACDC型LED恒流驱动驱动电源模型进行分析,然后利用 SIMetrix软件对模型进行建模与仿真,通过对驱动电源模型的研究促进集成电路设计人员对恒流驱动电源工作原理的理解进而加快产品研发速度以及提高产品的质量。在建模过程中,首先通过分析和总结不同的恒流控制方式及电路拓扑结构,确定驱动电源模型采用的控制方式为单闭环峰值电流控制模式,其拓扑结构为反激式拓扑结构。然后通过对不同状态下驱动电源的逻辑分析,设计驱动电源的逻辑和功能电路结构。针对当前众多电力电子软件在电子电路建模方面存在的弊端,如仿真收敛性差仿真速度慢、占用系统资源等,本文选用 SIMetrix软件对驱动电源进行建模仿真,该软件可以很好地克服其他软件在仿真收敛性、仿真速度以及占用系统资源等方面的缺点。仿真结果表明驱动电源模型正确。最后,设计基于该驱动模型流片样品的驱动电源测试电路,并搭建测试平台。对驱动电源进行的相关性能测试,测试结果表明驱动电源的负载电流控制精度可达5%,其实测最大效率可达782%,不同故障状态下的功能测试结果表明电源能准确启动保护。因此,根据测试数据分析的结果可以看出该驱动电源在恒流特性、保护功能及效率都满足设计要求,同时通过仿真结果与测试结果的对比分析,也进一步验证了模型的正确性关健词:LED恒流驱动拓扑结构逻辑分析 SIMetrix建模断续模式
上传时间: 2022-03-16
上传用户:
随着电力电子技术的飞速发展,高频开关电源由于其诸多优点已经广泛深入到国防、工业、民用等各个领域,与人们的工作、生活密切相关,由此引发的电网谐波污染也越来越受到人们的重视,对其性能,体积,效率,功率密度等的要求也越来越高。因此,研究具有高功率因数、高效率的ACDC变换技术,对于抑制谐波污染、节钓能源及实现绿色电能变换具有重要意义通过分析目前功率因数校正PFC)技术与直流变换(DcDC)技术的研究现状,采用了具有两级结构的AcDc变换技术,对PFC控制技术,直流变换软开关实现等内容进行了研究。前级PFC部分采用先进的单周期控制技术,通过对其应用原理、稳定性与优势性能的研究,实璄了主电路及控电路的参数设计与优化,简化了PFC控制电路结构、根据控制电路特点与系統环路稳性要求,完成了电流环路与整个控制环路设计,确保了系统稳定性,提高了系统动态响应。通过建立电路闭环仿真模型,验证了单周期控制抑制输入电压与负载扰动的优势性能及连续功率因数校正的优点,优化了电路参数后级直流变换主电路采用LLC谐振拓扑,通过变频控制使直流变换环节具有轼开关特性。分析了不同开关频率范围内电路工作原理,并建立了基波等效电路,采用基波分析法对VLc需城电路的电反增益性,输入阻抗持性进行了研究,确定了电路软开关工作范图。以基波分析结果为基础进行了合理的电路参数优化设计,保证了直流变换环节在全输入电压范围、全负载范围内能实现桥臂开关管零电压开通zVS},较大范围内边整流二极管零电流关断区CS),并将谐振电路中的电压电流应力降到最小,极大的提高了系统效率同时,为了提高系统功率密度,选择了优化的磁性元器件结构,实现了谐振感性元件与变压器的磁性器件集成,大大减小了变换电路的体积在理论研究与参数设计的基础上,搭建了实验样机,分别对PFC部分和DcDC部分进行了实验验证与结果分析。经实验验证ACDc变换电路功率因数在0.988以上,直瓿变换电路能实现全范图软开关,实现了高效率AcDC变换。关键词:ACDC变换:功率因数校正:;高效率;LLC谐振电路:单周期控制
上传时间: 2022-03-24
上传用户:
基于PSIM仿真软件,分析了Boost电路拓扑结构,设定了参数要求进行电路仿真设计,通过电路仿真软件PSIM对Boost电路工作在CCM模式下,合理设置占空比参数。实验结果表明理论分析与仿真的一致性和参数设计的正确性,输出电压和电流参数稳定,Boost电路输出效率高。This design is based on PSIM simulation software,analyzes the topology of Boost circuit,sets the parameter re- quirements for circuit simulation design,and reasonably sets the duty cycle parameters for Boost circuit working in CCM mode through PSIM simulation software.The experimental results show that the theoretical analysis and simulation are consis- tent and the parameter design is correct,the output voltage and current parameters are stable.
上传时间: 2022-05-04
上传用户:
摘要:文中分析了功率因数校正的必要性,对有源功率因数校正主电路拓扑做了对比分析,确定本文选用无桥拓扑。分析了无桥PFC电路的原理和优缺点,可以看到无桥电路具有开关器件少,功耗低,成本小,电路体积小的优点。在控制方案选择单周期控制,并采用Malab Simulink仿真平台建立仿真模型,通过仿真表明,单周期控制的无桥PFC达到功率因数提高的目的。关键词:功率因教校正;无桥;单周期;Matlab随着电力电子技术的发展,电网中整流器、开关电源等非线性负载不断增加。这些存在冲击性的用电设备,将引起网侧输人电流发生严重畸变,产生大量造波污染,导致电网功率因数过低,所以提高功率因数势在必行"早期功率因数校正采用在整流器后加滤波电感电容实现,功率因数一般只有0.6左右;在20世纪90年代,有源功率因数校正(APFC)产生,是在整流器和负载之间接入一个DC/DC开关变换器,应用电流反馈技术,使输入端电流波形跟踪交流输入正弦电压波形,可以使输入电流波形接近正弦,功率因数可提高到0.99以上。由于该方案采用了有源器件,故称为有源功率因数校正APFC1有源功率因数校正主电路拓扑1.1 传统Boost拓扑传统Boost PFC电路由整流桥和PFC组成,如图1所示。传统Boost PFC电路工作时通过控制开关管的动作,采用反馈来控制电流波形,这样可以使交流网侧输入电流跟踪输入交流电压而接近正弦波,来提高功率因数。但其流通路径有3个半导体工作,当变换器功率和开关频率提高时,系统的系统通态损耗明显增加,整体效率低29
上传时间: 2022-06-17
上传用户:
Power Stage Topology Reference Guide高清文字版
标签: 电源拓扑
上传时间: 2022-06-18
上传用户: