求助:51单片机如何产生频率正弦变化的脉冲?

#include <reg52.h>
#define uint unsigned int
uint tt1;
sbit pluse=P2^0;
void init()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)/256;
EA=1;
ET0=1;
TR0=1;
}

void main()
{
init();
while(1)
{
if(tt1==1)
{
TR0=0;
tt1=0;
pluse=~pluse;
TR0=1;
}
}

}
void time1() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)/256;
tt1++ ;
}

上面的程序是我写的产生频率为10000Hz的脉冲信号;在51单片机的最小系统上跑通了。
现在的问题是,我想能实现输出一个频率按照正弦变化的脉冲信号,即:y=A*sin(t);A就是最大频率10000Hz,t是时间,y是输出,就是说随着时间变化,输出是正弦变化的脉冲信号。
不知道怎么搞了,郁闷死了,跪求各位牛人不吝赐教!谢谢!

这个一般要用da转换芯片,只用51可能不行。51能输出不同频率不同占空比的方波,就像你做的那个脉冲信号,但他也仅仅只是方波,换句话说,这种波形幅值不变,都是5V,但正弦却是电压时刻变化的,与方波有本质的不同!就算你通过更改占空能比降低有效电压,那也是很粗糙的追问

其实我就是想波形幅值为5V的,作为步进电机的脉冲信号。只是让频率是正弦变化的,这样电机的速度就可以正弦变化了,呵呵。也就是说无论什么频率输出,输出的都是电压为5V的方波信号,只是相同时间内(dt)输出的方波个数不同,这个方波个数是正弦变化的。
还想请教您有没有可能啊!

追答

明白你的问题了,这个简单。
1、首先需要自由控制方波频率,你可以设置一个全局变量,例如T,timer1中断函数装载初值时,写(65535-T)/256,这样你就可以通过更改T的值来实时改变方波频率,T越大,频率越低(这个你应该明白)。
2、第二步离散的时间为单位(例如0.1S)取得一系列SIN值(还是举个例子吧,例如sin0.01、sin0.02、sin0.03、sin0.04···等等),每一个sin值都与上面的T建立一次函数关系就好了。怕你不懂,再举例,假设在第0S时,T的值=f(sin0.01),那么当第0.1S时,你让单片机重新给T赋值,T=f(sin0.02),以此类推。上句话中f是函数符号,T与sin显然是斜率为负值的一次函数关系。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-03
单片机最小系统,输出矩形脉冲的波形,是很方便的,楼主的程序,就可以办到。

要想输出正弦波形,则需要有 DA 转换,这就需要硬件的支持。
最小系统,就不够用了。
第2个回答  2013-03-02
两种思路
第一种、至少需要两个定时器,一个做为t的定时,一个用于产生频率。
第二种、加一个频率芯片。
第3个回答  2013-03-02
可以通过建表的方法做
第4个回答  2013-03-01
离散~~~~~~~~~~
相似回答
大家正在搜