[G32R] 【G32R501 Micro-EVB测评】3. DAC测试,用三角函数计算正弦值。

[复制链接]
42|5
stb988 发表于 2025-12-23 12:25 | 显示全部楼层 |阅读模式
#申请原创# #技术资源#       G32R501这款单片机有一个12位的DAC,由一个内部 12 位 DAC 和一个能够驱动外部负载的模拟输出缓冲区组成,可以产生正弦波、方波、三角波等交流波形和直流电压。
     那我就测试测试看看,首先找到DEMO工程,我用的是\device_support\g32r501\examples\eval\dac\dac_ex1_enable 目录下的示例程序,编译下载,打开数据手册,看看是哪个引脚输出,看了一下工程,是dac-a输出
   屏幕截图 2025-12-23 121534.png

屏幕截图 2025-12-23 121706.png

15脚输出,接到了jp1排针上,需要注意的是,参数电压要短接,也就是如图下面的引脚要短接
屏幕截图 2025-12-23 121812.png
然后测试就能输出一个1.6V左右的电压,下面就把代码改一下,让它输出正弦波。

先定义几个宏
  1. #define SINE_SAMPLES    256
  2. #define DAC_MAX         4095
  3. #define DAC_MID         (DAC_MAX / 2)
  4. uint16_t sine_index = 0;
再把下载的while改成如下
  1.     while(1)
  2.     {
  3.         // Generate sine wave using trigonometric function
  4.         // sine_index cycles from 0 to SINE_SAMPLES-1
  5.         float sine_value = sin(2.0f * 3.14159265f * sine_index / SINE_SAMPLES);
  6.         
  7.         // Map sine value from [-1, 1] to [0, DAC_MAX]
  8.         dacval = (uint16_t)(DAC_MID + DAC_MID * sine_value);
  9.         
  10.         // Update DAC
  11.         DAC_PTR[DAC_NUM]->DACVALS.all = dacval;
  12.         
  13.         // Increment index for next sample
  14.         sine_index = (sine_index + 1) % SINE_SAMPLES;
  15.         
  16.         DELAY_US(2);
  17.     }
再来用示波器测一下波形
IMG_20251223_114926.jpg

再来改一个三角波看看
  1.     while(1)
  2.     {
  3.         // Generate triangle wave - interesting sawtooth pattern
  4.         // First half: ramp up from 0 to DAC_MAX
  5.         // Second half: ramp down from DAC_MAX to 0
  6.         if(sine_index < (SINE_SAMPLES / 2))
  7.         {
  8.             dacval = (uint16_t)((sine_index * 2 * DAC_MAX) / SINE_SAMPLES);
  9.         }
  10.         else
  11.         {
  12.             dacval = (uint16_t)(((SINE_SAMPLES - sine_index) * 2 * DAC_MAX) / SINE_SAMPLES);
  13.         }
  14.         
  15.         // Update DAC
  16.         DAC_PTR[DAC_NUM]->DACVALS.all = dacval;
  17.         
  18.         // Increment index for next sample
  19.         sine_index = (sine_index + 1) % SINE_SAMPLES;
  20.         
  21.         DELAY_US(2);
  22.     }
再看看波形
IMG_20251223_115326.jpg
今天就测到这里,感谢阅读,帮忙点个赞吧!
水之呢喃 发表于 2025-12-24 10:09 | 显示全部楼层
楼主 这个波形生成有使用芯片的数学协处理器吗?
星云避风港 发表于 2025-12-27 22:46 | 显示全部楼层
波形看上去还是不错的吗?
话说楼主,把波形放大后,平滑效果如何?
星云避风港 发表于 2025-12-27 22:56 | 显示全部楼层
看上去还是使用专用协处理器来计算太方便,效果也好
 楼主| stb988 发表于 2025-12-28 08:56 | 显示全部楼层
这个没有用专用函数功能,到时候再放大看看
懒癌晚期患者 发表于 2026-1-30 11:42 | 显示全部楼层
G32R501的DAC功能确实强大,能够输出多种波形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

438

帖子

2

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