[51单片机] 求助帖(正弦波发生器)

[复制链接]
1040|8
 楼主| 公子墨 发表于 2017-7-30 21:48 | 显示全部楼层 |阅读模式
本帖最后由 公子墨 于 2017-7-30 21:51 编辑

最近写了一个正弦波发生的程序,用的是51单片机和DAC0832,连接图和示波器图如下,我的问题是为什么是示波器的波形是这个样子的,很奇怪无论我怎么改程序它都是这个样子:比如取一次波形表,第二次取反等等。求助各位大大
  1. #include<reg51.h>
  2. #include<absacc.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit csda=P3^6;
  6. sbit wr=P2^7;


  7. uchar code sin[256]={
  8.                     0x80,0x83,0x86,0x89,0x8c,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,
  9.                                         0xae,0xb1,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,
  10.                                         0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xef,0xf0,
  11.                                         0xf1,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xfe,
  12.                                         0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfb,
  13.                                         0xfa,0xfa,0xf9,0xf8,0xf6,0xf5,0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,
  14.                                         0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,
  15.                                         0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
  16.                                         0x99,0x96,0x93,0x90,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x77,0x74,0x70,0x6d,
  17.                                         0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x41,
  18.                                         0x3f,0x3c,0x39,0x37,0x34,0x32,0x2f,0x2d,0x2b,0x28,0x26,0x24,0x22,0x20,0x1e,
  19.                                         0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x07,
  20.                                         0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,
  21.                                         0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,
  22.                                         0x0d,0x0f,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,
  23.                                         0x28,0x2b,0x2d,0x2f,0x32,0x34,0x37,0x39,0x3c,0x3f,0x41,0x44,0x47,0x4a,0x4d,
  24.                                         0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x74,0x77,0x7a,0x7d,
  25. };




  26. void delay(uint m);



  27. void main()
  28. {
  29.         csda=0;
  30.         
  31.         while(1)
  32.         {
  33.                
  34.         uint t;
  35.                 wr=0;

  36.         for(t= 0; t< 256; t= t+ 1)
  37.         {
  38.                         
  39.                 P0 = sin[t];
  40.                 delay(10);
  41.         
  42.         }
  43.         }
  44. }

  45. void delay(uint m)
  46. {
  47.         uint i , j;
  48.         for(i = 0; i < m; i++)
  49.                 for(j = 0; j < 120; j++);
  50. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mcu5i51 发表于 2017-7-31 09:06 | 显示全部楼层
远看好像是运放的问题,去掉或换掉或加电压,或减少输出电压等
sky9218 发表于 2017-7-31 09:48 | 显示全部楼层
看下上半周削顶哪里电压是不是接近于供电电压,若是则上半周饱和了,减小输出幅值。
 楼主| 公子墨 发表于 2017-7-31 11:22 | 显示全部楼层
sky9218 发表于 2017-7-31 09:48
看下上半周削顶哪里电压是不是接近于供电电压,若是则上半周饱和了,减小输出幅值。 ...

感谢大大的建议,我来尝试一下
 楼主| 公子墨 发表于 2017-7-31 11:22 | 显示全部楼层
mcu5i51 发表于 2017-7-31 09:06
远看好像是运放的问题,去掉或换掉或加电压,或减少输出电压等

感谢大大的的意见,我尝试一下
 楼主| 公子墨 发表于 2017-7-31 11:24 | 显示全部楼层
经修改,波形是这个样子的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
coody 发表于 2017-7-31 18:38 | 显示全部楼层
我用的是MCU的IO接R-2R电阻做8位的DAC,按DDS原理做的正弦波、三角波、方波发生器,最高频率300KHZ,步进0.1HZ。
 楼主| 公子墨 发表于 2017-7-31 22:40 | 显示全部楼层
coody 发表于 2017-7-31 18:38
我用的是MCU的IO接R-2R电阻做8位的DAC,按DDS原理做的正弦波、三角波、方波发生器,最高频率300KHZ,步进0. ...

大大您好,能给我借鉴一下吗
chunyang 发表于 2017-7-31 23:40 | 显示全部楼层
换轨到轨输出型运放或提高运放供电电压,同时加有源低通滤波环节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部