⑴ 基于单片机信号发生器设计重点研究问题是什么
利用单片机做信号发生器,其重点就是单片机的主频啦
因为主频代表着程序运行的时间,这个时间是完成一次程序的从头到尾单片机内部所需的时间,而运行一次只能输出一种端口状态,那么需要方波输出,则需要单片机运行两次才能真正输出一个方波信号,所以主频才是重中之重。
另外还有程序的整体步数,就是程序的长度或多少,程序语句越多,运行速度也越慢,输出的信号频率也越低
例如想做一个1MHz的方波发生器,那么51单片机的最高主频是12MHz,然而真正输出的最高只能达到12分之一,那就是1MHz,勉勉强强算是可以
如果超过1MHz的波形,51类单片机是达不到效果了,只能选择其它单片机
下面是本人曾经利用单片机做的PMW信号发生器程序,仅供参考
/***************************************************************************/
#include<reg51.h>//频率约为 2.37 KHz
//根据按键来控制输出波形
sbit D=P2^0 ; //端口定义
int h,m,s,f;
/***************************************************************************/
void main(void)
{
TMOD=0x22; EA=1; ET0=1; ET1=1; TR0=1;//定时器初始化
while(1)
{
switch(P0)
{
case 0xfe : h=1; break;
case 0xfd : h=2; break;
case 0xfb : h=3; break;
case 0xf7 : h=4; break;
case 0xef : h=5; break;
case 0xdf : h=6; break;
case 0xbf : h=7; break;
case 0x7f : h=8; break;
default : h=9; break;
}
m=10-h;
}
}
/***************************************************************************/
void int0() interrupt 1 //定时器 0 中断
{
TH0=0xff; s++;
if(s>=h){ TR0=0; TR1=1; D=0; s=0; }//开始时间
}
/***************************************************************************
/void int1() interrupt 3 //定时器 1 中断
{
TH1=0xff; s++;
if(s>=m){ TR1=0; TR0=1; D=1; s=0; }//休止时间
}
/***************************************************************************/
⑵ 急求!!!在c51单片机上的三角波信号发生器,求原理图与c程序代码.
**************************************/
/* 信号发生器 (正弦波,方波,三角波)
*/
/*************************************/ #include<reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int
sbit cs=P2^0; //tlc5615片选端口 sbit clk=P2^1; //tlc5615时钟线 sbit din=P2^2;
//tlc5615传输端口
sbit key1=P1^0; sbit key2=P1^1;
//按键的单片机接口
uchar keydat;
uchar flag;
//波形发生终止信号的标志位 一旦
被置零立马停止发信号
uchar flagsqu; //方波高低电平控制为(运用定时器1
中断控制)
uchar m,num; uchar dat=0xff;
uchar code tosin[141]={ //正弦波的编码
0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,<a href="http://www.jsykyy.com/" target="_blank">涂料加盟</a>0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75, 0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e, 0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79, 0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c, 0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,
0x00};
⑶ 基于单片机的信号发生器怎么实现调幅
一般情况下单片机模拟信号告带发生器缓铅时需要用到数模转换模块,即将数字信号转换为模拟信号。在得到原始载波信号后你可以将需要装载的信号通过一袜哪芦个三极管之类的器件加载到信号中,如图所示,这样即可以可以将信号发送出去了。
⑷ 基于单片机的信号发生器的设计,输出方波,正弦波,三角波,锯齿波,频率可调。原理是如何哒怎么取点
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模块,可配置成定时翻转模式,比较方便~
锯齿波是不是和方波类似啊?
⑸ 51单片机做的信号发生器能达最高频率事多少
51单片机的信号发生器最高频率与晶振频率紧密相关。在理想状态下,当晶振频率设置为12MHz时,信号发生器的最高频率理论上可达12MHz。然而,实际操作中会受到各种因素的影响,因此实际能达到的频率会略低于12MHz。
影响信号发生器频率的因素包括但不限于信号处理的延迟、模拟电路的响应速度以及环境温度等。信号处理中的延迟会导致信号发生器的频率不能达到理想状态下的最大值。同时,模拟电路的响应速度也会影响信号发生器的实际频率。这些因素共同作用,使得在实际应用中,51单片机信号发生器的最高频率通常会低于理论上的12MHz。
此外,环境温度的变化也会对信号发生器的频率产生影响。温度的升高或降低都会导致晶振频率的变化,从而影响信号发生器的输出频率。因此,在实际使用时,需要考虑环境温度对信号发生器频率的影响,并采取相应的补偿措施。
综上所述,虽然51单片机信号发生器在理想状态下可以达到12MHz的最高频率,但在实际应用中,由于各种因素的影响,实际能达到的最高频率会有所降低。