⑴ 利用单片机产生梯形波,高手进!
只是正常的波形而已,只要在单片机程序中控制输出高低电平即可。高电平时即为顶端,低电平即为波谷,通过控制高低电平的输出时间,就可以得到想要的规则波形,如输出高电平1s,转而输出低电平1s,反复交替,出来的结果就是等距的梯形波排列。同时,没有绝对意义的矩形波,由于器件的特性,如需要充放电时间等,波的边沿不可能是垂直的,不可能一下子就到波谷或者波峰。需要一个爬升、下降时间,这样一来波的边沿就会变成有一个坡度,因此在示波器上看起来就像一个个梯形。从你给出的图看,这是一个时序图而已,器件本身工作特性。不知道你为什么要做这个波形。
⑵ 怎样借助单片机做一个信号发生器,可以产生任意波形
这个需要da转换芯片,将要产生的波形数字化,存入数组中,由单片机按顺序依次送往da芯片进行转换,例如产生正弦波,频率50hz,可以用100个点来描述,每隔200us送1个数据,100个数据花20ms.数字化点越多,波形越完美,但也与你的da芯片精度有关,8位da只能输入256个数字量,很难得到很好的波形
⑶ 基于单片机的波形发生器原理
波形发生器一般是由DA转换器(或PWM滤波信号)定时输出某一电压,由一系列包含波形各时间点电压信息的输出组成一个完整的波形,一般算好一个周期的波形数据存储起来,单片机一个周期一个周期连续输出;由点输出的时间间隔调整频率。
波形的周期T由一个周期的输出点数N和点之间的时间间t隔确定,T=N*t,频率就为1/T;在输出点数一定时,由点之间的时间间隔(决定DA输出频率)调整波形频率,上面的公式估计就是调整DA输出频率的。
⑷ 怎么用单片机实现一个特定的波形,波形如下
上升沿和下降沿的时间也有要求吗?
如果没有要求就好办!
用一个单片机的I/O口上下各拉一个相同阻值的电阻
1.IO设为输入
2.延时,
3.I/O设置为输出,输出高
4.延时,
5.I/O设为输入
6.延时
7.I/O设置为输出,输出高
8.延时
8.I/O设置为输出,输出底
9.延时
1-9步循环输出就是所要波形了
1.如果上升和下降沿时间都有要求,要产生如果后面那个波形那样相同时间上升下降沿的斜边,那就上面的方法不行,就得用D/A转换才能产生。
2.如果对波形的幅值有所要求,上面的方法也不行,也只能用D/A转换才能产生。
3.上面的方法只能产生5V 1/2的偏压,因为单片机I/O口输出是5V的,即产生0V,+5V和-5V
⑸ 用单片机利用dac0832产生三角波方波和正弦波
首先需要建立一个产生三角波、方波和正弦波的波表,然后定时将波表里的数据通过端口刷新至dac0832,然后0832的模拟输出端口即可输出想要的波形,通过控制波表数值的刷新频率即可调整输出频率。
⑹ 求教51单片机生成spwm波形的程序
1、用普通I/O口采用软件定时器中断可以模拟SPWM输出。"/**/"里面的内用是对程序的标注,解析。
2、/*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号*/
/*定时100ms,周期2.5s需25次中断,高电平0.5s需5次中断*/
#include <reg51.h>
typedef unsigned char uchar;
sbit P1_0=P1^0;
uchar time=0;
uchar period=25;
uchar high=5;
void timer0() interrupt 1 using 1
{
TH0=0x3c; /*定时器初值重装载*/
TL0=0xb0;
time++;
if(time==high) /*高电平持续时间结束,变低*/
{ P1_0=0;}
else if(time==period) /*周期时间到,变高*/
{ time=0;
P1_0=1;
}
}
void main()
{
TMOD=0x01; /*定时器0方式1*/
TH0=0x3c; /*定时器装载初值*/
TL0=0xb0;
EA=1; /*开CPU中断*/
ET0=1; /*开定时器0中断*/
TR0=1;/*启动定时器0*/
while(1) /*等待中断*/
{}
}
3、说明:本程序主要采用了51单片机(具体型号STC89C52RC)的定时器,工作在方式3,来产生规定时间内的方波,制造SPWM.
⑺ 如何设计单片机波形发生器啊
一、 设计任务
设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的
特定形戚做枯状波形。
二、 设计要求
1. 基本要求
具有产生高洞正弦波、方波、三角波三种周期性的波形。
用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(
5次以下)线性组合的波形。
具有波形存储功能。
输出波形的频率为100Hz~20KHz(非正弦波频率按10次谐波计算):重复频率可调,频
率步进间隔≤100Hz。
输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整。
具有显示输出波形的类型、重复频率(周期)和胡高幅度的功能。
2.发挥部分
输出波形频率范围扩展至100Hz~200KHz。
用键盘或其他输入装置产生任意波形。
增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载电压变化范围
:100Ω~∞)。
具有掉电存储功能,可存储掉电前用户编辑的波形和设置。
可产生单次或多次(1000次以下)特定波形(如产生一个半周期三角波输出)。
其它(如增加频谱分析、失真度分析、频率扩展>200KHz、扫频输出等功能)。
⑻ 单片机产生波形为什么是256个采样点
舍弃10位精度只取其8位。单片机产生波形舍弃10位精度,只兄备取其8位,由此最多可以得到256个采羡搏毁样点;因此一个周期可以分为256个点,利用单片机的定时银或器,每个固定一段时间发送一个点的数据。
⑼ 如何运用单片机原理制作智能信号发生器,要求产生方波、矩形波、三角波、锯齿波和正弦波。
#include<reg51.h>
#include<absacc.h>
#include<MAX72191.h>
#defineDAC XBYTE[0x7fff] //P2.7接CS
sbitkey0 = P3^2;// 增减切换键
sbitkey1 = P3^3;//个位,十位,百位,千位的控制切换
sbitkey2 = P3^4;// 调整位
sbitkey3 = P3^5;// 波形选择正弦、三角、矩形波,锯齿波
unsignedchar i,j;
unsignedint counter,step,flag;
typedefunsigned int uint;
//定时器0初始化
voidInit_Timer0(void)
{
TMOD = (TMOD & 0XF0) | 0X01;//设置工作方式和定时初始值
TH0 = 0xff;
TL0 = 0x00;
TR0 =1; //启动定时器
ET0 =1;
}
//定义输出波形的代码
unsignedchar code type[4][256]={
{ //正弦波代码
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
0x9, 0xb,0xc, 0xd, 0xf, 0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x39,0x3b,0x3e,0x41,0x43,0x46,0x49,0x4c,
0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x7a,0x7d,
0x80,0x83,0x86,0x89,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb1,0xb4,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,
0xf5,0xf6,0xf8,0xf9,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf9,0xf8,0xf6,0xf5,
0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,
0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x8f,0x8c,0x89,0x86,0x83,0x80,
0x7d,0x7a,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,
0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,
0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0xf,0xd, 0xc, 0xb, 0x9,
0x8,0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //三角波代码
0x2,0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10,0x12,0x14, 0x16, 0x18, 0x1a,0x1c, 0x1e, 0x20,
0x22,0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30,0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40,
0x42,0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50,0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60,
0x62,0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70,0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80,
0x82,0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90,0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0,
0xa2,0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0,0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc,0xbe, 0xc0,
0xc2,0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0,0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc,0xde, 0xe0,
0xe2,0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0,0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc,0xfe, 0xff,
0xfe,0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0,0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4,0xe2, 0xe0,
0xde,0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0,0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4,0xc2, 0xc0,
0xbe,0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4,0xa2, 0xa0,
0x9e, 0x9c, 0x9a, 0x98, 0x96, 0x94, 0x92, 0x90,0x8e, 0x8c, 0x8a, 0x88, 0x86, 0x84, 0x82, 0x80,
0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x72, 0x70,0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x62, 0x60,
0x5e, 0x5c, 0x5a, 0x58, 0x56, 0x54, 0x52, 0x50,0x4e, 0x4c, 0x4a, 0x48, 0x46, 0x44, 0x42, 0x40,
0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x30,0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20,
0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10,0xe, 0xc,0xa, 0x8, 0x6,0x4, 0x2, 0x00
},
{// 矩形脉冲波代码
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
},
{//锯齿波代码
0x00,0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08,0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10,0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,0x18,0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,0x28,0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38,0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40,0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,0x48,0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50,0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58,0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60,0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,0x68,0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70,0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78,0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80,0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,0x88,0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90,0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,0x98,0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0,0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,0xa8,0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0,0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,0xb8,0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0,0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,0xc8,0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0,0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,0xd8,0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0,0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,0xe8,0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0,0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,0xf8,0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}
};
//显示子函数
Disp7219(unsignedlong dat)
{
unsigned char i;
unsigned char led[8];
led[7]=dat%10;
led[6]=dat/10%10;
led[5]=dat/100%10;
led[4]=dat/1000%10;
led[3]=dat/10000%10;
led[2]=dat/100000%10;
led[1]=dat/1000000%10;
led[0]=dat/10000000%10;
for(i=0;i<8;i++)
{
max_7219(i+1, led[i]);
}
}
//延时约1m秒
voiddelay_ms(uint n)
{
uchar j;
while(n--)
for(j=0;j<120;j++);
}
//主函数
main()
{
unsigned int f,n,j;
delay_ms(500);
Init_Max7219();//初始化7219
Disp7219(000);
Init_Timer0();
step=18;
EA = 1;
while(1)
{
if(key0 == 0) n=n+1;
if(n==2)n=0;
if(key1==0) j=j+1;
if(j==4) j=0;
if(n==0 && j == 0 &&key2 == 0) if(step<180) step+=18; //个位增
if(n==1 && j == 0 &&key2 == 0) if(step>18) step-=18; //个位减
if(n==0 && j == 1 &&key2 == 0) if(step<1800) step+=180;//十位增
if(n==1 && j == 1 &&key2 == 0) if(step>180) step-=180; //十位减
if(n==0 && j == 2 &&key2 == 0) if(step<18000) step+=1800;//百位增
if(n==1 && j == 2 &&key2 == 0) if(step>1800) step-=1800;//百位减
if(n==0 && j == 3 &&key2 == 0) if(step<54000) step+=18000;//千位增
if(n==1 && j == 3 &&key2 == 0) if(step>18000) step-=18000;//千位减
if(key3==0)flag=flag+1;if(flag==4)flag=0;
while((!key0)||(!key1)||(!key2)||(!key3));
f=step/18;
Disp7219(f);}//显示频率
}
// 定时中断服务
voidTimer0(void) interrupt 1 using 2
{
TH0 = 0xff;
TL0 = 0x00;
counter = counter + step;
DAC=type[flag][(unsignedint)counter>>8];
}