[资料干货] 两点称重技术,网上搜不到的重点(四):双AD测量

[复制链接]
276|0
手机看帖
扫描二维码
随时随地手机跟帖
yyy71cj|  楼主 | 2022-5-12 09:57 | 显示全部楼层 |阅读模式
本帖最后由 yyy71cj 于 2022-5-13 10:27 编辑

#申请原创#      @21小跑堂
一、为什么要用双AD测量
        既然单AD能做的事,我们为什么要引入双AD呢?
        很显然,凡事都是有原因的。让我们仔细看一下(三)中纠偏的5条吧:
        1、选择刚性较好的受力支撑材料;
        2、提高机械加工工艺,生产出精度高的工件,例如孔位准确,孔垂直度高;
        3、尽量减少机械自重在两个传感器上的分摊偏差;
        4、选择固有参数尽量一致的传感器配对使用;
        5、通过分别在两个传感器+EXE端各接一个电位器,来调节测值纠偏。
        现在,我们就针对这5条,逐一哭一下难:
        1、我就没有刚性较好的材料,我只想用塑料材料,这个开模量产容易实现,成本低;
        2、我这民间造就是不谈精度,否则,我的成本就太高了;
        3、机械设计我们一向都是凭眼撸的,没有工程师精准设计,分摊偏差是不可能减少的,不但不能减少,还不能保证不同结构偏差一致;
        4、传感器配对?供应商不好找,而且这不也增加了成本吗?
        5、电位器调节?不可能的!出厂调节保证不了运输到客户手里仍然有效,也不能保证今天调节了到明天仍然有效,更无法预知客户能够接受这种专业性的操作。
        总之,如果你的投资人想要随心所欲地做这个秤,这5条哪一条他都不能接受。他能接受的,是他随心所欲地做一个秤出来,你的板子装上去都能用,经过暴力运输后,到客户手里仍然能用。
        这个时候,技术的出路,就只有修改了,从单AD改为双AD。

二、双AD的优缺点
        双AD的优点是,把纠偏工作完全转换成程序员的工作,不再需要生产人员干预,只需要按照程序员要求的操作方法操作,就可以了。
        双AD的缺点是,成本高哇!一片ADS1230好多刀呢……而且,增加一片ADS1230,你以为你原来的单片机能够接受吗?
        当然,从另一个角度讲,也许增加一片ADS1230,更换一片单片机,这与实现上面的纠偏5条来说,这种成本增加根本不是事儿。
        这样,改单为双,就十分势在必行了!随心所欲再一次战胜了工匠精神。

三、变更
        其实,就是加一个ADC的事,并没有多少麻烦。比如可以如下(如图4-1):
1.jpg

图4-1

        然后,事实上,我的板子没有这个例子这么宽裕,真实的情况是下面的样子(如图4-2):
2.jpg

图4-2

        一看这数码管、这LED灯、这按键,就知道口线没那么富裕。其原理图如下(如图4-3):

4.jpg

图4-3

        只有一个空脚。难道要换单片机?换单片机就啰嗦了……谁换谁知道。于是我就做了一个前无古人后无来者的决定:就靠那一个空脚了!将WSCLK与WSCLK2共用,将WPDWN与WPDWN2共用。当然,这得假设这两个ADC能同步工作的前提下。
        当然,这样做,我心里一百二十个不安!天知道这样冒险的操作,会不会安全?于是我就先将两板合一,做个测试。如图4-4:
26.jpg

图4-4

        于是,测试板就成了下面的样子(如图4-5):
25.jpg

图4-5

        讲解原理图就做如下修改吧(如图4-6):
1.jpg

图4-6


四、撸码
        接下来,最迫不及待的事,自然是要验证这样做是否可行了。
        撸码之前,我做了一个推测:假设ADC1因为数据就绪而产生了中断,此时的ADC2应该是啥样的呢?如果ADC2已经就绪,我在取ADC1数据的同时取ADC2的数据理应能够成功取得;若ADC2数据未就绪,考虑同一厂家批量制造的芯片性能差异不大,在程序内经过几个时钟延迟后,ADC2应该也能就绪,此时取数,也理应能够成功取得。
        真是太完美了!
        先增加PP_WEIGHT_SDA2的定义:
