3550|12

9792

帖子

24

TA的资源

版主

楼主
 

SensorTile正弦波发生器 [复制链接]

 
 




生成sin数据的代码
  1. //生成sin数据
  2. void SineGenerator(float outFreq,float samplingFreq)
  3. {
  4. //输出数据索引
  5. uint16_t i;
  6. float tmp;
  7. //采样率除输出频率得到总样本数量
  8. uint16_t sampleLength = (uint16_t)(samplingFreq / outFreq);
  9. //分步角度
  10. float stepDegrees = 360.00 / (float)sampleLength ;
  11. //分步弧度
  12. stepDegrees = PI / 180.00 * stepDegrees;
  13. //游标移到起始处
  14. sinWaveLength = 0;
  15. //得到对应正弦数据
  16. for(i=0;i<sampleLength;i++)
  17. {
  18. //得到当前弧度
  19. tmp = stepDegrees* i;
  20. //得到对应的sin数据
  21. tmp = sin(tmp);
  22. //+0.5四舍五入
  23. sinWave[sinWaveLength++] = (int16_t)((tmp + 1)/2 * 65535 - 32768 + 0.5);
  24. }
  25. }
复制代码


在BSP_AUDIO_OUT_TransferComplete_CallBack和BSP_AUDIO_OUT_HalfTransfer_CallBack中断函数里循环填充正弦数据到输出缓冲区
  1. void BSP_AUDIO_OUT_TransferComplete_CallBack(void)
  2. {  
  3.   uint16_t i;
  4.   //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
  5.   //播放完audio_out_buffer时填充后半部分
  6.   for(i=AUDIO_OUT_BUF_LEN/2;i<AUDIO_OUT_BUF_LEN;i+=2)
  7.   {
  8.     audio_out_buffer[i] = sinWave[sinWaveIndex];
  9.     audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
  10.     //如果数据超出sinWave范围则从0开始循环填充
  11.     if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
  12.   }
  13.       __NOP();
  14. }

  15. /**
  16. * [url=home.php?mod=space&uid=159083]@brief[/url]  Manages the DMA Half Transfer complete event.
  17. * @retval None
  18. */
  19. void BSP_AUDIO_OUT_HalfTransfer_CallBack(void)
  20. {
  21.   uint16_t i;
  22.   //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
  23.   //播放到audio_out_buffer一半的时候填充前半部分
  24.   for(i=0;i<AUDIO_OUT_BUF_LEN/2;i+=2)
  25.   {
  26.     audio_out_buffer[i] = sinWave[sinWaveIndex];
  27.     audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
  28.     //如果数据超出sinWave范围则从0开始循环填充
  29.     if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
  30.   }
  31.       __NOP();
  32. }
复制代码


在主函数执行SineGenerator生成指定频率的正弦数据
将第一批数据填充到audio_out_buffer,左右声道使用相同数据
执行BSP_AUDIO_OUT_Play函数播放声音
  1.   //生成300Hz正弦波数据
  2.   SineGenerator(300,AUDIO_SAMPLING_FREQUENCY);
  3.   
  4.   //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
  5.   for(i=0;i<AUDIO_OUT_BUF_LEN;i+=2)
  6.   {
  7.     audio_out_buffer[i] = sinWave[sinWaveIndex];
  8.     audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
  9.     //如果数据超出sinWave范围则从0开始循环填充
  10.     if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
  11.   }
  12.   //音频输出
  13.   BSP_AUDIO_OUT_Play(PCM1774_X_0_handle,(uint16_t*)audio_out_buffer, AUDIO_OUT_BUF_LEN);
复制代码


main.c代码使用STSW-STLKT01_V1.3.1例程修改
main.c (9.26 KB, 下载次数: 6)


最新回复

不哦  只是做个测试源我是这么想的  详情 回复 发表于 2017-12-6 10:41
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复
举报

7219

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 
虾哥 生成sin数据的代码是个处理器通用??

点评

代码还有点问题,高频时的波形会有失真,等改好后再发出来  详情 回复 发表于 2017-10-28 22:48
通用的,输出数据格式是int16  详情 回复 发表于 2017-10-28 14:28
 
 

回复

9792

帖子

24

TA的资源

版主

板凳
 
常见泽1 发表于 2017-10-28 14:05
虾哥 生成sin数据的代码是个处理器通用??

通用的,输出数据格式是int16
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

351

帖子

1

TA的资源

一粒金砂(高级)

4
 
 
 

回复

9792

帖子

24

TA的资源

版主

5
 
常见泽1 发表于 2017-10-28 14:05
虾哥 生成sin数据的代码是个处理器通用??

代码还有点问题,高频时的波形会有失真,等改好后再发出来

点评

正好要用到 还不知道怎么把虾哥的代码添加进来 后来虾哥更新了么  详情 回复 发表于 2017-12-4 18:44
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

6
 
littleshrimp 发表于 2017-10-28 22:48
代码还有点问题,高频时的波形会有失真,等改好后再发出来

正好要用到 还不知道怎么把虾哥的代码添加进来 后来虾哥更新了么

点评

https://bbs.eeworld.com.cn/thread-590521-1-1.html  详情 回复 发表于 2017-12-4 19:31
 
 
 

回复

9792

帖子

24

TA的资源

版主

7
 
常见泽1 发表于 2017-12-4 18:44
正好要用到 还不知道怎么把虾哥的代码添加进来 后来虾哥更新了么

https://bbs.eeworld.com.cn/thread-590521-1-1.html

点评

虾哥 正弦波产生了 但是我忽略了一个问题 我是要政府半轴的 单片机没有负电压  详情 回复 发表于 2017-12-5 08:08
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

8
 
littleshrimp 发表于 2017-12-4 19:31
https://bbs.eeworld.com.cn/thread-590521-1-1.html

虾哥 正弦波产生了 但是我忽略了一个问题 我是要政府半轴的 单片机没有负电压

点评

你准备用它做什么?  详情 回复 发表于 2017-12-5 13:25
 
 
 

回复

9792

帖子

24

TA的资源

版主

9
 
常见泽1 发表于 2017-12-5 08:08
虾哥 正弦波产生了 但是我忽略了一个问题 我是要政府半轴的 单片机没有负电压

你准备用它做什么?

点评

模拟过零检测  详情 回复 发表于 2017-12-5 15:44
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

10
 
littleshrimp 发表于 2017-12-5 13:25
你准备用它做什么?

模拟过零检测

点评

过零检测也用SensorTile做吗?  详情 回复 发表于 2017-12-6 10:34
 
 
 

回复

9792

帖子

24

TA的资源

版主

11
 

过零检测也用SensorTile做吗?

点评

不哦 只是做个测试源我是这么想的  详情 回复 发表于 2017-12-6 10:41
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

12
 
littleshrimp 发表于 2017-12-6 10:34
过零检测也用SensorTile做吗?

不哦  只是做个测试源我是这么想的

点评

试试加个双电源放大器,或者在测量端使用虚地呢?  详情 回复 发表于 2017-12-6 11:23
 
 
 

回复

9792

帖子

24

TA的资源

版主

13
 
常见泽1 发表于 2017-12-6 10:41
不哦  只是做个测试源我是这么想的

试试加个双电源放大器,或者在测量端使用虚地呢?
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表