打印

算法问题:ADC采集第一个点平衡

[复制链接]
1372|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerkoh|  楼主 | 2020-8-28 13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 背景
    1.IO1=周期脉冲输出口   
    2.IO2=DAC输出控制口   12位DAC
    3.IO3=ADC采样输入口   12位ADC

2. 功能
    IO1周期的发送脉冲LED光,经过光学电路后,会有光返回,利用photodiode接收光返回值后
    再运放放大电压值,就会有IO3的ADC可采样

    然后在脉冲高变低 LED熄灭时,读取返回的ADC的值,这里我们规定了ADC值要2000,并且保持±1% 也就是1980到2020才能正常
    ADC的返回值会随着外界各种情况变化,但我们需要采样时保持其第一个采样点必须2000,±1%,只有第一个点对了,后面再分组采样ADC。
    这里如何保持第一个点是2000,在电路设计时就加了运放可通过IO2的DAC去控制IO1的光强度,此时如果检测到ADC返回2099就DAC调低,
    反之,如果检测到ADC返回1966就DAC调高。 通过调到2000,±1%时,再采样的后面几组才有实际意义。

3. 难点
    现在我利用2个定时器,1个发送周期的LED脉冲;
    另外一个定时器,在脉冲发送结束了,就去间隔采样;
    但是这个时候发现很难调平衡±1%,目前可调到15%的样子,晃动厉害;
    是否有什么算法可快速平衡且平稳?
    这里面有什么好的办法和算法来实现吗?

    目前我的方法是,定时器A等待脉冲高LED发光结束,就立刻采样ADC,如果不是2000,±1%,就根据偏离的值大小,用±100,±50, ±10,±5,±1来调节使它靠近2000.
    注意有时候返回可能是4000,所以要±100,甚至±1000的去操作。
    等待靠近了2000 满足±1%了,就间隔us去 采样 n组ADC。这样通过这些ADC就能得到有效值。

使用特权

评论回复
评论
zyj9490 2020-8-31 13:47 回复TA
思路不对吧,发光即时决定了测光强的AD 值,无论怎么快速AD,也会受LED熄灭的影响。 

相关帖子

沙发
optical85| | 2020-8-28 13:58 | 只看该作者
PI控制。
先做比例控制吧。调节量正比于返回值(4000)与设定值(2000)的误差(+2000)。比例系数自己调节(比如0.1)。
如果在接近2000时过调比较厉害,可以再加上积分调节。

使用特权

评论回复
板凳
xyz549040622| | 2020-8-28 15:17 | 只看该作者
楼上说的对,其实就是类似PID的调节,用查表法可以实现的,这样也比较快。
但问题是,即使你这个算法很慢,也应该会最终稳定的,为什么会有那么大的抖动呢?
1.你ad读一个静止的光信号,本身就是变化的
2.你的光信号不稳定,本身就是变化的
需要搞懂这两个,到底误差哪里来的。

使用特权

评论回复
地板
jerkoh|  楼主 | 2020-8-28 17:02 | 只看该作者
光信号返回后经过PhotoDiode采集再经过运放到ADC 被采集,12bit ADC采样时稳定性不怎么样。
导致不停在用DAC调整其发射LED的强度。
我试下看PID算法来调节

使用特权

评论回复
5
jerkoh|  楼主 | 2020-8-28 17:10 | 只看该作者
本帖最后由 jerkoh 于 2021-5-17 11:56 编辑

请大伙帮忙分析下


使用特权

评论回复
6
chongdongchen| | 2020-8-29 16:53 | 只看该作者
应用在高速响应场合?
环境抖动幅度太大引起的吧

使用特权

评论回复
7
xyz549040622| | 2020-8-30 18:44 | 只看该作者
理论上你可以,可是由于你的ad不稳定,所以产生了误差,所以我认为你首先还是要要ad稳定,起码静止的稳定,然后是dac输出,到adc读回来稳定,是有个滞后过程的,把这段要找出来进行滤波。

使用特权

评论回复
8
jrcsh| | 2020-8-31 02:17 | 只看该作者
用模拟电路辅助一下不是很轻松吗!   

TL431 、LM393 。。。。。。 直接就把光量维持在 2000  在由MCU 去控制这东西

使用特权

评论回复
9
steelen| | 2020-8-31 16:18 | 只看该作者
猝灭时间测量?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

1402

帖子

2

粉丝