打印
[STM32F7]

清零以后维持三分钟的问题

[复制链接]
3340|58
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我正在做一款产品叫试验机,就是给比如钢筋混凝土等做破坏性试验的机器。
用的是STM32F767,有压力传感器、编码器、步进电机驱动器等。
现在正在搞传感器的程序。硬件电路差不多了,做软件。使用传感器要先标定。
标定界面如下:

第一步、传感器空载,什么都不放,点击打点,标定第一个值。采样值就是码值,记下来A
第二步、加500g的砝码,再次点击打点,标定第二个值,记下第二个码值B
第三步、再加500g砝码,再次点击打点,标定第三个值,记下第三个码值C。
标定完,上位机接收下位机发上来的采样值,根据标定的码值和砝码对应的重量计算出实时
压力值并显示出来。

现在问题是,显示出的压力值不稳,跳动有点大。上图右上角那个标有"0.0"的按钮是清零按钮。我是这样做的,点一下清零按钮,
把当前的采样值代替原来标定的码值A,压力值暂时显示为0.可是不一会就变成一个比较小的
值,比如上面的0.1512.老板要求,显示0.0要至少能维持3分钟,而且小数点后一位
也要是0.我上面显示的0.1512最前面以为小数是1,不符合要求。我想不出办法来了,
请高手指点,如何才能达到要求。谢谢!




沙发
hwpga| | 2019-3-9 14:59 | 只看该作者
估计你的ADC程序写的不行
ADC的采样速度要慢,采样间隔要长
假设1MS内你连续采样了10次ADC
压力还没变化就被读走了,导致只有第一次的采样值有效,后面9次的采样都是无效的
ADC采样间隔太短会导致数据就会跳,第一次的值才刷新,新的值又来了

使用特权

评论回复
板凳
hwpga| | 2019-3-9 15:17 | 只看该作者
ADC采样要么用定时器触发,要么用时间片,要根据实际的采样率来写
第一个1MS采样第1次,第2个1MS采样第2次,第3个1MS采样第3次,第4个1MS采样第4次
10MS次之后结果累加,冒泡,计算,这样能保证每一次采样时间和转换时间都足够
采样间隔要也一样几百MS起步,起码要保证上位机读数据这时间内没新的值刷新

使用特权

评论回复
地板
Cjy_JDxy|  楼主 | 2019-3-9 15:24 | 只看该作者
hwpga 发表于 2019-3-9 15:17
ADC采样要么用定时器触发,要么用时间片,要根据实际的采样率来写
第一个1MS采样第1次,第2个1MS采样第2次, ...

for(t=0;t<ADC_CONST;t++)
        {
                AdcResult[t]=Get_Adc(ch);
                delay_ms(10);
        }
一次连续采样10次,10ms采样一次。
采样间隔500ms,还是那样。
采样程序用的是根据原子开发板改的。

使用特权

评论回复
5
hwpga| | 2019-3-9 15:49 | 只看该作者
本帖最后由 hwpga 于 2019-3-9 17:54 编辑

....

使用特权

评论回复
6
Cjy_JDxy|  楼主 | 2019-3-9 15:50 | 只看该作者
hwpga 发表于 2019-3-9 15:49
上位机取走数据后,单片机开始计数,3分钟内下位机不上传数据,也不采样Adc
3分钟后单片机重新开始采样Adc ...

你这个办法太水了吧

使用特权

评论回复
评论
hwpga 2019-3-9 16:10 回复TA
3分钟又不是死等Delay, 单片机CNT计数3分钟,这3分钟内上位机数据就锁存了 
7
Cjy_JDxy|  楼主 | 2019-3-9 16:45 | 只看该作者
hwpga 发表于 2019-3-9 15:49
上位机取走数据后,单片机开始计数,3分钟内下位机不上传数据,也不采样Adc
3分钟后单片机重新开始采样ADC
...

如果传感器上一直没压力,貌似你这个办法管用。如果加了力了呢?
你三分钟传一次数据怎么行呢?实时性也太差了

使用特权

评论回复
8
hwpga| | 2019-3-9 17:13 | 只看该作者
本帖最后由 hwpga 于 2019-3-9 17:51 编辑
Cjy_JDxy 发表于 2019-3-9 16:45
如果传感器上一直没压力,貌似你这个办法管用。如果加了力了呢?
你三分钟传一次数据怎么行呢?实时性也 ...

我明白你想要的功能了
延时3分钟内如果没压力就保持3分钟
如果延时3分钟内有新的压力值和旧的值比较
非最大值
非最小值
大于闽值或者小于闽值区间
新的值替换旧的值刷3分钟



