两点称重技术,网上搜不到的重点(四):双AD测量

一、为什么要用双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):

图4-1


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

图4-2

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

图4-3


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

图4-4


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

图4-5


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

图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)

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):

图4-7

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


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

图4-14

图4-15

图4-16


        20kg(如图4-17):

如图4-17


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

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

图4-18
---------------------
作者:yyy71cj
链接:https://bbs.21ic.com/icview-3221774-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值