正弦波发生器如何实现?
文章插图
具体回答如图:正弦波发生电路能产生正弦波输出,它是在放大电路的基础上加上正反馈而形成的,它是各类波形发生器和信号源的核心电路 。为了产生正弦波,必须在放大电路里加入正反馈 , 因此放大电路和正反馈网络是振荡电路的最主要部分 。但是,这样两部分构成的振荡器一般得不到正弦波,这是由于很难控制正反馈的量 。如果正反馈量大,则增幅,输出幅度越来越大,最后由三极管的非线性限幅,这必然产生非线性失真 。反之,如果正反馈量不足,则减幅 , 可能停振,为此振荡电路要有一个稳幅电路 。扩展资料:产生正弦波的条件与负反馈放大电路产生自激的条件十分类似 。只不过负反馈放大电路中是由于信号频率达到了通频带的两端,产生了足够的附加相移 , 从而使负反馈变成了正反馈 。在振荡电路中加的就是正反?。?振荡建立后只是一种频率的信号,无所谓附加相移 。振荡器在刚刚起振时,为了克服电路中的损耗,需要正反馈强一些 , 即要求 。既然,起振后就要产生增幅振荡,需要靠三极管大信号运用时的非线性特性去限制幅度的增加,这样电路必然产生失真 。这就要靠选频网络的作用,选出失真波形的基波分量作为输出信号 , 以获得正弦波输出 。也可以在反馈网络中加入非线性稳幅环节,用以调节放大电路的增益,从而达到稳幅的目的 。参考资料来源:百度百科--正弦波发生电路
RC正弦波信号发生器你好 。一.信号发生器电路的组成有四部分:1.放大电路(图中集成运放) 。2.正反?。–1,R1,C3) 。3.选频网络(C1,R1,C2,R2).4.负反?。≧6,R8,VD1,VD2)
二:放大倍数A=1+(R8//rd+R6)/R7,其中rd是二极管导通内阻 。(两个二极管正反相对放置是为了输出电压正负半周各自工作,截止时可认为内阻无穷大,故公式中不出现 。)反馈系数F=1/3,那么平衡时AF=1,按照二极管正向特性曲线,电流电压越大,rd越小 , 那么就会使A=3.达到正弦波振荡的平衡条件 , 达到稳幅的效果 。
三:用示波器测量信号发生器的输出信号的频率 , 一端接Vo端,一端接地 。
四:由振荡频率fo=1/(2πRC) , R=R1 , C=C1,可算出f0=159Hz,用交流毫伏表测量输出信号的有效值较准确 。
五:集成运放组成放大电路,放大输入信号 。运放是一个开环放大倍数极大的放大器 , 两个输入端“+”、“-”之间只要有微小的电压差异,就会使输出端截止或者饱和 。而输入端的输入电阻非常大,可以认为不需要输出电流 。
正弦波发生器原理?前级是个典型的有源二阶带通滤波器电路 , 后级是个比较器电路,然后通过R1支路构成大环路正反馈 , 从而构成个方波(后级)正弦波振荡器输出电路(前级);
比较器输出方波信号,经过带通滤波器后得到基波信号输出,基波就是正弦波了
51单片机信号发生器的正弦波程序首先,我要声明一点,单片机的浮点数处理能力非常弱的,你这个程序,基础可以用数组查表的方法来做,当然,你这么错不是不行,初学者可以用来做实验,但是高手可不会这么错 。
言归正传 , 我来给你讲解一下这个do里面的思路 。我们分步来看,先看sin(x),从 -3.1415---+3.1415
sin(x)的数值是多少?答案是0到-1再到0再到1再到0,这么个过程 , 这是高中的数学知识,如果你不明白,我就没有办法了 。
搞明白了sin(x)的变化范围,我们就不难明白,如果不加以限制的,直接用 255*sin(x),那么,这个结果就会出现负数 , 变化范围是 0----(-255)---(0)----(255)---0,因为你需要把这个数值赋值给P1口,那么,你知道如果把一个负数赋值给 P1口是什么结果吗?因为负数在单片机里是用补码表示的,所以,把一个负数表示成无符号的数,它是很大的,所以P1口就会乱 。
所以,为了避免负数,就要把sin(x)里产生的负数抵消去,怎么抵消?我们知道,sin(x)最小值是 -1 , 所以,只要 (1 + sin(x)),那么 , 这个结果就永远不可能小于0,这个的变化范围是
1----0----1----2----1
最大的数值是2 , 最小的是0
然后乘以 255再给P1口送去,我们又知道,P1口最大只能到 255,而你的式子(1 + sin(x))
最大是2,(1 + sin(x))*255最大得到的是 510,那为了不失真,所以,要把(1 + sin(x))*255再除以一个2,就得到你上面的结果了 。
如果你是用的DA转换器,通过示波器,你可以看到一个如下公式的波形:
f = 2.5*sin(2*3.1415926*f) + 2.5
这样的函数波形 。
求一个正弦波发生电路,越简单越好具体的参数取值如图所示,这是一个最简单的正弦波发生电路 。基本文氏电桥反馈型振荡电路如图所示,它由放大器即运算放大器与具有频率选择性的反馈网络构成 , 施加正反馈就产生振荡 。运算放大器施加负反馈就为放大电路的工作方式,施加正反馈就为振荡电路的工作方式 。图中电路既应用了经由R3和R4的负反馈,也应用了经由串并联RC网络的正反馈 。电路的特性行为取决于是正反馈还是负反馈占优势 。这个电路有两部分组成,即方框里的放大电路和由R1、R2、C1和C2组成的选频网络 。正弦波发生电路:不需要外加激励信号,电路就能产生输出信号的电路称为信号发生电路或波形振荡器 。其中能产生正弦波输出信号的电路称为正弦波发生电路或正弦振荡器 。
有没有人用FPGA产生正弦波?这样的verilog代码应该怎样写?具体的步骤是什么呀?最简单常用的方法是查找表法 , 例化一块ram,存储正弦波的幅度值 , 只要循环地依次将这些值读出来就可以了 。要求不高的情况下可以这么用 , 因为这样会有周期性的误差,使频谱产生杂散 。
用verilog在fpga上实现: 10k~100khz正弦波,三角波,锯齿波波形发生器(基于d楼上太犀利了 , 哈哈
你的第一二三条可以合成一条,直接在modesim里面写代码,testbench,然后仿真,当然也可以直接用quartus II里面的仿真器仿真 , 如果信号较少的话也很方便的 。
四五六七条可以合成一条,直接在quartus II里面的全编译选项即可
编译完成后直接下载调试了 。
还有既然开发FPGA,肯定要选择芯片的型号,具体的型号要看你有哪种FPGA的实体了,芯片上都有标示的 。
4PSK的信号发生器的Verilog程序先看看采用查表法产生正弦波信号的描述(书上就有,比较简单),然后弄清楚这种方法的缺陷 , 再看一下DDS产生正弦波信号的描述 , 对比一下就清楚了 。至于MATLAB , 不见得是必须的,只是在存放正弦波信号的ROM比较大的时候,用MTLAB产生波形数据比较方便而已 。当只需要了解原理的时候,波形精度要求不高,做个简单的表 , 手工写写就可以 。
急求课程设计 。基于FPGA的正弦波,三角波 , 方波的信号发生器verilog或者VHDL源代码基于FPGA的正弦波,三角波,方波的信号发生器verilog或者VHDL源代码了解分析的
方波正弦波函数发生器??/,帮你做什么,自己动一脑,这东西不难的,学会有用的 。自己想办法吧 。
设计一个函数信号发生器~要求输出波形为正弦波,方波,三角波,频率1KHZ,幅值1v 。1、正弦波发生器2、方波发生器3、积分器方波输出接积分器可得到三角波 。下图左侧为方波发生器,右侧为积分器
方波信号发生器 正弦波逆变器工作原理1、方波信号发生器:由集成运放构成的方波发生器,包括迟滞比较电路和RC积分电路两大部分 。因为矩形波电压只有两种状态 , 不是高电平 , 就是低电平,所以电压比较器是它的重要组成部分;因为产生振荡,就是要求输出的两种状态自动地相互转换,所以电路中必须引入反?。灰蛭涑鲎刺Π匆欢ǖ氖奔浼涓艚惶姹浠? ,即产生周期性变化,所以电路中要有延迟环节来确定每种状态维持的时间 , 即RC 积分电路 。
2、正弦波逆变器工作原理:
直流电压分两路 一给前级IC供电产生一个KHZ级的控制信号,一路到前级功率管 。由控制信号推动功率管不断开关使高频变压器初级产生低压的高频交流电(此时的交流电虽然电压低,但是频率相当高,目的就是为了能让变压器后级产生一个高的电压,前级的频率和后级输出的电压成正比 , 当然也要在功率管所能承受的频率范围) 通过高频变压器输出高频交流电再经过快速恢复二极管全桥整流输出一个高频的几百V直流电到后级功率管 ,然后再由后级IC产生50HZ左右的控制信号来控制后级的功率管工作然后输出220V50HZ的交流电 。当然一个完整的逆变器还需要一些保护电路比如过载保护 温度保护 高低输入电压保护 和滤波电路 高频电路里的滤波也相当重要 应为高频容易产生一些干扰和寄生耦合 所以需要滤波电路来滤除这些因素的影响来增加电路的稳定性 。
正弦波信号发生器与方波信号发生器中运算放大器工作情况有什么不同正弦波信号发生器中的运算放大器工作在线性状态中,方波信号发生器中的运算放大器工作在连续的正向饱和状态与负向饱和状态中 。
用运算放大器设计一个方波、正弦波、三角波的信号发生器震荡用文氏桥电路,可以产生正弦波 , 再通过比较器(还是运放)这里是过零比较,也可以是上下门限对称的施密特触发器,得到方波,(上下门限不对称讲生成矩形波),在对方波积分(电容和运放组成积分器)可得到三角波(之前如果生成矩形波的话 , 这一步将得到锯齿波) 。运放选型上要注意运放带宽问题,需要考虑信号发生器所需要发生的频率
正弦信号发生器你这个是用数字电路实现打得吧 , 用延时器或者单片机编程可以实现
正弦信号发生器的设计我们去年好像做过 , , 有点难度,现在手头没有详细的资料了 , 见谅
调节用电位器可以实现,但是有不小的干扰和误差
程控我记得好像可以用ad603实现,但是那个芯片有dsp和贴片两种封装,前者更贵跟好用些,很容易烧毁 。
同学有用657搭建的 , 纯硬件,最好得用贴片 。
建议你去看看前两年的电赛题吧,会有帮助,但是注意不少论文不一定是他们真的做出来的,只是论文而已 。。。。。
正弦波信号发生器范围~20kHz而步进调整的步长为5HZ , 这很难实现,如果范围达200kHz,步长还要任意设置,这更不可能了 。
正弦信号发生器的主要性能指标有哪些?各自具有什么含义?正弦信号发生器的主要性能指标及各自具有的含义如下:(1)频率范围指信号发生器所产生的信号频率范围 。(6)输出阻抗信号发生器的输出阻抗视其类型不同而异 。低频信号发生器电压输出端的输出阻抗一般600Ω (或1kΩ),功率输出端依输出匹配变压器的设计而定,通常50Ω、75Ω、150Ω、600Ω和5kΩ等档 。高频信号发生器一般仅有50Ω或75Ω档 。(7)输出电平输出电平指的是输出信号幅度的有效范围 。(8)调制特性当调制信号由信号发生器内部产生时,称为内调制 , 当调制信号由外部加到信号发生器进行调制时,称为外调制 。
单片机C语言版正弦波信号发生器怎么做?#include
//unsigned char TIME0_H=0xec,TIME0_L=0x78;//定时器0的初值设置;全局变量
#include
#include
void main()
{
TMOD=0X01;
TH0=0xff;
TL0=0xd9;
IT0=1;//设置中断触发方式,下降沿
EA=1;
EX0=1;
ET0=1;
IP=0X01;//键盘中断级别高
TR0=1;
while(1)
{
// square();
;
}
}
#ifndef __0832_h__
#define __0832_h__
//#define INPUT XBYTE[0xbfff]//即cs 与xfer 轮流低电平 。
//#define DACRXBYTE[0x7fff]//单通道输出,单缓冲就行了 。
unsigned char i,sqar_num=128; //最大值100 , 默认值50
unsigned char cho=0;//0:正弦波 。1:方波 。2:三角波 。3:锯齿波 。
unsigned char num=0;
unsigned char TIME0_H=0xff,TIME0_L=0xd9;//定时器0的初值设置;全局变量.对应正弦波,锯齿波50HZ
sbit chg=P1^0;//三角波100Hz.
sbit freq_u=P1^1;
sbit freq_d=P1^2;
sbit duty_u=P1^3;
sbit duty_d=P1^4;
sbit cs=P3^7;
bit flag=0;
unsigned int FREQ=50;//初始化频率,50HZ
//调节部分——频率
void freq_ud(void)
{
unsigned int temp;
if(freq_d==0)
{FREQ--;}
else if(freq_u==0)
{ FREQ++;}
if(cho==1|cho==3) //锯齿波256次中断一周期 , 特殊处理下 。否则他的频率是100(+\-)n*2Hz.
{
temp=0xffff-3906/FREQ;//方波,三角波默认为100hz,切换后频率也为50HZ 65336-10^6/(256*FREQ)
TIME0_H=temp/256;
TIME0_L=temp%256;
}
else if(cho==0|cho==3){//正弦波 三角波默认周期50hz65536-10^6//(512*FREQ)
temp=0xffff-1953/FREQ;
TIME0_H=temp/256;
TIME0_L=temp%256;
}
}
//调节部分——方波的占空比
void duty_ud(void)//方波也采用512次中断构成一个周期 。
{
if(duty_d==0&sqar_num>0)
sqar_num--;
else if(duty_u==0&sqar_num<255)
sqar_num++;
}
//波形发生函数
void sint(void)
{
if(!flag)
{
cs=0;P2=sin_num[num++];cs=1;
if(num==0){num=255;flag=1;}
}
else if(flag)
{
cs=0;P2=sin_num[num--];cs=1;
if(num==255){num=0;flag=0;}
}
}
void square(void)
{
if(i++<sqar_num){cs=0;P2=0XFF;cs=1;}
else{cs=0;P2=0X00;cs=1;}
}
void triangle(void)
{
cs=0;P2=num++;cs=1;
}
void stw(void)
{
if(~flag)
{
cs=0;P2=num++;cs=1;
if(num==0){num=255;flag=1;}
}
else if(flag)
{
cs=0;P2=num--;cs=1;
if(num==255){num=1;flag=0;}
}
}
//按键中断处理程序 。
void it0() interrupt 0
{
if(chg==0) { if(++cho==4) {cho=0;num=0;} }//num=0;所有数据从新开始,保证波形的完整性
else if(freq_u==0|freq_d==0)
{freq_ud();}
else if (cho==1&(duty_d==0|duty_u==0))
{duty_ud();}
else ;
}
//定时器中断处理程序 。
void intt0() interrupt 1
{
//TH0=0x00;TL0=0x00;sinx();
switch(cho)
{
case 0:{TH0=TIME0_H;TL0=TIME0_L;sint();break;}//正弦波//每半周期256取样 。
case 1:{TH0=TIME0_H;TL0=TIME0_L;square();break;} //方波//为了提高方波的最高频率,只有牺牲占空比的最小可调值 。分100份 每次1% 。
case 2:{TH0=TIME0_H;TL0=TIME0_L;triangle();break;} //三角波
case 3:{TH0=TIME0_H;TL0=TIME0_L;stw();break;} //锯齿波
default: ;
}
}
#endif
//正弦表;每半个周期256个取值,最大限度保证波形不失真 。
//各个值通过MATLAB算出,并四设五如取整 。具体程序如下
#ifndef __sinx_h__
#define __sinx_h__
unsigned char code sin_num[]={
0,0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2,
2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,
22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37,
38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,
57, 59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,
80, 81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101,102,
104, 106, 107, 109, 110, 112,113, 115, 116, 118, 120, 121, 123, 124, 126, 128,
129, 131,132, 134, 135,137,139, 140, 142, 143, 145, 146, 148,149, 151, 153,
154, 156, 157, 159, 160, 162, 163, 165,166, 168, 169, 171, 172, 174, 175, 177,
178, 180, 181,182, 184, 185, 187, 188, 189, 191, 192, 194, 195, 196, 198, 199,
200, 201, 203, 204, 205, 206, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218,
219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 230, 231, 232, 233, 234,
235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 243, 243, 244, 245, 245, 246,
246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251,251, 252, 252, 253, 253,
253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255,255, 255, 255, 255, 255
};
#endif
//MATLAB程序:
//x=linspace(-pi/2,pi/2,255);%如果过采用1位采用,很多值是重的 。虽然实际中并不会 。
//y=(sin(x)+1)/2.0*255;
//%uint32(y)%强制类型转换 。
//%fprintf('%.f\n',uint32(y));%控制输出类型
//round(y)%四舍五入函数
正弦波信号发生器设计就是DDS是吧,你输出的正弦信号的频率显然正比于DAC的数据输出速度,比如你让DAC每秒输出1000个点 , 而你的正弦信号由100个点构成,那就相当于每秒输出了10个正弦信号,频率为10Hz,所以要改变正弦信号的频率只要改变DAC的输出速度就可以了
函数信号发生器怎么输出0到5V的正弦波信号,具体如何调节?
文章插图
信号发生器输出接入用示波器监看波形,波形选择正弦波,选择合适的频率,调整输出直流电平至2.5V , 调整输出幅度Vp-p(峰峰值)至5V,微调两个旋钮,使Vp-p是0-5V 。产生某些特定的周期性时间函数波形(正弦波、方波、三角波、锯齿波和脉冲波等)信号,频率范围可从几个微赫到几十兆赫 。扩展资料:信号发生器一般区分为函数信号发生器及任意波形发生器,而函数波形发生器在设计上又区分出模拟及数字合成式 。众所周知,数字合成式函数信号源无论就频率、幅度乃至信号的信噪比(S/N)均优于模拟 , 其锁相环( PLL)的设计让输出信号不仅是频率精准 。而且相位抖动及频率漂移均能达到相当稳定的状态,但毕竟是数字式信号源 , 数字电路与模拟电路之间的干扰 , 始终难以有效克服,也造成在小信号的输出上不如模拟式的函数信号发生器 。参考资料来源:百度百科——函数信号发生器
频率可调的移相式正弦波发生器电路设计 如图,可调频率怎么计算的 , 最好要有计算表达式电路不太懂
如何制作0—100Hz(频率连续可调)正弦信号发生器(附上电路图)这是一个标准的直接数字频率合成方案:
时钟脉冲发生器→地址扫描计数器→正弦函数查表(EPROM)→D/A变换→滤波器→输出0——100Hz标准正弦波
请问怎么用运算放大器搭一个正弦波发生器,要求频率、幅值可调?谢谢用运算放大器搭成文氏电桥振荡器正弦波发生器 。这个文氏电桥振荡器的振荡频率约是1600Hz,用一个10k双联电位器使两个电阻R同步变化,就能调节频率 。
有一个固定频率方波信号发生器,怎么样才能把它变成可变频率的正弦波发生器??坦白说,做了这么多年的电子,还头一次听说只有固定频率的方波发生器 。
anyway,也许这只是一道常识基础题,那么答案是这样的:
方波信号可以看做是无限个不同频率的正弦波的叠加,你可以通过一个中心频率可变的点通(带通)滤波器实现 。而这个中心频率决定于构成滤波器的RC(或LC)的值 。
设计一个能产生三种波形(方波,正弦波,三角波)且频率步进可调的信号发生器 。#include#includevoid Delayus(unsigned int t);void INT0_isr(void);void Init_PORT(void);void INT0_init(void);unsigned int select_num,num;unsigned int pl,zkb;const unsigned char sin_tab[]={ 128,130,132,135,137,139,141,143,146,148, 150,152,154,157,159,161,163,165,167,169, 171,174,176,178,180,182,184,186,188,190, 191,193,195,197,199,201,203,204,206,208, 210,211,213,215,216,218,219,221,222,224, 225,227,228,229,231,232,233,235,236,237, 238,239,240,241,242,243,244,245,246,247, 247,248,249,249,250,251,251,252,252,253, 253,253,254,254,254,255,255,255,255,255, 255,255,255,255,255,255,254,254,254,253, 253,253,252,252,251,251,250,249,249,248, 247,247,246,245,244,243,242,241,240,239, 238,237,236,235,233,232,231,229,228,227, 225,224,222,221,219,218,216,215,213,211, 210,208,206,204,203,201,199,197,195,193, 192,190,188,186,184,182,180,178,176,174, 171,169,167,165,163,161,159,157,154,152, 150,148,146,143,141,139,137,135,132,130, 128,126,124,121,119,117,115,113,110,108, 106,104,102, 99, 97, 95, 93, 91, 89, 87, 85,82,80,78,76,74,72,70,68,66, 65,63,61,59,57,55,53,52,50,48, 46,45,43,41,40,38,37,35,34,32, 31,29,28,27,25,24,23,21,20,19, 18,17,16,15,14,13,12,11,10,9, 9,8,7,7,6,5,5,4,4,3, 3,3,2,2,2,1,1,1,1,1, 1,1,1,1,1,1,2,2,2,3, 3,3,4,4,5,5,6,7,7,8, 9,9,10,11,12,13,14,15,16,17, 18,19,20,21,23,24,25,27,28,29, 31,32,34,35,37,38,40,41,43,45, 46,48,50,52,53,55,57,59,61,63, 64,66,68,70,72,74,76,78,80,82, 85,87,89,91,93,95,97,99,102,104, 106,108,110,113,115,117,119,121,124,126};const unsigned char table[]={0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F/*9*/};void Delayus(unsigned int t){WDR();dot--;while(t>1);WDR();}void Init_PORT(void){ PORTA = 0XFF; DDRA= 0X00; PORTB = 0X00; DDRB= 0XFF; PORTC = 0X00; DDRC= 0XFF; PORTD = 0XF4;//0000 0100 DDRD= 0XFB;}void INT0_init(void){ SREG|=BIT(7);MCUCR|=0x02;GICR|=BIT(6);GIFR|=BIT(6);}#pragma interrupt_handler INT0_isr:2void INT0_isr(void){ PORTB|=BIT(0); Delayus(100); num=PINA&0X1F; if(num==0x1E) {select_num++;//0001 1110if(select_num>=4)select_num=0;} if(num==0x1C)pl++; if(num==0x1B)pl--; if(num==0x17)zkb++; if(num==0x0F)zkb--;}void main(void){ unsigned int ii,jj,nn,mm,kk=100; Init_PORT(); INT0_init(); while(1) {if(select_num==0){for(ii=0;ii<360;ii++){PORTD&=~BIT(0);PORTC=sin_tab[ii];Delayus(kk);PORTD|=BIT(0);}}if(select_num==1){jj=180;//方波宽度可修改PORTD&=~BIT(0);PORTC=0XFF;PORTD|=BIT(0);doDelayus(kk);while(--jj);jj=180;PORTD&=~BIT(0);PORTC=0X00;PORTD|=BIT(0);doDelayus(kk);while(--jj);}if(select_num==2){for(nn=0;nn<255;nn++)//产生上升波{PORTD&=~BIT(0);PORTC=nn;//A口输出上升波PORTD|=BIT(0);Delayus(kk);}for(nn=255;nn>0;nn--)//产生下降波{PORTD&=~BIT(0);PORTC=nn;//A口输出下降波PORTD|=BIT(0);Delayus(kk);//延时}}if(select_num==3){if(mm==0)mm=256;PORTD&=~BIT(0);PORTC=mm--;PORTD|=BIT(0);Delayus(kk);} }}
单片机C语言版信号发生器单片机信号发生器,一般是通过控制单片机的IO的高低电平来实现的 , 具体为
1,可以通过先配置一个管脚为输出,然后给这个管脚写0 , 输出就为低电平,然后写1,这个管脚就输出为高电平 。如果你的单片机是3.3v供电的话,那么高电平一般为3.3V,低电平一般为0v 。
2 , 如果要产生一个方波的话,需要先输出1,然后延迟一段时间,然后再输出0,然后再延迟一段时间,然后输出1.... 要如此反复的话,可以用while(1), 然后在while(1)里面写入你的置高,延迟 , 置低的代码 , 具体伪代码可以为
配置对应输出管脚为输出;//因为管脚可以配置为输出和输入 , 所以需要先配置为输出
while(1)
{
对对应输出管脚置高;
sleep(半个周期的时间);
对对应输出管脚置低;
sleep(半个周期的时间);
}
3, 如果你牵涉到高级应用的话,比如要输出一个正弦波 , 那么需要外加信号产生芯片,比如DDS芯片 。
4,如果还需要更加复杂的信号,任意波形的 , 可以用一个片内DA按照你的意思输出对应的电平,或者片外DA来输出 。
怎么用单片机做一个信号发生器?如果要求频率不是很高 , 可以采用PWM方式,优点是无需另外加DA,且输出分辨率可灵活调整 。考虑到单片机的运算能力不强 , 你可以用EXCEL编制一个正弦信号在一个周期内的等间隔幅值表,比如说,将一个周期的正弦信号分为64个点,信号的峰值为1000,初始相位为0°,那么 , 这个表格的第一个点是0 , 第n点为1000*sin(2πn/64),用EXCEL将64个点的幅值计算完毕,按照需要的格式编制为编程语言能够接受的表格 。利用单片机的一个定时器 , 定时器的溢出值设置为1000,溢出时,某个IO口输出低电平 , 再用一个寄存器存储输出点序号,序号为n时,根据输出点序号通过查表获取1000*sin(2πn/64)的数值,将定时器的计数值与1000*sin(2πn/64)比较,相等时 , IO口输出高电平 。不断循环执行上述程序,IO将输出占空比与正弦信号幅值成正比的方波信号,这就是常说的正弦调制PWM信号 。设计一个增益可调的有源低通滤波器,PWM信号经过低通滤波器后,输出就是正弦波,调节低通滤波器的增益,即可改变正弦信号的幅值 。当然,在设置PWM占空比时,将查表结果先乘以一个设定数值(一般是0~1的小数),也可以调节输出幅值 。为了简化运算,可以是先乘以一个整数M,再除以N(N为128、256等2的幂的数值) , M取值范围为0~N , 因为这种除法可通过移位进行,程序简单,且运算速度快 。
C语言怎么编写正弦波
文章插图
源代码如下:#include#include#define EX 0.000001#define PI 3.14159265int main(){double x=0.0, temp=1.0, sin=0.0;int i;printf("Please input a degree:");scanf("%lf",&x);x=x*PI/180;temp=x;i=0 ;while ( fabs(temp) >EX ) ...{sin += temp;i += 2;temp = (-1) * temp*x*x/( (i+1)*(i) );}printf("sin(%lf) = %lf ",x,sin);printf("The number is %d ",i);return 0;}扩展资料C语言编写一个程序输出一个正方形的源代码如下:#include int main(){int i,j,n;scanf("%d",&n);for(i=0;iprintf("*");else printf(" "); }printf("\n");}return 0; }
单片机实现正弦波的C程序我这是在arm板上实现的,你看看对你有用没
*****************************画正弦波************************/
void sinmain(void)
{
unsigned int x,y;
//double offset=0;//x坐标偏移量
//for(;;)
{
for(x=320;x>0;x--)
{//画正弦波
y=(int)(100*sin(((double)x)/20.0));//+offset
PutPixel (y+120, x,0x07e0); Delay(10);
}
/*offset+=1;
if(offset>=2*3.14)
offset=0;*/
Delay(100);
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) );
}
}
multisim里信号发生器使用问题
文章插图
multisim中,函数发生器与待测设备连接时要注意以下情况:函数发生器有三个连接端子,+连接端、-连接端,中间为Common端子 。当使用+和Common端子时,输出信号为正极性信号;当使用-和Common端子时 , 输出信号为负极性信号;当使用+和-端子时输出信号等于信号发生器的有效值的两倍 。采用集成运放和分立元件相结合的方式 , 利用迟滞比较器电路产生方波信号,以及充分利用差分电路进行电路转换,从而设计出一个能变换出三角波、正弦波、方波的简易信号发生器 。通过对电路分析,确定了元件的参数,并利用 Multisim 软件仿真电路的理想输出结果,克服了设计低频信号发生器电路方面存在的技术难题,使得设计的低频信号发生器结构简单 , 实现方便 。扩展资料Multisim界面由多个区域构成:菜单栏 , 各种工具栏,电路输入窗口,状态条,列表框等 。通过对各部分的操作可以实现电路图的输入、编辑,并根据需要对电路进行相应的观测和分析 。用户可以通过菜单或工具栏改变主窗口的视图内容 。通用模拟式函数信号发生器的结构,是以三角波产生电路为基础经二极管所构成的正弦波整型电路产生正弦波,同时经由比较器的比较产生方波 。如果以恒流源对电容充电,即可产生正斜率的斜波 。同理,右以恒流源将储存在电容上的电荷放电即产生负斜率的斜波 。参考资料:百度百科-Multisim参考资料:百度百科-函数信号发生器
基于Multisim的正弦波信号发生器自己找一个正弦波信号发生器电路,然后用MULTISIM画一下~
multisim中函数信号发生器怎么接
文章插图
若单端输出,即中间端口接地,“+”和“-”两端分别输出信号的幅度(峰值)即是函发面板的设置值,但相位相反(即相差π) 。若由“+”和“-”两端输出(即“-”或“+”一端接地 , 另一端输出),则输出信号的幅度(峰值)是函发面板的设置值2倍 。信号发生器的正输入端接C5输入口,负输入端接GND,示波器A相正输入接信号发生器输入端,示波器B相输入接U3输出口,示波器两个负是入口接GND 。扩展资料Multism的上方工具栏最后一行可找到各类元器件,如电阻、放大器、电源等,右边工具栏可找到测量分析仪器,如万用表、示波器、函数信号发生器等 。Multisim为用户提供了类型丰富的虚拟仪器,可以从Design工具栏®Instruments工具栏 , 或用菜单命令(Simulation/ instrument)选用这11种仪表 , 如下图所示 。在选用后,各种虚拟仪表都以面板的方式显示在电路中 。参考资料来源:百度百科-multisim
multisim里面的音频信号发生器在哪函数发生器或者交流电压源
设计一个正弦波信号发生器 , 再用单片机搭建一个系统,测量该信号不是吧?
信号发生器实验室都有,我也不会做~~~
系统就不用搭建了,一般的开发板都能实现这功能
下面是基于单片机的(不晓得你要什么类型的,下面的是AT89S52)程序,不过我的开发板是12M的晶振,最大只能测量500Khz,你也可以用几个分频器,那可以扩大量程,数电上有讲 , 就不多说了 , 貌似你用大的晶振也行(这句不清楚)
#include
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
void main(void)
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 0
{
T0count++;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
timecount++;
if(timecount==250)
{
TR0=0;
timecount=0;
flag=1;
}
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
还是好好学习哈,能过关不一定能找到工作
基于单片机的正弦信号发生器?。∏敫呤指阕柿希?/h3>10KHz正弦波,要考虑D/A采样精度(量化位数),这样确定处理速度 , 选用速度快的片子 。
峰峰值0~5V的话,直流分量怎么会低于0呢???除非峰峰值-5~+5V
频率稳定度就要看选的时钟晶振的稳定度了 。
输出相差步进90度,那么你的每个周期采样数必须是4的倍数了 。
输出提高到36V那你就要加放大器了 。
求基于单片机50hz正弦波信号发生器原理设计1,这个线路很容易实现
2,使用单片机发送一个50Hz的方波,然後再做一个50Hz含3次谐波的陷波的低通滤波器输出就是正弦波了 。
基于单片机的信号发生器的设计,输出方波,正弦波,三角波,锯齿波,频率可调 。原理是如何哒?怎么取点【正弦波发生器】51单片机硬件有PCA模块的,或者是PWM发生器的型号 , 也有没有的 , 你采用的芯片有没有这些硬件?
正弦波:
如果有,以PCA模块为例,可以作为DA使用,使用前根据datasheet配置好PCA 。在51头文件中有math.h , 里面有sin(X)函数 , 可以在程序中直接使用 , 使用前在主函数重要包含math.H这个文件 。然后每个点采样输出即可,频率可调可以通过不同方法实现,如果是要做信号发生器,推荐使用一个电位器,通过AD采集电压,将采集值作为你输出函数的系数即可 , 亦可以通过串口发送指令等方式实现,前提要在使用前将AD或者串口配置好 。
如果没有硬件模块,也可以用普通IO口模拟,思路如下 , 经过y=sinx函数求得的结果 , 经过算法转化成二进制(主要是将小数转化成二进制的算法),推荐转化成8的整数倍位,比如8位二进制或者16位二进制 。转化结束后将结果给IO口输出即可,频率也可采取上述方法设定 。
三角波:
如果有DA,将DA的输入值按一定时间自增,到达峰值后按一定时间自减 。前文中的“一定时间”设定的足够小 , 可以近似认为是三角波 。三角波输出频率就是周期,在具体到操作层面时,可以将输出函数前加上一个时间系数,还是通过调节正弦波的频率的方式调节 。
木有DA···还是和正弦波类似,通过算法将输出值转化成二进制,然后送给IO口
方波:
这个最简单,将IO口定时切换高低电平即可,你定的时间就将成为你输出的频率 。
如果有PCA模块,可配置成定时翻转模式,比较方便~
锯齿波是不是和方波类似?。?