单片机输出PWM信号,经低通滤波电路和输出驱动电路输出模拟正弦信号。

单片机输出PWM信号,经低通滤波电路和输出驱动电路输出模拟正弦信号。系统中不得使用专用DAC集成电路或DAC功能模块。我知道原理:每个周期的脉宽按照正弦波的规律变化,经过... 单片机输出PWM信号,经低通滤波电路和输出驱动电路输出模拟正弦信号。系统中不得使用专用DAC集成电路或DAC功能模块。
我知道原理:每个周期的脉宽按照正弦波的规律变化,经过低通滤波器后即可得到正弦波形。但是本人不会写这个代码,求代码,谢谢各位了
展开
 我来答
11kxmx
2018-07-13 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:2506万
展开全部
假设正弦波周期是 T=20mS,将一个周期360度分成72份(分得越细,输出的正弦波越平滑),每份是5度
求出每个角度的正弦值sin(5*n),由于这个数值在+1到-1之间,而单片机只能输出正电压,因此要将该结果加1,即sin(5*n)+1 ,该值介于0和+2之间
用定时器产生pwm脉冲,该pwm脉冲的周期是T/72=278US
,占空比随时间而变化 ,可知D=(sin(5*n)+1)/2
高电平持续时间为th=T*D=278*(sin(5*n)+1)/2
这个th可以边输出边计算,也可以提前计算好存于数组中
然后用两个定时器(定时器0和定时器1), 定时器0定时278US, 定时器1定时时间可变,即为th
定时0负责置高电平并将定时器1打开并装入初值,定时器1负责置低电平
假设晶振12M ,51单片机程序如下:
主程序中:
sbit PWM=P1^0;
uchar time_high[72]={139,151,163,........};
uchar i=0;
void main( )
{
TMOD=0X11;
TH0=(65536-278)/256;
TL0=(65536-278)%256;
ET0=1;
ET1=1;
EA=1;
TR0=1;
while(1);
}
定时器0中断:
void timer0()interrupt 1
{
TH0=(65536-278)/256;
TL0=(65536-278)%256;
TH1=(65536- time_high[i])/256;
TL1=(65536- time_high[i])%256;
i++;
If(i==72)i=0;
PWM=1;
TR1=1;
}
定时器1中断:
void timer1()interrupt 3
{
PWM=0;
TR1=0;
}
这样P1^0输出的是占空比可变的方波,经高频滤波后,得到的是脉动直流电,再经电平偏移或电容藕合,即可得到类似正弦波
懂事电子设计
2018-07-07 · TA获得超过1940个赞
知道小有建树答主
回答量:3020
采纳率:80%
帮助的人:315万
展开全部
这个可以实现的,
懂事电子设计 Vgz
追问
嗯嗯,谢谢回答。想问一下有代码吗?本人不怎么会写代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式