zoukankan      html  css  js  c++  java
  • PMSM3_1的电流采样问题

                                PMSM3_1的电流采样问题 

                                                        

    PMSM3_1中,需要对3相的相电流进行采样,而在实际系统中,相电流并不是直流信号,而是近似正弦的信号,所以在一个周期内,电流肯定有正也有负。但是2812的模数12位采集器是单极性的。怎样通过把一个双极性的信号用单极性的AD采集,并表达成相应的12位数字量,这个问题值得我们思考和讨论。 

    虽然德州公司的PDF技术文档已经介绍了相关的解决方法,但是应该还有人不大能够理解。 

    解决这个问题,一般要做好两个方面的工作:

    一,硬件;二,软件。 

    硬件上,由于一般采集过来的信号是双极性的,最大范围是-a~a,这样AD是无法采集-a~0的数据的,为了做到顺利采集,我们可以让电流为0的时候,输出电压是1.5伏特,而当电流为-a的时候输出电压是0,这样我们必须调整信号范围,一般是采用运算放大器和直流电源偏压的办法做到的。可以令b=1.5+a/2,这样b的范围就是0~3伏特,符合2812的AD要求. 

    软件上,参考德州公司的技术文档ileg2_dcbus_drv.pdf,对采集过来的数字进行异或运算,这个计算设计的很巧妙,绝对出自经验丰富的程序员。 

    为什么说他做的巧妙呢?原因就是这样的计算很简单而且效果也很好。大家学过单片机的都知道,为了表示一个有符号的整型,我们用的是int,对于PMSM3_1而言,当定义int16的时候也就意味着这个数字的最高位是符号位,其他的位才是数字位。另外负数的数字位是通过求反加1才得到的。 

    对于采集过来的12位数据他们的范围是0000~FFF0,但是这个数字实际上是无符号的,当我们进行了异或运算之后,我们会发现得到的结果恰好就是以负数为补码形式表示的有符号数字。 

     请看一下,当同8000异或之后,原来的1.5伏到3.0伏的范围变成了0000~7FF0,这个范围就是正数的范围,也恰好对应输入的0~a安培的电流。另一方面,0~1.5伏对应的是8000~8FFF,相应的电流是-a~0安培。需要注意的是,-a虽然是最大的负电流,但是他的数字位却是000,是最小的。因为负数的表示是求反加一的计算,而不是仅仅符号位的改变。

    默认电流的零点永远是1.5V????? 看controlSuite

    ============================================


     输入系统的有正有负的模拟信号加上了偏置变成全正信号才输入AD的,所以在AD转换后需要将无符号数转换成有符号数只需要减去加上的这个偏置就行。如果AD转换为10为,则减去偏置512.

        AD转换后的信号为无符号数,需要进行转换后变成有符号数才能进行后续处理。于是在AD转换后将最高位取反,就可以将AD转换后的无符号数变成有符号数。

       如果AD转换后是10位,那么转换时只需减去512就行,则将最高位取反。最高位为1,说明无符号数大于512,最高位取反为0,还是正数。最高位为0,所以无符号数小于512,最高位取反为1,为负数。即将最高位取反,就相当于减去了512.


  • 相关阅读:
    sql server执行存储过程慢的问题
    Windows service
    moss网站模板的一些问题
    ACM题解报告——HD1012
    ACM题解报告——HD1496
    ACM题解报告——HD1253
    ACM题解报告——进制数取于余
    ACM题解报告——HD1058
    ACM题解报告——HD1548
    ACM解题报告HD1015
  • 原文地址:https://www.cnblogs.com/iable/p/4206829.html
Copyright © 2011-2022 走看看