查看: 2923|回复: 5

[其他] 每天解决一个问题05天02问 :YL-KL26Z的DAC实现正弦波(KSDK库)

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-8-29 23:36:37 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2015-9-6 00:00 编辑

    虽然YL-KL16Z的DAC模块还有一些问题,但是使用DAC的基本用法,终于生成了正弦波,其它方法随后再练习。给大家分享一下。

    ==================================================

    一、问题描述:
    想要使用DAC生成一个正弦波,主要练习YL-KL26Z的DAC模块的使用,这个DAC可是随后使用YL-KL26Z发声的基础,为播放音乐作准备。


    二、解决方法:
    1、首先采用DAC模块来实现
    2、编程使用KDS3.0+KSDK1.2库,非PE
    3、基本思路:
    (1)正弦波数据使用事先生成,存放在FLASH中。
    可参考:lkl0305——每天解决一个问题2 :EXCEL生成DAC用正弦波数据
    https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=600763&fromuid=336767
    (2)使用定时器PIT定时100us,每定时时间到,输出下一个正弦波数据。
    (3)DAC模块采用最基本的配置,不使用中断和DAC缓冲,参考电压VDDA,软件触发DAC
    4、DAC部分:

    先定义DAC配置结构体
    3591.jpg
    初始化DAC模块
    3592.jpg
    需要DAC转换时,使用DAC_DRV_Output函数即可:
    3593.jpg

    5、上个运行效果吧,在示波器上看到的效果,还行!

    3594.jpg

    6、上个程序。
    主程序:
    1. #include "fsl_device_registers.h"
    2. #include "fsl_dac_driver.h"
    3. #include "fsl_pit_driver.h"
    4. #include "board.h"

    5. #define BOARD_DAC_INSTANCE        0
    6. #define BOARD_PIT_INSTANCE        0

    7. volatile bool pitIsrFlag = false;
    8. extern const uint16_t sin_wave[];

    9. int main(void)
    10. {
    11.     /* Write your code here */
    12.     dac_converter_config_t dacUserConfig;
    13.    
    14.     uint32_t i;

    15.         pit_user_config_t chn0Confg = {
    16.                         .isInterruptEnabled = true,
    17.                         .periodUs = 100u
    18.         };

    19.     hardware_init();

    20.     DAC_DRV_StructInitUserConfigNormal(&dacUserConfig);
    21.     DAC_DRV_Init(BOARD_DAC_INSTANCE, &dacUserConfig);

    22.     PIT_DRV_Init(BOARD_PIT_INSTANCE, false);
    23.     PIT_DRV_InitChannel(BOARD_PIT_INSTANCE, 0, &chn0Confg);
    24.     PIT_DRV_StartTimer(BOARD_PIT_INSTANCE, 0);

    25.     /* This for loop should be replaced. By default this loop allows a single stepping. */
    26.     for (;;) {
    27.         for (i = 0; i < 360; i++) {
    28.             while (false == pitIsrFlag) {
    29.                 ;
    30.             }
    31.             pitIsrFlag = false;

    32.             DAC_DRV_Output(BOARD_DAC_INSTANCE, sin_wave[i]);
    33.         }
    34.     }
    35.     /* Never leave main */
    36.     return 0;
    37. }
    38. ////////////////////////////////////////////////////////////////////////////////
    39. // EOF
    40. ////////////////////////////////////////////////////////////////////////////////
    复制代码

    PIT中断程序:
    1. #include <stdlib.h>
    2. #include <assert.h>
    3. #include "fsl_pit_driver.h"

    4. /*******************************************************************************
    5. * Variables
    6. ******************************************************************************/
    7. extern volatile bool pitIsrFlag;
    8. /*******************************************************************************
    9. * Code
    10. ******************************************************************************/

    11. /*!
    12. * @brief System default IRQ handler defined in startup code.
    13. */
    14. void PIT_IRQHandler(void)
    15. {
    16.         if (PIT_HAL_IsIntPending(g_pitBase[0], 0)) {
    17.                 /* Clear interrupt flag.*/
    18.                 PIT_HAL_ClearIntFlag(g_pitBase[0], 0);
    19.                 pitIsrFlag = true;
    20.         }
    21. }

    22. /*! @} */

    23. /*******************************************************************************
    24. * EOF
    25. ******************************************************************************/
    复制代码


    正弦波数据程序:

    1. #include "stdint-gcc.h"

    2. const uint16_t sin_wave[360] = {
    3.         0x0800, 0x0823, 0x0847, 0x086B, 0x088E, 0x08B2, 0x08D6, 0x08F9,
    4.         0x091C, 0x0940, 0x0963, 0x0986, 0x09A9, 0x09CC, 0x09EF, 0x0A11,
    5.         0x0A34, 0x0A56, 0x0A78, 0x0A9A, 0x0ABC, 0x0ADD, 0x0AFF, 0x0B20,
    6.         0x0B40, 0x0B61, 0x0B81, 0x0BA1, 0x0BC1, 0x0BE0, 0x0BFF, 0x0C1E,
    7.         0x0C3D, 0x0C5B, 0x0C78, 0x0C96, 0x0CB3, 0x0CD0, 0x0CEC, 0x0D08,
    8.         0x0D24, 0x0D3F, 0x0D5A, 0x0D74, 0x0D8E, 0x0DA7, 0x0DC0, 0x0DD9,
    9.         0x0DF1, 0x0E09, 0x0E20, 0x0E37, 0x0E4D, 0x0E63, 0x0E78, 0x0E8D,
    10.         0x0EA1, 0x0EB5, 0x0EC8, 0x0EDB, 0x0EED, 0x0EFE, 0x0F0F, 0x0F20,
    11.         0x0F30, 0x0F3F, 0x0F4E, 0x0F5C, 0x0F6A, 0x0F77, 0x0F84, 0x0F8F,
    12.         0x0F9B, 0x0FA6, 0x0FB0, 0x0FB9, 0x0FC2, 0x0FCB, 0x0FD2, 0x0FD9,
    13.         0x0FE0, 0x0FE6, 0x0FEB, 0x0FF0, 0x0FF4, 0x0FF7, 0x0FFA, 0x0FFC,
    14.         0x0FFE, 0x0FFF, 0x0FFF, 0x0FFF, 0x0FFE, 0x0FFC, 0x0FFA, 0x0FF7,
    15.         0x0FF4, 0x0FF0, 0x0FEB, 0x0FE6, 0x0FE0, 0x0FD9, 0x0FD2, 0x0FCB,
    16.         0x0FC2, 0x0FB9, 0x0FB0, 0x0FA6, 0x0F9B, 0x0F8F, 0x0F84, 0x0F77,
    17.         0x0F6A, 0x0F5C, 0x0F4E, 0x0F3F, 0x0F30, 0x0F20, 0x0F0F, 0x0EFE,
    18.         0x0EED, 0x0EDB, 0x0EC8, 0x0EB5, 0x0EA1, 0x0E8D, 0x0E78, 0x0E63,
    19.         0x0E4D, 0x0E37, 0x0E20, 0x0E09, 0x0DF1, 0x0DD9, 0x0DC0, 0x0DA7,
    20.         0x0D8E, 0x0D74, 0x0D5A, 0x0D3F, 0x0D24, 0x0D08, 0x0CEC, 0x0CD0,
    21.         0x0CB3, 0x0C96, 0x0C78, 0x0C5B, 0x0C3D, 0x0C1E, 0x0BFF, 0x0BE0,
    22.         0x0BC1, 0x0BA1, 0x0B81, 0x0B61, 0x0B40, 0x0B20, 0x0AFF, 0x0ADD,
    23.         0x0ABC, 0x0A9A, 0x0A78, 0x0A56, 0x0A34, 0x0A11, 0x09EF, 0x09CC,
    24.         0x09A9, 0x0986, 0x0963, 0x0940, 0x091C, 0x08F9, 0x08D6, 0x08B2,
    25.         0x088E, 0x086B, 0x0847, 0x0823, 0x0800, 0x07DC, 0x07B8, 0x0794,
    26.         0x0771, 0x074D, 0x0729, 0x0706, 0x06E3, 0x06BF, 0x069C, 0x0679,
    27.         0x0656, 0x0633, 0x0610, 0x05EE, 0x05CB, 0x05A9, 0x0587, 0x0565,
    28.         0x0543, 0x0522, 0x0500, 0x04DF, 0x04BF, 0x049E, 0x047E, 0x045E,
    29.         0x043E, 0x041F, 0x0400, 0x03E1, 0x03C2, 0x03A4, 0x0387, 0x0369,
    30.         0x034C, 0x032F, 0x0313, 0x02F7, 0x02DB, 0x02C0, 0x02A5, 0x028B,
    31.         0x0271, 0x0258, 0x023F, 0x0226, 0x020E, 0x01F6, 0x01DF, 0x01C8,
    32.         0x01B2, 0x019C, 0x0187, 0x0172, 0x015E, 0x014A, 0x0137, 0x0124,
    33.         0x0112, 0x0101, 0x00F0, 0x00DF, 0x00CF, 0x00C0, 0x00B1, 0x00A3,
    34.         0x0095, 0x0088, 0x007B, 0x0070, 0x0064, 0x0059, 0x004F, 0x0046,
    35.         0x003D, 0x0034, 0x002D, 0x0026, 0x001F, 0x0019, 0x0014, 0x000F,
    36.         0x000B, 0x0008, 0x0005, 0x0003, 0x0001, 0x0000, 0x0000, 0x0000,
    37.         0x0001, 0x0003, 0x0005, 0x0008, 0x000B, 0x000F, 0x0014, 0x0019,
    38.         0x001F, 0x0026, 0x002D, 0x0034, 0x003D, 0x0046, 0x004F, 0x0059,
    39.         0x0064, 0x0070, 0x007B, 0x0088, 0x0095, 0x00A3, 0x00B1, 0x00C0,
    40.         0x00CF, 0x00DF, 0x00F0, 0x0101, 0x0112, 0x0124, 0x0137, 0x014A,
    41.         0x015E, 0x0172, 0x0187, 0x019C, 0x01B2, 0x01C8, 0x01DF, 0x01F6,
    42.         0x020E, 0x0226, 0x023F, 0x0258, 0x0271, 0x028B, 0x02A5, 0x02C0,
    43.         0x02DB, 0x02F7, 0x0313, 0x032F, 0x034C, 0x0369, 0x0387, 0x03A4,
    44.         0x03C2, 0x03E1, 0x0400, 0x041F, 0x043E, 0x045E, 0x047E, 0x049E,
    45.         0x04BF, 0x04DF, 0x0500, 0x0522, 0x0543, 0x0565, 0x0587, 0x05A9,
    46.         0x05CB, 0x05EE, 0x0610, 0x0633, 0x0656, 0x0679, 0x069C, 0x06BF,
    47.         0x06E3, 0x0706, 0x0729, 0x074D, 0x0771, 0x0794, 0x07B8, 0x07DC
    48. };

    复制代码

    三、感想与收获:
    1、DAC的基本功能有所了解,也有一些问题有待解决。

    我知道答案 目前已有5人回答

    评分

    参与人数 1NXP金币 +20 收起 理由
    小七 + 20

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    19

    主题

    401

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1114
    最后登录
    2017-8-16
    发表于 2015-8-30 08:53:26 | 显示全部楼层
    赞一个,  比我用TPM生成的波形好多了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-30 11:18:58 | 显示全部楼层
    673402618 发表于 2015-8-30 08:53
    赞一个,  比我用TPM生成的波形好多了

    是呀,这个波型不不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-8-30 12:56:17 | 显示全部楼层
    这一贴用到了之前的很多技术,如excel生成正弦波,头文件,
    freescaleic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-30 13:45:16 | 显示全部楼层
    JackieLaura 发表于 2015-8-30 12:56
    这一贴用到了之前的很多技术,如excel生成正弦波,头文件,

    也是边学边总结
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1509
    最后登录
    2018-5-28
    发表于 2015-8-31 11:18:46 | 显示全部楼层
    不错,留用
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 20:16 , Processed in 0.101576 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表