🌍首页
📁归档
⏳时光机
🚩友链
📫留言
📧订阅
🌟推荐
📕考研课程
🏜️ 免费壁纸
❤ 捐助本站
💰资助名单
🎵音乐实验
Search
1
【NPN/PNP三极管】放大电路饱和失真和截止失真的区别
20,217 阅读
2
论文写作中如何把word/wps里面所有数字和字母替换为新罗马字体
10,751 阅读
3
【高数】形心计算公式讲解大全
9,117 阅读
4
Vivado-FPGA Verilog烧写固化教程
8,153 阅读
5
【概论】一阶矩、二阶矩原点矩,中心矩区别与概念
7,891 阅读
🪶微语&随笔
励志美文
我的随笔
工作办公
📡电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
⌨️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
登录
/
注册
刘航宇(共319篇)
找到
319
篇与
刘航宇
相关的结果
- 第 27 页
2021-02-14
电容、电感、电阻参数测量系统设计
摘要本文设计了一个元器件参数测量仪,可测量电阻、电容和电感参数,测量范围分别为100Ω~1MΩ、100pF~10000pF,测量精度±5%。文章详细介绍了单元电路设计、参数计算、总原理图及元器件清单,并提供了软件程序。关键词:电容, 电感, 电阻, 参数测量, 元器件目录 一、设计任务和要求 二、单元电路设计和参数计算 三、总原理图及元器件清单 四、附录 一、设计任务和要求 1、设计并制作一个元器件参数测量仪。 2、电阻阻值测量,范围:100Ω~1MΩ; 3、电容容值测量,范围:100pF~10000pF; 4、测量精度:±5% ; 5、电感参数的测量; 6、扩大量程; 7、提高测量精度; 系统设计图图片 二、单元电路设计和参数计算 1、电阻的检测单元电路设计 电阻检测图片 从而,可以计算得出电阻值的大小。 2、电容的检测单元电路设计 电容检测图片 从而,可以计算得出电容值的大小。 3、电感的检测单元电路设计 电感检测图片 从而,可以计算得出电感值的大小。 三、总原理图及元器件清单 总电路图片 实物图图片 (2)元器件清单 表1 原理图中所使用的元器件清单 元件序号 型号 数量 备注 U1 STC89C52RC 1 单片机 R3 A103J 1 排阻 R2,R3,R17,R18 10KΩ 4 电位器 X1 11.0592M 1 晶振 C3 25V,10uF 1 电解电容 C1,C2,C11 103(0.01uF) 3 瓷片电容 R1,R13,R18 10KΩ 3 电阻 J1,J2,J3,J4 4 按键 U2 1602 1 液晶 A1,A2 NE555 2 555定时器 R4 300Ω 1 电阻 R5,R6 510KΩ 2 电阻 C4,C5,C6,C7,C8,C9 104(0.1uF) 6 瓷片电容 R7,R9 100KΩ 2 电阻 C10 50V,22uF 1 电解电容 Q1,Q2,Q3 S9108(NPN型) 3 三极管 R10 2KΩ 1 电阻 R8,R11,R14 1KΩ 3 电阻 C12,C13 50V,47uF 2 电解电容 R12,R19 39KΩ 2 电阻 R15,R16 51Ω 2 电阻 C14 25V,470uF 1 电解电容 U3 NE55532 1 运放 四、附录 软件程序 //RCL测量仪程序 //初始化 #include <reg52.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define PI 3.1415926 uchar code table1[8]="Welcome! RCL detector"; uchar table2[16]="f(Hz)="; uchar table3[16]="R(Ohm)="; uchar table4[16]="C(pF)="; uchar table5[16]="L(uH)="; uchar num,a=0,th0,tl0; uint C,L; ulong f,R; sbit lcden=P2^4; //液晶使能端 sbit lcdrs=P2^5; //液晶数据命令选择端 sbit key_R=P1^5; //测量电阻按键 sbit key_C=P1^6; //测量电容按键 sbit key_L=P1^7; //测量电感按键 sbit R_out=P1^2; //测量电阻信号输入 sbit C_out=P1^3; //测量电容信号输入 sbit L_out=P1^4; //测量电感信号输入 //声明子函数 void delayms(uint xms); //延时函数 void write_com(uchar com); //液晶写命令函数 void write_data(uchar date); //液晶写数据函数 void led_init(); //液晶初始化函数 void t_init(); //定时器0初始化函数 void keyscan(); //键盘检测函数(确定被测元件为电阻、电容或电感) void display_f(ulong f); //频率显示函数 void display_R(ulong R); //电阻显示函数 void display_C(uint C); //电容显示函数 void display_L(uint L); //电感显示函数 //主函数 void main() { led_init(); t_init(); keyscan(); write_com(0x01); while(1) { display_f(f); switch(a) { case 1:R=(ulong)(5000000.0/0.6931472/f-150+0.5);display_R(R);break; case 2:C=(int)(100000000.0/153/0.6931472/f+0.5);display_C(C);break; case 3:L=(int)(1000000000000.0/0.1/PI/PI/f/f+0.5);display_L(L);break; } } } //中断函数 void T0_count() interrupt 1 { switch(a) { case 1:while(R_out); while(!R_out); TH0=0; TL0=0; while(R_out); while(!R_out); th0=TH0; tl0=TL0; TR0=0; break; case 2:while(C_out); while(!C_out); TH0=0; TL0=0; while(C_out); while(!C_out); th0=TH0; tl0=TL0; TR0=0; break; case 3:while(L_out); while(!L_out); TH0=0; TL0=0; while(L_out); while(!L_out); th0=TH0; tl0=TL0; TR0=0; break; } f=1000000.0/1.085069/(th0*256+tl0)+0.5; } //延时函数 void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } //液晶写命令函数 void write_com(uchar com) { lcdrs=0; P0=com; delayms(5); lcden=1; delayms(5); lcden=0; } //液晶写数据函数 void write_data(uchar date) { lcdrs=1; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; } //液晶初始化函数 void led_init() { lcden=0; write_com(0x38); //设置16×2显示,5×7点阵,8位数据接口 write_com(0x0c); //设置开显示,不显示光标 write_com(0x06); //写一个字符后地址指针加1 write_com(0x01); //显示清0,数据指针清0 write_com(0x80); //显示欢迎界面 for(num=0;num<8;num++) { write_data(table1[num]); delayms(5); } } //定时器0初始化函数 void t_init() { TMOD=0x01; //设置定时器0工作方式1(M1M0=0x0001) TH0=0; //装初值 TL0=0; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 } //键盘检测函数(确定被测元件为电阻、电容或电感) void keyscan() { if(key_R==0) { delayms(10); if(key_R==0) a=1; } else if(key_C==0) { delayms(10); if(key_C==0) a=2; } else if(key_L==0) { delayms(10); if(key_L==0) a=3; } else while(key_R&&key_C&&key_L); //按键按下时退出死循环 } //频率显示函数 void display_f(ulong f) { uchar count=0; ulong f0; f0=f; while(f) { f=f/10; count++; } for(num=5+count;num>5;num--) { table2[num]=f0%10+48; f0=f0/10; } write_com(0x80); for(num=0;num<6+count;num++) { write_data(table2[num]); delayms(5); } } 剩余程序付费0.5元即可阅读
嵌入式&系统
# 嵌入式
刘航宇
5年前
5
2,177
3
2021-02-13
如何判断运放是工作在线性区还是非线性区
摘要判断运放是否在线性区,主要看是否存在负反馈。有负反馈时运放在线性区,如放大电路;无反馈或正反馈时运放非线性,如比较器、振荡器。理想运放具有高增益、高输入电阻、低输出电阻等特性,实际应用中需引入负反馈以保持在线性放大状态。关键词:运放线性区, 非线性区, 负反馈, 开环增益, 理想运放一般来说, 1.有负反馈的都是在线性区。比如各种同相、反相、差分放大电路都属于这种; 2.无反馈(亦称开环),或正反馈工作在非线性区。如比较器、振荡器电路都属于这类。 另外多说一句,这二者的区别本质上是由运放的增益非常大(至少上百万)决定的。 集成运放工作于线性区时,就是处于闭环状态下,这时候运放的输出电压与输入信号电压之间存在某种特定的线性(函数)关系。 集成运放工作于非线性区时,就是处于开环状态下,这时候运放的输出电压会接近工作电源的正电压或负电压,与输入信号电压没有线性关系。 (1)有负反馈才可能工作在线性范围. (2)输出不饱和就是在线性范围. 积分电路工作在线性范围,而矩形波电路(正反馈)输出不是正饱和就是负饱和,一定是非线性的. 通常认为理想的集成运放具有下列特性: 开环电压增益 ; 差模输入电阻 ; 输出电阻 ; 共模抑制比 ; 上限截止频率 ; 差模输入电阻 ,说明输入电压没有损耗。 输出电阻 ,说明带负载能力强。 共模抑制比 ,说明抑制零点漂移能力强。 上限截止频率 ,说明对各段信号,不论是低频、中频、高频都能有效放大。 根据理想化条件,理想运放在线性区的特点,当集成运算放大器线性工作时,应满足 ,由于输出电压 为有限值, ,所以输入差模电压 必为0,即 由此得到 ,所以同相输入与反相输入端电压相等。 又根据理想条件集成运放的差模输入电阻趋于无穷大,所以流进运放的两输入端电流 ,后面的 和 都用 表示,且。 通过以上分析,我们可以得到理想运放的两个重要的特点。一个是虚短,另一个虚断。 虚短:由于两输入端之间的电压差为0,相当于两输入端短路,但又不是真正的短路,故称为“虚短”。虚短实际上指的是两输入端的电压相同,也就是 。 虚断:由于 ,相当于两输入端开路,但又不是真正的断开,故称为“虚断”,虚断表明两输入端没有电流。 显然,理想运放是不存在的,但只要实际运放的性能较好,其应用效果与理想运放很接近,就可以把它近似看成理想运放。 下面,我们理想运放的基本应用。集成运放的两种基本电路,一种是反相输入放大电路,一种是同相输入放大电路。要使运放工作在线性放大状态,必须引入负反馈。 因为运放的开环增益很大,开环时很小的输入电压,不引入负反馈,运放本身的失调就会使它超出线性范围。
嵌入式&系统
刘航宇
5年前
0
7,013
14
2021-02-13
信号与系统公式大全-傅里叶、拉普拉斯、z变化、卷积
摘要本文提供信号与系统公式大全,涵盖傅里叶、拉普拉斯、z变换、卷积等关键公式。关键词:信号与系统, 傅里叶变换, 拉普拉斯变换, Z变换, 卷积图片 图片 图片 图片 图片 图片
通信&信息处理
# 信号处理
刘航宇
5年前
0
710
2
2021-02-13
VHDL语言38译码器
摘要本文介绍了VHDL语言实现的38译码器元件,包括端口定义和内部逻辑。该译码器根据输入信号a、b、c和g1、g2、g3的状态,输出8位输出信号y。关键词:VHDL, 38译码器, 译码器设计, 信号处理, RTL视图元件查看端口方法Tool>>Netlist Viewers>>RTL Viewers library ieee; use ieee.std_logic_1164.all; entity decoder38 is port (a,b,c,g1,g2,g3:in std_logic; y:out std_logic_vector(7 downto 0)); end decoder38; architecture rtl of decoder38 is signal cba: std_logic_vector(2 downto 0); begin cba<=c&b&a; process(cba,g1,g2,g3) begin if (g1='1' and g2='0' and g3='0') then case cba is when "000"=>y<="11111110"; when "001"=>y<="11111101"; when "010"=>y<="11111011"; when "011"=>y<="11110111" ; when "100"=>y<="11101111" ; when "101"=>y<="11011111" ; when "110"=>y<="10111111" ; when "111"=>y<="01111111"; when others=>y<="XXXXXXXX"; end case; else y<="11111111"; end if; end process; end rtl;实验现象图片
嵌入式&系统
刘航宇
5年前
0
465
1
2021-02-13
时域频域对应关系
摘要本文阐述了时域和频域之间的对应关系,包括离散信号与周期频谱、连续信号与非周期频谱、周期信号与离散频谱等,并以抽样为例说明了时域连续信号在频域的周期延拓现象。关键词:时域频域对应关系, 离散信号, 频谱周期, 抽样, 频谱延拓1、时域离散,频域周期 离散信号相当于连续信号与一个冲激序列的乘积, 到频谱则是卷积, 而冲激序列的FT也是冲激序列, 因此原非周期频谱通过卷积形成了周期性的频谱 2、时域连续,频域非周期 3、时域周期,频域离散 4、时域非周期,频域连续 5、时域脉冲,频域直流 6、时域直流,频域脉冲 例如 判断:在时域对连续信号进行抽样,在频域中,所得频谱是原信号频谱的周期延拓 答:抽样,等于把连续信号采样为离散的序列了,所以频域就周期化
通信&信息处理
刘航宇
5年前
1
945
2
2021-02-01
【励志视频】人为什么要活着?请不负此生!
摘要本文通过励志视频探讨人生意义,鼓励观众珍惜生命,不负此生。关键词:励志视频, 人生意义, 不负此生, 人生哲学, 励志请不负此生!
励志美文
刘航宇
5年前
0
305
2
2021-01-28
KMP遍历算法
摘要KMP算法通过next函数利用匹配失败信息,减少字符串匹配次数,时间复杂度O(m+n)。与朴素算法相比,KMP算法优化了重复字符匹配,提高了匹配效率。关键词:KMP算法, 字符串匹配, 时间复杂度, next函数, 主串KMP算法是一种改进的字符串匹配算法,关键是利用匹配后失败的信息,尽量减少模式串(W)与主串(T)的匹配次数以达到快速匹配的目的。具体实现就是实现一个next() 函数,函数本身包含了模式串的局部匹配信息。时间复杂度 O(m+n)。 如果考虑一般的方法,我们可以将T[0]和W[0]进行匹配,如果相同则匹配下一个字符,直到出现不相同的情况,此时我们会丢弃前面的匹配信息,然后把T[1]跟W[0]匹配,循环进行,直到主串结束,或者出现匹配成功的情况。这种丢弃前面的匹配信息的方法,时间复杂度为O(m*n)。 学习代码: #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; //get_next函数 vector<int> get_next(string b) //用vector来保存子串b的next数组 { vector<int> result; //添加元素并且默认赋值为0,建立一个空的容器就 int i, j; i = 0; j = -1; result.push_back(-1); //将容器首元素赋值,作为标识使用 while (i < b.size() - 1) { if (j == -1 || b[i] == b[j]) //b[i]表示后缀的单个字符,b[j]表示前缀的单个字符 { ++i; ++j; //这里的其实是优化重复的字符 //可以直接用result.push_back(j);代替下面的判断语句 if (b[i] != b[j]) result.push_back(j); else if (i == 1) result.push_back(j); else result.push_back(result[j]); } else j = result[j]; //若字符不同,前缀字符回溯 } return result; } //KMP函数 int KMP(string a, string b) { vector<int> next = get_next(b); //调用get_text函数 int i = 0; int j = 0; //注意size函数返回的类型是string::size_type是无符号数 //若i<主串的长度且j<子串的长度时,循环继续 while (i < (int)a.size() && j <(int)b.size()) { if (j == -1 || a[i] == b[j]) //两字母相等则继续,相对于朴素算法增加了 { ++i; ++j; } else { j = next[j]; //若不相等,j退回合适的位置 } } if (j == b.size()) { //这里返回的是匹配字符开始的下标位 return i - j; } else { return -1; } } int main() { string str; cout << "enter the string:"; cin >> str; string pattern; cout << "enter the pattern:"; cin >> pattern; int result = KMP(str, pattern); cout << result << endl; }
编程&脚本笔记
刘航宇
5年前
0
361
0
上一页
1
...
26
27