0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA系列FSP库开发实战指南之电压值转换和生成正弦波数据表

瑞萨嵌入式小百科 来源:野火电子 2026-04-11 16:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

26.3

电压值转换

如果我们直接通过输入一个有效位数为12位的数字值,通过DAC来输出其相应的电压,这样并没有那么直观。但是如果我们可以输入一个电压值,然后通过软件代码把这个电压转换为与其对应的数字值,再把这个数字值写入DA数据寄存器,这样中间经过了一个电压值到DA数据寄存器值的映射转换,可以让我们设置DAC输出电压时变得更加直观

那么如何实现这样的转换呢?以下是D/A数据寄存器值与输出电压值之间的转换公式:

168dfeb6-3493-11f1-90a1-92fbcf53809c.png

点击可查看大图

因此在ADC转换完成之后,我们可以调用FSP库函数R_ADC_Read(),从ADC的数据寄存器里读出上述等式中X的值,从而再经过计算得出对应的电压值。

在上面的公式中:

3.3V表示的是D/A转换的参考基准电压为3.3V;

“Output Voltage”为要输出的目标电压值;

4096等于2的12次方,对应的是DAC的分辨率是12位;

“Setting in DADRn”表示的是输出目标电压值对应需要设置的DA数据寄存器值的值。

最终,我们根据上面的公式写成如下的函数。函数中最后一行通过调用FSP库函数R_DAC_Write()计算结果即“Setting in DADRn”的值写入DA数据寄存器。

左右滑动查看完整内容

/**
*@brief设置当前的电压
*@param需要控制的电压(范围为0~3.3V)
*@retval无
*/
voidDAC_SetVoltage(float voltage)
{
uint16_t dac_data;
dac_data = (uint16_t)(4096*((voltage)/3.3f));
R_DAC_Write(&g_dac0_ctrl, dac_data);
}

26.4

生成正弦波数据表

要输出正弦波,实质是要控制DAC以v=sin(t)的正弦函数关系输出电压,其中v为电压输出,t为时间。

而由于模拟信号连续而数字信号是离散的,所以使用DAC产生正弦波时,只能按一定时间间隔输出正弦曲线上的点,在该时间段内输出相同的电压值,若缩短时间间隔,提高单个周期内的输出点数,可以得到逼近连续正弦波的图形,见图26_3,若在外部电路加上适当的电容滤波,可得到更完美的图形。

16e6dfc2-3493-11f1-90a1-92fbcf53809c.png

图26‑3 DAC按点输出正弦波数据

(左:32个点,右:128个点)

由于正弦曲线是周期函数,所以只需要得到单个周期内的数据后按周期重复即可,而单个周期内取样输出的点数又是有限的,所以为了得到呈v=sin(t)函数关系电压值的数据通常不会实时计算获取,而是预先计算好函数单个周期内的电压数据表,并且转化成以DAC寄存器表示的值。

如sin函数值的范围为[-1: +1],而RA6M5的DAC输出电压范围为[0~3.3]V,按12位DAC分辨率表示的方法,可写入寄存器的最大值为212=4096,即范围为[0:4096]。所以,实际输出时,会进行如下处理:

1)抬升sin函数的输出为正值:v=sin(t)+1,此时,v的输出范围为[0:2];

2)扩展输出至DAC的全电压范围:v=3.3*(sin(t)+1)/2,此时,v的输出范围为[0:3.3],正是DAC的电压输出范围,扩展至全电压范围可以充分利用DAC的分辨率;

3)把电压值以DAC寄存器的形式表示:Reg_val=212/3.3 * v=211*(sin(t)+1),此时,存储到DAC寄存器的值范围为[0:4095];

4)实践证明,在sin(t)的单个周期内,取32个点进行电压输出已经能较好地还原正弦波形,所以在t∈[0:2π]区间内等间距根据上述Reg_val公式运算得到32个寄存器值,即可得到正弦波表;

5)控制DAC输出时,每隔一段相同的时间从上述正弦波表中取出一个新数据进行输出,即可输出正弦波。改变间隔时间的单位长度,可以改变正弦波曲线的周期。

为方便起见,我们使用了PythonMatlab脚本制作正弦波表,脚本的代码存储在本工程的目录下,感兴趣可以打开文件查看,以下列出Python脚本代码,见代码清单26‑1。

列表1:代码清单26‑1

制作正弦波数据表的python脚本

(工程目录下的sinWave.py文件)

左右滑动查看完整内容

