找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 963|回复: 6
打印 上一主题 下一主题
收起左侧

请问一下这个代码产生的正弦波的频率是怎么算出来的

[复制链接]
跳转到指定楼层
楼主
ID:668455 发表于 2021-9-26 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <STC8.H>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code sintab[160]={
0xFF,0X17,0XFF,
0X17,0XFF,0X3B,0XFE,0XF3,0XFF,0X5F,
0XFE,0XCF,0XFF,0X80,0XFE,0XAE,0XFF,
0X9F,0XFE,0X8F,0XFF,0XBB,0XFE,0X73,
0XFF,0XD3,0XFE,0X5B,0XFF,0XE6,0XFE,
0X48,0XFF,0XF4,0XFE,0X3A,0XFF,0XFC,
0XFE,0X32,0XFF,0XFF,0XFE,0X2F,0XFF,
0XFC,0XFE,0X32,0XFF,0XF4,0XFE,0X3A,
0XFF,0XE6,0XFE,0X48,0XFF,0XD3,0XFE,
0X5B,0XFF,0XBB,0XFE,0X73,0XFF,0X9F,
0XFE,0X8F,0XFF,0X80,0XFE,0XAE,0XFF,
0X5F,0XFE,0XCF,0XFF,0X3B,0XFE,0XF3,
0XFF,0X17,0XFF,0X17,0XFE,0XF3,0XFF,
0X3B,0XFE,0XCF,0XFF,0X5F,0XFE,0XAE,
0XFF,0X80,0XFE,0X8F,0XFF,0X9F,0XFE,
0X73,0XFF,0XBB,0XFE,0X5B,0XFF,0XD3,
0XFE,0X48,0XFF,0XE6,0XFE,0X3A,0XFF,
0XF4,0XFE,0X32,0XFF,0XFC,0XFE,0X2F,
0XFF,0XFF,0XFE,0X32,0XFF,0XFC,0XFE,
0X3A,0XFF,0XF4,0XFE,0X48,0XFF,0XE6,
0XFE,0X5B,0XFF,0XD3,0XFE,0X73,0XFF,
0XBB,0XFE,0X8F,0XFF,0X9F,0XFE,0XAE,
0XFF,0X80,0XFE,0XCF,0XFF,0X5F,0XFE,
0XF3,0XFF,0X3B


}  ;


main()
{
P1M0=0x00;
P1M1=0x00;
TMOD=0X11;
AUXR &=0X7F;
ET1=1;
ET0=1;
TR0=1;
TR1=0;
EA=1;
while(1);

}

Timer0() interrupt 1
{
TR0=0;
P16=1;
TR1=1;
}
Timer1() interrupt 3
{
uchar aa,bb;
P16=0;
aa=bb*4;
TR1=0;
TH0=sintab[aa];
TL0=sintab[aa+1];
TH1=sintab[aa+2];
TL1=sintab[aa+3];
bb++;
if(bb>39)bb=0;
TR0=1;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2021-9-26 14:51 | 只看该作者
y=A*sin(2*π*f*t)
y:纵坐标数值
A:波幅
f:频率
t:采样时刻
(2*π*f*t)算出来的单位是 弧度 (RAD)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:844772 发表于 2021-9-26 16:17 | 只看该作者
1.这个程序相当于把sin函数用pwm输出,所以time0+time1是一个采样周期,大约1D0~1D1。time0是高电位,time1是低。要算每个取值周期,time0和time1的比值,再乘以刚才的周期取整,就是你sintab[]的值。
2.time0和time1的比值,就是每个取样周期,函数的定积分跟取样周期面积剩余的比值。
3.所以可以很明显看出你的数组前21组(4个一组),相当于余弦函数0~180度;后19组相当于正弦函数0~180度。后一个函数比前一个大,频率也快。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:668455 发表于 2021-9-26 17:20 | 只看该作者
xuyaqi 发表于 2021-9-26 14:51
y=A*sin(2*π*f*t)
y:纵坐标数值
A:波幅

这个我知道啊我想说的是程序里面是怎样体现的
回复

使用道具 举报

5#
ID:668455 发表于 2021-9-26 17:21 | 只看该作者
glinfei 发表于 2021-9-26 16:17
1.这个程序相当于把sin函数用pwm输出,所以time0+time1是一个采样周期,大约1D0~1D1。time0是高电位,time1 ...

那我想要把频率改为1k怎么改大佬
回复

使用道具 举报

6#
ID:844772 发表于 2021-9-27 08:55 | 只看该作者
seanhhp 发表于 2021-9-26 17:21
那我想要把频率改为1k怎么改大佬

可能我上面写的不够清楚,不过我是文科生啊。你目前AUXR设置成12T了,假如是12Mhz,你的两个终端计数合计1D1,采样输出频率都2K了,你的数组一共40组,大约以50Hz的频率输出。你说的频率改为1k,是指采样/输出频率还是函数的频率,还是1s输出函数1k个呢?如果只动采样输出频率,不用算积分,只要按比例调整数组,注意是用0xFFFF-(一对数组)的值;函数变了你重算,不过这种定积分,用excel拉表算就行了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表