[STM32F1] 想输出一个幅值3.3V的正弦波,我的程序错在哪里?

[复制链接]
1951|14
 楼主| sdtsd 发表于 2014-8-18 14:41 | 显示全部楼层 |阅读模式
想输出一个幅值3.3V的正弦波,我的程序错在哪里?
#include "stdio.h"
#include "math.h"
#include "sys.h"
#include "dac.h"

#define pi 3.14159

int main(void)
{
        int m;
        int x[720];
       
        Dac1_Init();       
       
        for(m=0;m<720;m++)
        {
                x[m]=4095*sin(2*pi*m/720);
               
          DAC_SetChannel1Data(DAC_Align_12b_R, x[m]);
        }
}

songchenping 发表于 2014-8-18 14:44 | 显示全部楼层
你用的什么DAC芯片啊?多少位的?是否超出步进了?
 楼主| sdtsd 发表于 2014-8-18 14:48 | 显示全部楼层
songchenping 发表于 2014-8-18 14:44
你用的什么DAC芯片啊?多少位的?是否超出步进了?

STM32呀,12位,没有超出步进吧
IJK 发表于 2014-8-18 17:10 | 显示全部楼层
1. 问题是什么?
2. DAC_SetChannel1Data 之后,似乎要有1条输出指令,还应该有一定延时
mmuuss586 发表于 2014-8-18 18:20 | 显示全部楼层

1、DA有输出吗?
还是一直输出不变啊?
 楼主| sdtsd 发表于 2014-8-18 19:10 | 显示全部楼层
mmuuss586 发表于 2014-8-18 18:20
1、DA有输出吗?
还是一直输出不变啊?

没有输出,而且我要是连续的正弦波,那个正弦函数部分表达式应该怎么写?
mmuuss586 发表于 2014-8-18 19:14 | 显示全部楼层
sdtsd 发表于 2014-8-18 19:10
没有输出,而且我要是连续的正弦波,那个正弦函数部分表达式应该怎么写? ...

先让DA有正确的输出;
正弦波的表格,程序初始化的时候,用函数先生成到数组;

主程序产生正弦波,查表就好了,这样速度快点;
icecut 发表于 2014-8-18 19:29 | 显示全部楼层
同意楼上.多浪费多少条计算啊
yangbinge 发表于 2014-8-19 08:16 | 显示全部楼层
用什么测的? 想设定正弦波的频率是多少?
戈卫东 发表于 2014-8-19 08:25 | 显示全部楼层
正弦的值有负的吧?
把负值传过去是不会得到负的输出的。
 楼主| sdtsd 发表于 2014-8-19 09:40 | 显示全部楼层
本帖最后由 sdtsd 于 2014-8-19 09:50 编辑
yangbinge 发表于 2014-8-19 08:16
用什么测的? 想设定正弦波的频率是多少?

想设定正弦波频率为1KHZ,如何用sin函数写出表达式
yangbinge 发表于 2014-8-19 09:56 | 显示全部楼层
本帖最后由 yangbinge 于 2014-8-19 09:58 编辑

我觉得还是如楼上的所说,查表得到值,会好一点。
具体输出时要加定时器,根据频率、还有一个周期有几个数值来确定  时间间隔,定时输出正弦波的数值。
luckypwp 发表于 2014-8-19 11:22 | 显示全部楼层
没有加电压偏置,如何输出负电压。
计算太慢了,只能实验室玩玩,要实用建议查表吧。
zh_sl 发表于 2014-8-19 12:13 | 显示全部楼层
程序没有大循环
cool_coder 发表于 2014-8-19 13:27 | 显示全部楼层
本帖最后由 cool_coder 于 2014-8-19 13:28 编辑

改成这样试试:

  1. unsigned short x[m];
  2. ...
  3. x[m]=(unsigned short)(2048*(1+sin(2*pi/720*m)));

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

本版积分规则

13

主题

26

帖子

0

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