63|1

2919

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

【Follow me第二季第3期】扩展任务-简易信号发生器项目DSP版 [复制链接]

 

1、项目介绍

本项目使用mcu的DSP作为计算引擎,通过控制DAC每个周期的输出生成正弦函数信号,通过控制取值的步长控制周期。

思路设计:

1.user key 1(用户按键1):控制信号的频率,控制修改timer的计时间隔。
2.user key 2(用户按键1):控制信号是否输出,信号关闭时,按键开启输出。信号输出时,按键关闭输出。
3.串口输出项目运行信息
4.系统使用固定时常作为DAC电压输出计时控制,通过计算值作为信号发生器的信号波形值。
2、项目过程
本来使用vscode+cmake组合来开发项目,但是计算正弦函数的时候无法引用函数,所以尝试使用DSP库作为数学函数的计算程序。本次测试就是使用DSP的版本。
配置过程,除了软件栈之外,需要勾选CMSIS5-DSP软件组件包。这个非常重要。
还有一处关键DAC配置,需要打开输出过滤。否则无法输出
 
  配置完成后,创建项目。
3、程序代码
(1)使用vscode打开代码。增加arm_math.h引用。
#include <math.h>
#include <arm_math.h>

关键的是将标准库math.h中的sin()修改为arm_sin_f32()函数。

while (1)
    {
        
        if(g_sw1_press)
        {
            freq = (uint16_t) ( freq + 1 )%10;
            g_sw1_press = false;
            APP_ERR_PRINT("Freg Add\r\n");
        }

        if(g_sw2_press)
        {
            g_dac_sw = !g_dac_sw;

            if(g_dac_sw)
            {
                 APP_ERR_PRINT("OUT ON\r\n");
            }
            else
            {
                APP_ERR_PRINT("OUT OFF\r\n");
            }
             g_sw2_press = false;

        }

        cycle += cyclePien/(freq+1);

        if (cycle >= (2 * PI))
        {
            cycle = 0;
        }
        
        //dac_value = (sin(cycle) + 1)  * 2047;
        dac_value = (arm_sin_f32(cycle) + 1)  * 2047;

        if(!g_dac_sw)
        {
            dac_value = 0;
        }
        output = (uint16_t) dac_value;

        err = R_DAC_Write (&g_dac0_ctrl, output);
	    //err = R_DAC_Start (&g_dac0_ctrl);    R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS);

        /* Delay */
        //R_BSP_SoftwareDelay(delay, bsp_delay_units);
    }
}

关键代码如上。

(2)编译构建

需要注意,先使用cmake configure命令。然后执行构建过程。

将程序烧录到开发板。

4、测试过程

  按键user1 ,开启输出。

 

按键user2 ,改变频率。
20241219_045049000_iOS

 
 
 

 

点赞 关注
 
 

回复
举报

2919

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

项目的程序代码,包含FSP配置文件和项目源码

FSP_DAC_EXT.zip (6.03 MB, 下载次数: 0)
 
 
 

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

随便看看
查找数据手册?

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-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表