#! python3
#coding=utf-8
"""
Python 版本:3.x
外部库:matplotlib1.5.3、numpy1.11.2
运行方式:
在命令行中输入:python sinWave.py
运行结果:
命令行中会打印计算得的各点数据,
在当前目录下会生成py_dac_sinWav.c 文件,包含上述数据,
并且会弹出描绘曲线的对话框。
"""
importmatplotlib.pyplotasplt
importnumpyasnp
importmath
# 修改本变量可以更改点数,如16、32、64 等
POINT_NUM =32
pi = math.pi
# 一个周期POINT_NUM 个点
n = np.linspace(0,2*pi,POINT_NUM)
# 计算POINT_NUM 个点的正弦值
a =map(math.sin,n)
r =[]
foriina:
# 调整幅值至在0~1 区间
i+=1
# 按3.3V 电压调整幅值
i*=3.3/2
# 求取dac 数值,12 位dac LSB = 3.3V/2**12
ri =round(i*2**12/3.3)
# 检查参数
ifri >=4095:
ri =4095
# 得到dac 数值序列
r.append( ri )
print(list(map(int,r)))
# 写入序列到文件
withopen("py_dac_sinWav.c",'w',encoding='gb2312')asf:
print(list(map(int,r)),file= f)
# 绘图
plt.plot(n,r,"-o")
plt.show()

Python脚本的实现原理就是前面介绍的正弦波数据表的制作过程,运行后,该脚本把得到的正弦波表数据输出到目录下的py_dac_sinWav.c文件中,见代码清单26‑2,并且根据取样点描绘出示意图,见图26‑4。Matlab脚本原理相同,此处不再列出,使用C语言也能制作正弦波表。

列表2:代码清单26‑2 生成的正弦波数据表

左右滑动查看完整内容

[2048, 2460, 2856, 3218, 3532, 3786, 3969, 4072, 4093, 4031, 3887, 3668,
3382, 3042, 2661, 2255, 1841, 1435, 1054, 714, 428, 209, 65, 3, 24, 127,
310, 564, 878, 1240, 1636, 2048]
1796040c-3493-11f1-90a1-92fbcf53809c.png

图26‑4 python脚本根据正弦波表描绘的曲线图

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5618

    浏览量

    130386
  • 正弦波
    +关注

    关注

    11

    文章

    662

    浏览量

    59300
  • dac
    dac
    +关注

    关注

    44

    文章

    2844

    浏览量

    197582
  • 输出电压
    +关注

    关注

    2

    文章

    2051

    浏览量

    41282

原文标题:电压值转换&生成正弦波数据表——瑞萨RA系列FSP库开发实战指南(95)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA系列FSP开发实战指南I2C读写EEPROM实验

    使用官方提供的FPS进行编程,官方提供的FPS具有方便、快捷、简洁的特性。
    的头像 发表于 01-27 10:02 3734次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C读写EEPROM实验

    e2studio(1)----芯片搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发
    发表于 09-30 15:28

    我的正弦波数据生成

    我的正弦波数据生成
    发表于 09-23 15:21

    正弦波数据生成

    正弦波数据生成
    发表于 09-21 19:34

    正弦波数据生成

    正弦波数据生成
    发表于 09-21 19:37

    如何用matlab生成正弦波数据

    如何用matlab生成正弦波数据
    发表于 11-22 07:15

    RA4系列开发板体验】开发环境搭建和新手点灯指南

    RA4系列开发板体验】开发环境搭建和新手点灯指南
    发表于 11-24 22:54

    RA4系列开发板体验】7. 用DAC输出正弦波以及余弦波

    之前发帖:【RA4系列开发板体验】1. 新建工程+按键控制LED【
    发表于 12-09 22:56

    RA4系列开发板体验】10. 我的试用总结

    测量摇杆模块偏移量【RA4系列开发板体验】7. 用DAC输出正弦波以及余弦波【
    发表于 12-10 22:34

    RA4系列开发板体验】体验过程

    、使用 RASC 生成 Keil 工程+点亮LED参照“ 【RA4系列开发板体验】2. 使用
    发表于 12-18 16:20

    正弦波数据生成器(正弦波

    网上共享 的 , 正弦波数据生成器(正弦波
    发表于 11-17 11:46 145次下载

    e2studio(1)----芯片搭建FSP环境

    e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发针对
    的头像 发表于 11-14 17:08 3412次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>e2studio(1)----<b class='flag-5'>瑞</b><b class='flag-5'>萨</b>芯片<b class='flag-5'>之</b>搭建<b class='flag-5'>FSP</b>环境

    【有奖直播预报名】电子RA系列产品开发工具FSP4.0.0新特性介绍

    为使用电子RA系列ARM微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件。 直播主题
    的头像 发表于 11-22 12:20 1672次阅读

    【视频教程】RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]

    干货分享 前篇回顾 【视频教程】RA单片机FSP开发(1)环境搭建(带RASC) 【视频教程】
    的头像 发表于 12-06 12:15 2113次阅读

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
    的头像 发表于 06-11 17:21 2185次阅读