OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13372|回复: 23

程序自动校正STM32的DAC输出值

[复制链接]

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2014-5-15 15:05:57 | 显示全部楼层 |阅读模式
5金钱
在写一个程序,要求DAC经过运放放大5倍之后输出0到12V,采取同相放大器,考虑到电阻的精度问题,移植了原子哥的函数,要调节基准源的大小,现在上司要求,给一条指令,比如发送数据给串口或者是按键,让运放输出自动校正,输出电压值误差尽量小,请问有啥思路可写?之前写了一个函数,输出是只有几mv的误差,但不是自动校正,如下图

基准源电压为2.486V左右,因为要是批量生产的话,电阻的阻值都可能不一样,导致基准源和运放比例输出也不一样

技术交流,Sell 中颖单片机,欢迎私信骚扰
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-5-15 17:08:58 | 显示全部楼层
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-15 18:39:01 | 显示全部楼层
加多一级运放做自动补偿
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-15 20:28:24 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
要求用程序来实现,不理解这个
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-15 20:28:36 | 显示全部楼层
回复【2楼】aleda303:
---------------------------------
怎么反馈呢?
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 08:10:49 | 显示全部楼层
回复【5楼】黑夜之狼:
---------------------------------
AD采集后面的电压进行调整输出吧,应该是这样
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-16 09:12:43 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
上司要求用程序来实现,不是用AD,也不说清楚点,还没那思路
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 11:01:24 | 显示全部楼层
回复【7楼】黑夜之狼:
---------------------------------
直接请教领导怎么实现,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-16 11:39:09 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
其实我也不知道他在说啥,连他自己都说不清楚,也不知道是说不清楚呢还是不愿意说清楚
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 12:25:11 | 显示全部楼层
回复【9楼】黑夜之狼:
---------------------------------
直接请教,让他说明白为止,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-16 13:25:18 | 显示全部楼层
回复【10楼】Badu_Space:
---------------------------------
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 19:56:30 | 显示全部楼层
回复【11楼】黑夜之狼:
---------------------------------
怎么,不愿意说难道?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-16 21:40:39 | 显示全部楼层
回复【12楼】Badu_Space:
---------------------------------
是的,我刚进公司没多久,开始学stm32,现在负责部分PCB整理和子函数编写,很多东西还是不懂,需要时间来学习。怎么说呢,上司整天就是唠叨我不会,也不怎么教人,还得靠自己摸索
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-17 10:54:50 | 显示全部楼层
回复【13楼】黑夜之狼:
---------------------------------
哎,现在的环境就是这样,还是靠自己靠谱一点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-5-17 11:04:49 | 显示全部楼层
回复【14楼】Badu_Space:
---------------------------------
还好,上班的时候还可以看书学习
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-12-6 17:10:08 | 显示全部楼层
反馈我想了下,大概思想就是:.采集实际输出值和设定值进行比对,然后调节输出写入DAC_SetChannel1Data。
我使用了一种方法,但是不成功。
如设置8v,实际采集到为7v。则应该增大输出。8/7是因数。再乘以8.就是该写入的输出值。
不过我还没试成功。调试跟踪是挺好,实际一用就不对,不知道错在哪。
小小蜗牛
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
 楼主| 发表于 2014-12-6 20:42:59 | 显示全部楼层
回复【16楼】jiutianshenjian:
---------------------------------
采集跟输出是两码事
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

1

主题

80

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-6 21:05:03 | 显示全部楼层
是的,采集和输出是两回事。首先是要信任基准,如果批量基准都不一致,就没法办了。用模拟开关或微型继电器切换,需要校准的时候,把基准电压切换至输出采样端,把采集到的和理论基准值比较,得到采样矫正系数。然后是校准放大输出,把采样切换到输出上,因为采样是校准了的,采集的输出值就是正确值,把采集值和理论值比较,得到放大矫正系数。把信号切换到GND,可以进行零点校准。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-12-8 08:49:29 | 显示全部楼层
回复【18楼】好人:
---------------------------------
我现在采集到的和万用表测量的是一样的。所以是以采集到的为基准了。
然后后面你说的没看懂
小小蜗牛
回复

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2012-11-8
在线时间
12 小时
发表于 2014-12-8 17:46:15 | 显示全部楼层
校正起码有个基准和反馈吧
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-12-11 17:51:17 | 显示全部楼层
回复【2楼】aleda303:
---------------------------------
有反馈相关代码可以参考吗?或者讲讲反馈的思路吧。
试了几天跟踪输出是改变了,但实际中输出不确定值。
小小蜗牛
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-12-12 10:02:35 | 显示全部楼层
回复【21楼】jiutianshenjian:
---------------------------------

看 要求 你的 目的是 使得 输出 尽可能接近真实值 。 比如输出8V 就尽量到8V左右
而 电路也好 输出也好, 都会存在误差, 所以要加反馈 实现闭环, 

具体就是 将输出电压 经 降压变换后[注意电路设计] , 返回给单片机ADC,  然后自动调节下。
这种优点 是 连续输出可调, 缺点是 精度受ADC部分的影响。

如果是输出固定电压,可以 降压后 跟一个基准源[比如2.5V] 接比较器, 单片机检测IO电平 进行调节。 一直到最接近输出值。
这种 比较准确, 但是 不能连续输出
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-12-12 10:58:31 | 显示全部楼层
回复【22楼】aleda303:
---------------------------------
第一段:是的。输出的是交流0-300V可调。领导说产品会受室外温度影响,必须反馈调节输出。
第二段:硬件我不懂。是别人搞的。ADC采集到的值,和实际误差在1V以内。
第三段:是固定电压。我dac口输出就是0-3.28V的固定值且线性还可以,测量过dac输出5V,15,30,150,300V基本和理论值一样。

你说的方法是硬件方法吗?硬件是领导设计的,让我必须通过软件解决。C语言代码实现反馈调节。

我目前用的方法是:例如设置输出10V,实际7V。
10-7=3,低了3V,需要提升输出。因为10V对应实际7V,要提升实际的3V必须提升3*(10/7)
将10+ (10/7)*3输出,调试跟踪此时大概14V,拿到交流电去测试,输出比较混乱。几V到几十V两百多V都有。
小小蜗牛
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-12-12 13:14:56 | 显示全部楼层
调节系数 应该通过直流确定。或者通过交流的 峰值【滤波后】确定

用示波器观察信号,看看是不是AD采集的数据有问题,或者是信号本身就衰减了。
如果信号本身就不正确,可能硬件电路设计的有问题。

通过软件 只能做补偿,  但你要测量好,确定到底是不是线性补偿, 是只补偿一个系数即可 还是还需要补偿偏移量。
这些都得经过测量才能判定补偿方式。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 23:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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