#define P_WEIGHT_CLK                                RCC_AHBPeriph_GPIOA
#define P_WEIGHT                                                GPIOA
#define PP_WEIGHT_SDA                                GPIO_Pin_0
#define PP_WEIGHT_SCL                                GPIO_Pin_1
#define PP_WEIGHT_ADRST                        GPIO_Pin_2
#define PP_WEIGHT_SDA2                                GPIO_Pin_3
       再增加高低信号定义:
#define SDA2_0    GPIO_ResetBits(P_WEIGHT, PP_WEIGHT_SDA2)
#define SDA2_1    GPIO_SetBits(P_WEIGHT, PP_WEIGHT_SDA2)
       增加AD2的读数变量定义:
int32 AdWeight2 = 0;

        借助PA0口的外中断0,来读取数据:
void EXTI0_1_IRQHandler(void)
{
        uint8 i;
        
        if(EXTI_GetITStatus(EXTI_Line0)!=RESET)  
        {
                SCL_0;
                AdWeight = 0;                        AdWeight2 = 0;
                for(i=0; i<20; i++)
                {
                        SCL_1;
                        AdWeight <<= 1;                        AdWeight2 <<= 1;
                        SCL_0;
                        if(GPIO_ReadInputDataBit(P_WEIGHT, PP_WEIGHT_SDA)==Bit_SET) AdWeight++;
                        if(GPIO_ReadInputDataBit(P_WEIGHT, PP_WEIGHT_SDA2)==Bit_SET) AdWeight2++;
                }
                for(i=0; i<4; i++) { SCL_1; SCL_0; }
               
                if(AdWeight > 0x7ffff) AdWeight |= 0xFFF00000;  //小于2.5V输出负值,需求码
                if(AdWeight2 > 0x7ffff) AdWeight2 |= 0xFFF00000;
        }
               
        //退出中断时注意清除标志位
        EXTI_ClearFlag(EXTI_Line0);
}  
       AD值取进来了,一切就都尽在掌握之中了。

五、fail与retry
        读数一看,哦嚯!两个值始终一样!咋试咋都这样!fail!这个打击呀,让我之前的分析都无地自容!好吧,我承认此时我有点手足无措了,或许一番折腾之后,还是要换单片机,重新打样,走一个漫长的历程。不过我始终还是抱有幻想。我知道这个时候我取弄示波器看到底发生了什么,也未必能看清什么,我还是盲分析吧,因为我感觉我对这些技术都了如指掌了,只是在实践上,还欠科学一个失败。
        既然,假设俩芯片可以同步取数失败,那就异步好了!可是,因为共用一根时钟线,对一个ADC的取数操作,对另一个ADC所产生的影响……唉!后果不堪设想啊!但是我必须要retry一下,因为成功的诱惑,太……。于是,将外中断3独立了出来。重新初始化,复制外中断0的代码修改一下(太没技术含量了,所以此处代码略)。
        再读数一看,嘿!正常了!(此处图省略!)真的好意外呀!为什么一样的ADC,就不能同步取数呢?我带着这样的疑问,PASS了这个疑问。总之,我只是想取到两个传感器各自的数罢了,没有兴趣去研究它为什么。

六、原始数据
        有了测试模型,我们就需要获取相应的数据以助分析。下面是通过在keil的debug下获得的5kg、10kg、20kg砝码相应原始数据(如图4-7):
1.png

图4-7

        从采集的数据来看,这组数据还算有规律吧,接下来就是分析了。



此部分内容已被设置为付费内容,您可以在支付 299 元 人民币后浏览本楼层全部付费内容点击购买


九、纠偏后的称重
        结果直接看图吧。
        10kg(如图4-14、图4-15、图4-16):
12.jpg

图4-14

13.jpg

图4-15

14.jpg

图4-16

        20kg(如图4-17):
15.jpg

如图4-17

        都在预期精度范围以内,就不必多说了。

十、最小称重
        最小称重与自动去漂是相冲突的,我们得有一个正确的抉择。将一个小重量的重物放在秤上,如果重量不被清0,说明该重量没有被去漂。根据这个规则,修改零漂上限(注意,这里的零漂要将两个传感器重量相加之后再计算,切勿单个计算),自己可以调试一下秤的最小称重(如图4-18)。
16.jpg

图4-18



使用特权

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

本版积分规则