首页 > 其他分享 >DAC+定时器 生成正弦波,三角波

DAC+定时器 生成正弦波,三角波

时间:2023-06-15 10:00:31浏览次数:36  
标签:定时器 HAL DAC 正弦波 生成 Start NPoints SineWaveTable

正弦波生成

配置如下

DAC触发 trigger是由TIM2事件触发。 

TIM2配置方式

/**
 * 生成正弦波数据点函数
 * @param NPoints       �???个周期内的点�???
 * @param VMaxRange     输出的电压最大�?�,取�?�范�???0~3.3V
 * @param SineWaveTable 存放生成的数据点
 */
void SineWaveGen(uint32_t NPoints, float VMaxRange, uint16_t* SineWaveTable)
{
#ifndef PI
#define PI 3.14159265358979323846
#endif

    int    b       = 0;
    double radian  = 0;  // 弧度
    double setup   = 0;  // 弧度和弧度之间的大小
    double voltage = 0;  // 输出电压

    setup = (2 * PI) / NPoints;  // 两点之间的间�???

    while (b< NPoints)
    {
        voltage = VMaxRange / 2.0 * (sin(radian) + 1.0);              // 计算电压
        SineWaveTable[b] = (uint16_t)(voltage * 4096 / 3.3);          // 电压转为DAC数�??
        radian += setup;                                              // 下一个点的弧�???
        b++;
    }
}
int main()
{

SineWaveGen(100,3.3,SineWaveTable);//生成sin函数的点


HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)SineWaveTable, 100, DAC_ALIGN_12B_R);

while(1)
{

}
}

 

 

 

三角波 

可以在配置中生成 三角波和噪声波,4095可以改幅度,同样是tim2触发tim2配置同上

 然后写开始函数

int main()
{
HAL_TIM_Base_Start(&htim2);
 HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
while(1)
{

}
}

看示波器生成波形

 

标签:定时器,HAL,DAC,正弦波,生成,Start,NPoints,SineWaveTable
From: https://www.cnblogs.com/mokongking/p/17482078.html

相关文章

  • 字符设备驱动-9.内核定时器
    1引入定时器前面的gpio按键驱动引入了中断,当按键按下会记录按键信息,理想状况是按下一次按键记录一组数据,但实际上按下机械振动导致电平反复跳动最后才稳定,按下一次gpioirq会触发多次,这个被叫做“抖动”,那么可以利用定时器进行“去抖”。到linux_5.10版本structtimer_list......
  • 使用Python编写简易定时器
    简单模拟了定时器功能,需要的朋友可以自己改写和扩充功能。importdatetimeimportwinsoundimporttimeimportrandomdefTimer(y,m,d,h,mu,s):'''参数分别为年、月、日、时、分、秒'''stopTime=datetime.datetime(y,m,d,h,mu,s)maxTime=stopTime+......
  • 谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高
    谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高摘要谷歌近日公布了自家的DIDACT(DynamicIntegratedDeveloperACTivity,动态集成开发人员活动)框架,用AI技术增强软件工程,将软件开发的中间状态作为训练数据,辅助开发人员编写、修改代码,并实时了解软件......
  • 51定时器中断控制流水灯
    一、实验目的1、了解读取和清零定时器标志位的方法。2、了解定时器中断的方法。3、了解定时器初始化设置的方法。二、实验内容1、完成读取定时器溢出标志位来控制流水灯2、完成定时器中断服务函数控制流水灯三、实验原理只用一个定时器:定时器级联:四、实验电路与程序1、软......
  • Lattice-Based Group Signatures With Time-Bound Keys via Redactable Signatures
    ......
  • 浏览器中跑定时器跑着跑着就慢了(离开当前页面,再次进来后时间会慢一点)
    最近再写一个考试系统,到点交卷,在手机上跑定时器是没问题的,在浏览器上跑的时候,一离开页面(指切换标签页),再次回来时间就会慢很多关于浏览器变慢的原因是,当离开当前页面时,cpu检测到你不在当前页面,为了节省资源,会放慢浏览器的时间。导致进入页面,时间变慢。有没有解决办法呢,当然是有的......
  • ADC和DAC的工作原理及其区别
    ADC和DAC的工作原理及其区别    ADC和DAC都是用于模拟信号与数字信号之间的转换器。    ADC,即模数转换器,是将连续的模拟信号转换为数字信号的电路。其输入为模拟信号,输出为数字信号。ADC的主要组成部分是模拟信号采样模块、模拟信号处理模块、模数转换模块和数字信......
  • golang的打点定时器
    定时器方式1:使用time.NewTicker(时间间隔)来设置定时器//定时器,定义一个1秒间隔的定时器ticker:=time.NewTicker(time.Second)n:=0fori:=rangeticker.C{fmt.Println(i)n++ifn>5{//终止定时器ticker.Stop()return......
  • 定时器(JavaScript)的使用
    前言通过定时器自动的做一些事情,例如发送网络请求一、定时器定时器:定时器可以设定时间自动的做某件事情。定时器是一种方法,不是对象,定时器属于window对象。二、定时器具体内容周期性定时器:间隔一定的时间,自动的做某件事情setInterval(函数名,间隔时间)一次性定时器:延迟多长时间做......
  • Linux下C++实现一个定时器
    要在Linux下实现一个定时器,可以使用以下两种方法:使用系统提供的定时器APILinux系统提供了一些定时器API,如setitimer、timer_create、timer_gettime等,可以使用这些API来实现定时器。以setitimer为例,可以按照以下步骤来使用:1.定义一个itimerval结构体变量,该结构体包含定时器的初......