使用特权

评论回复
9
Cjy_JDxy|  楼主 | 2019-3-9 17:16 | 只看该作者
hwpga 发表于 2019-3-9 17:13
我明白你想要的功能了
延时3分钟内如果没压力就保持3分钟
如果延时3分钟内,有新的压力值和旧的值比较大于 ...

是的

使用特权

评论回复
10
xyz549040622| | 2019-3-10 22:35 | 只看该作者
根据你的说法,你老板需要实时的值,还是一个假值呢?实时的话,你的滤波程序没做好,假的话那更简单了。

使用特权

评论回复
11
Cjy_JDxy|  楼主 | 2019-3-11 08:53 | 只看该作者
xyz549040622 发表于 2019-3-10 22:35
根据你的说法,你老板需要实时的值,还是一个假值呢?实时的话,你的滤波程序没做好,假的话那更简单了。 ...

肯定不是假值。

使用特权

评论回复
12
ayl439| | 2019-3-11 09:36 | 只看该作者
ADC是多少位的?ADC型号是?参考电压怎么来的?传感器怎么供电的?传感器输出信号的灵敏度是?线路板怎么画的?传感器量程是多少?

使用特权

评论回复
13
ayl439| | 2019-3-11 10:01 | 只看该作者
这种变化缓慢的直流小信号,ADC程序基本没有什么可玩儿的花哨,最主要的是传感器相关设备和硬件电路选型、设计

使用特权

评论回复
14
Cjy_JDxy|  楼主 | 2019-3-11 10:26 | 只看该作者
ayl439 发表于 2019-3-11 09:36
ADC是多少位的?ADC型号是?参考电压怎么来的?传感器怎么供电的?传感器输出信号的灵敏度是?线路板怎么画 ...

ADC是12位的。ADC是STM32F767内置ADC.参考电压3.3V。传感器板子供电5V。




使用特权

评论回复
15
神奇号| | 2019-3-11 10:41 | 只看该作者
说下我的应用
做气压监测的时候值波动很大,后来硬件上加了个1000uf大电容,好多了。
后来遇到电压监测精度要求高应用,我每一台都标定测试几组值,用MATLAB拟合函数,误差在10MV以内,stm32的AD基准还是1117-3.3,没用专门基准芯片。

使用特权

评论回复
16
ayl439| | 2019-3-11 11:01 | 只看该作者
3.3V参考电压是用的专用基准芯片吗?真心不建议用LDO甚至DCDC作为参考电压,不得不用的话,LDO优于DCDC,对于这种传感器,供电电压也建议和基准同源,比如传感器10V供电,然后把这个10V用精密电阻分压出来3.3V或者其它合适的电压作为基准

分两种情况:
1、AD值波动比较大,从噪声角度考虑;
2、AD值出现缓慢的变化,从系统内各部分的漂移、温漂角度考虑

使用特权

评论回复
17
lancer1189| | 2019-3-11 11:01 | 只看该作者
不晓得不接传感器的时候,你的AD采样值是不是稳定的,可以考虑在传感器放大电路上接个基准电压,传感器有零点漂移,芯片本身也有零点

使用特权

评论回复
18
Cjy_JDxy|  楼主 | 2019-3-11 11:07 | 只看该作者
ayl439 发表于 2019-3-11 11:01
3.3V参考电压是用的专用基准芯片吗?真心不建议用LDO甚至DCDC作为参考电压,不得不用的话,LDO优于DCDC,对 ...

3.3V参考电压用的1117。

使用特权

评论回复
19
ayl439| | 2019-3-11 11:09 | 只看该作者
本帖最后由 ayl439 于 2019-3-11 11:12 编辑

对,这种传感器本身也存在漂移,但是一般不会这么大(如果你图片中给的数字去掉小数点就是AD原始值,或者AD原始值做了一定比例的缩小的话)

还有你吨级的传感器,一次放500g砝码??12位AD??500g/1t,我的天

就说10t吧,10000kg/0.5kg=20000,12位AD合适吗?即便使用最小量程2t的传感器,12位AD都是很勉强的

使用特权

评论回复
20
lancer1189| | 2019-3-11 11:13 | 只看该作者
如果传感器的数据一直稳定不下来,有可能是STM芯片本身的精度不够,毕竟,我们之前做这块的时候,用的是专门的AD采样芯片,而不是STM芯片自带的ADC

使用特权

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

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3530

帖子

19

粉丝