`

用DAC产生正弦波

    博客分类:
  • ARM
 
阅读更多

 

MCU: C8051F330, Fmax: 23KHz

#include <stdio.h>
#include <stdlib.h>

unsigned char sine_table[8] = { 0x80, 0xDA, 0xFF, 0xDA, 0x80, 0x25, 0x00, 0x25 }; /* 8KSPS, 0dB */
// unsigned char sine_table[8] = { 0x80, 0xAD, 0xC0, 0xAD, 0x80, 0x52, 0x3F, 0x52 }; /* 8KSPS, -6dB */

unsigned char *waveform_data = &sine_table[0];

/* for generate 1KHz sine wave, call it per 125us */ 
unsigned char waveform_output(void)
{
	unsigned char dac_value;

	dac_value = *waveform_data++;
	if (waveform_data >= &sine_table[8])
	{
	    waveform_data = &sine_table[0];
	}

	return dac_value;
}

int main()
{
    int i;

    for (i = 0; i < 16; i++)
    {
        printf("%02X\n", waveform_output());
    }

    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

unsigned char *sine_table = NULL;

float db2liner(float dB)
{
    return pow(10, dB / 20);
}

float liner2db(float liner)
{
   return (20 * log10(liner));
}

int waveform_generate(int freq, int sps, float dB)
{
    int i;
    int table_length;
    float A;
    float value;

    table_length = sps / freq;

    sine_table = (unsigned char *)malloc(table_length);
    memset(sine_table, 0, table_length);

    A = db2liner(dB);

    for( i = 0; i < table_length; i++)
    {
        value = A * sin(2 * M_PI * i * freq / sps);
        if (value < 1.0)
        {
            sine_table[i] = (256 / 2) + value * (256 / 2);  /* add DC offset */
        }
        else
        {
            sine_table[i] = 256 - 1;
        }
    }

    return table_length;
}

int main()
{
    int i, table_length;

    /* generate 1000Hz sine wave, sample rate: 8000Hz, gain: -6dB */
    table_length = waveform_generate(1000, 8000, -6);

    printf("unsigned char sine_table[%d] = { ", table_length);
    for (i = 0; i < table_length; i++)
    {
        printf((i != table_length - 1) ? "0x%02X, " : "0x%02X ", sine_table[i]);
    }
    printf("};\n");

    free(sine_table);

    return 0;
}

分享到:
评论

相关推荐

    STM32的DAC产生正弦波

    这个资源中的"DMA-DAC产生1KHz正弦波"文件很可能包含了具体的代码示例和配置细节,可以作为实现这一功能的参考模板。对于初学者或者需要在项目中使用此功能的开发者来说,这是一个非常有价值的实践案例。

    STM32F103使用用DMA+DAC 实现正弦波输出 频率可调.rar

    4. **启动DMA传输**:一旦配置好DMA和DAC,我们启动DMA传输,让其周期性地将正弦波样本送到DAC,从而产生模拟信号。 5. **频率调整**:为了改变输出正弦波的频率,我们可以调整DMA传输的速率,即改变每毫秒发送到...

    DAC—输出正弦波.zip

    STM32是一款广泛应用于嵌入式系统的32位微控制器,其内置的DAC模块能够将数字信号转换为模拟信号,进而产生各种波形,包括正弦波。 首先,我们要理解正弦波的生成原理。一个理想的正弦波可以由频率、幅度和相位三个...

    用单片机产生正弦波程序

    单片机产生正弦波程序是电子工程中的一种常见应用,通过使用数字到模拟转换器(DAC)和单片机,可以生成正弦波信号,这种技术广泛应用于音频处理、信号处理和电子测量等领域。 单片机产生正弦波程序的原理是使用...

    DAC生成正弦波.zip

    在生成正弦波时,我们可以通过计算得到一系列代表正弦函数数值的数字,然后把这些数字输入到DAC,由DAC转换成连续变化的模拟电压。 本项目中,提供了800Hz和1600Hz两种频率的正弦波。频率的设置与DAC的采样率有关,...

    用dac0832产生正弦波的设计微机论文

    ### 使用DAC0832产生正弦波的关键知识点 #### 1. DAC0832简介及其特性 DAC0832是一种8位分辨率的数模转换器(Digital-to-Analog Converter, DAC),广泛应用于各种电子设备中进行信号处理。其主要特点包括: - **高性...

    STM32F4之dacdma输出正弦波加adcdma多通道采集

    在这个项目中,我们重点讨论如何利用STM32F4的数字模拟转换器(DAC)通过DMA(直接内存访问)高速输出正弦波,并结合ADC(模拟数字转换器)同样通过DMA进行多通道高速信号采集。这些功能对于实现高性能的实时信号...

    DAC波形发生器(正弦,三角,方波).zip_STM32 DAC 方波_stm32 正弦波_stm32三角波_正弦波_正弦波发生

    STM32 DAC 波形发生器是嵌入式系统中常用的一种功能,它允许通过数字控制来生成模拟信号,如正弦波、三角波和方波。本项目着重讲解如何利用STM32微控制器的DAC模块来实现这些基本波形的发生。 首先,STM32中的DAC...

    STM32_DAC_产生正弦波

    在提供的文件"10 DAC_产生正弦波"中,应该包含了实现上述步骤的代码示例,包括必要的头文件、宏定义、函数声明和实现。通过分析和理解这些代码,你可以进一步了解如何在实际项目中使用STM32 DAC生成正弦波。

    C8051f020产生正弦波

    用单片机去产生正弦波的程序是用查表的方法。

    DMA-DAC产生1KHz正弦波.zip_DMA DAC_dac正弦波_stm32f1_stm32f1DAC正弦波发生_正弦波

    stm32f1的程序

    基于51单片机DAC0832产生正弦波的C程序

    本篇文章将深入探讨如何利用51单片机和DAC0832芯片来产生正弦波。DAC0832是一款8位数字模拟转换器,它能够将数字信号转换为模拟电压,这在信号处理、音频设备和各种控制系统中非常常见。 首先,我们需要了解51...

    stm32f407 TIM+DAC产生可以调整频率的正弦波.7z

    在这个项目中,它被用于通过TIM(定时器)模块和DAC(数模转换器)来生成可调频率的正弦波。 STM32F407的TIM模块是一个强大的定时器,可以执行多种功能,包括计数、比较、捕获和PWM输出。在生成正弦波的应用中,TIM...

    51单片机Protues 信号发生器输出项目仿真(仿真文件+keil代码) 包括硬件电路设计,使用DAC产生正弦波,方波,三角波

    包括硬件电路设计,使用DAC产生正弦波,方波,三角波,锯齿波,通过按键设置波形和频率,通过12864显示波形图 Protues仿真软件是一款单片机仿真程序,用户可以通过它来实现单片机以及相关工具的模拟功能,并且能够...

    002_DAC0832输出50HZ正弦波,三角波,矩形波,锯齿波

    标题中的“002_DAC0832输出50HZ正弦波,三角波,矩形波,锯齿波”表明这是一个关于使用DAC0832集成电路产生不同类型的模拟信号的教程,主要涉及50Hz频率的正弦波、三角波、矩形波和锯齿波。DAC0832是一款8位数字模拟...

    单片机C语言产生正弦波

    用函数产生正弦波;unsigned char xdata DAC0832_PORT _at_ 0x7fff; typedef unsigned int uint16; unsigned char i; float x; unsigned char k;

    ATmega16与DAC0832连接用DA产生正弦波

    在本项目中,ATmega16将作为数字信号处理器,负责生成控制信号来驱动DAC(数模转换器)产生正弦波。 DAC0832是一款8位的单片线性DAC,能够将数字信号转换为模拟电压输出。它包含四个独立的D/A转换通道,但在这个...

    dma dac 正弦波_DAC_STM32F103_dma_DMADAC_

    在本文中,我们将深入探讨如何使用STM32F103微控制器通过DMA(直接存储器访问)方式驱动DAC(数模转换器)来生成正弦波。STM32F103是一款基于ARM Cortex-M3内核的高性能微控制器,广泛应用于嵌入式系统设计。DMA是...

    DAC0832正弦波发生器C51兼频率计(三点频、幅度可调)

    本项目基于C51单片机和DAC0832数字模拟转换器,设计了一款功能丰富的正弦波发生器,并兼备频率计功能。该设备能够产生三点频正弦波,且波形幅度可以调节,适用于电子工程、教学实验以及信号测试等多种场景。同时,它...

Global site tag (gtag.js) - Google Analytics