新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32的PCL6045B開(kāi)發(fā)體會(huì)

        基于STM32的PCL6045B開(kāi)發(fā)體會(huì)

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏

        于是我猜想是不是我寫(xiě)入的數(shù)據(jù)不能改變高16位,只能改變低16位.
        所以我就做了以下測(cè)試工作:
        現(xiàn)在發(fā)現(xiàn)向DSP各軸緩沖區(qū)寫(xiě)入數(shù)據(jù)時(shí),總是不能寫(xiě)進(jìn)去高16位,而低十六位能寫(xiě)進(jìn)去。比如,我寫(xiě)p645_wreg(AXS_AX,WRENV1,0x00000001); //控制脈沖類型。
        p645_wreg(AXS_AX,WRENV1,0x00000002);
        p645_wreg(AXS_AX,WRENV1,0x00000003);
        分別能看到輸出不同類型的脈沖。證明低位操作有效!
        但是當(dāng)我寫(xiě)做定長(zhǎng)測(cè)試時(shí),代碼如下
        p645_wreg(AXS_AZ, WPRMD, 0x00000041); //定長(zhǎng)運(yùn)動(dòng)模式
        p645_wreg(AXS_AZ, WRMV, 65536L);//這里寫(xiě)入65535以下的數(shù)均能準(zhǔn)確控制電機(jī)走的步數(shù),超過(guò)65535,則會(huì)出現(xiàn)電機(jī)持續(xù)運(yùn)動(dòng)而不受控制的異常狀況!
        p645_wreg(AXS_AZ, WRFL, 500L);
        p645_wreg(AXS_AZ, WRFH, 2000L);
        p645_wreg(AXS_AZ, WRUR, 200L);
        p645_wreg(AXS_AZ, WRDR, 400L);
        p645_wreg(AXS_AZ, WRMG, 5L);
        p645_wcom(AXS_AZ,STAUD);
        另外,超過(guò)65535時(shí)我讀取出COUNT1中數(shù)據(jù)也是沒(méi)有規(guī)律的。而不超過(guò)65535時(shí),則完全正常!
        1.當(dāng)寫(xiě)入65535時(shí),電機(jī)運(yùn)轉(zhuǎn)過(guò)程讀出數(shù)據(jù)如下:
        Counter1 Counter2
        指令 編碼器(這里是默認(rèn)的1倍,跟我們的編碼器對(duì)應(yīng)上是對(duì)的)
        0000019662 0000000958
        0000039790 0000001937
        0000059918 0000002917
        0000065535 0000003191
        0000065535 0000003191
        0000065535 0000003191
        0000065535 0000003191
        2.當(dāng)寫(xiě)入65536及以上時(shí),電機(jī)運(yùn)轉(zhuǎn)過(guò)程讀出數(shù)據(jù)如下:
        Counter1 Counter2
        指令編碼器(這里是默認(rèn)的1倍,跟我們的編碼器對(duì)應(yīng)上是對(duì)的)
        0000019662 0000000958
        0000039790 0000001937
        0000059917 0000002917
        0000014509 0000003898
        0000034637 0000004878
        0000054764 0000005857
        0000009356 0000006837
        0000029484 0000007818
        0000049611 0000008797
        0000004203 0000009776
        0000044458 0000011737
        0000064586 0000012718
        0000019177 0000013697
        0000039305 0000014676
        0000059433 0000015657
        0000034152 0000017617
        0000054279 0000018596
        0000008871 0000019577
        0000028999 0000020557
        0000049126 0000021536
        0000003718 0000022516
        0000023846 0000023497
        0000043973 0000024476
        0000018692 0000026436
        0000058948 0000028397
        0000013539 0000029375
        0000033667 0000030355
        0000053794 0000031335
        以上數(shù)據(jù)均不超過(guò)65535
        基于上述現(xiàn)象,我做了個(gè)程序來(lái)測(cè)試 讀寫(xiě),發(fā)現(xiàn),我寫(xiě)入的數(shù)據(jù)到緩沖去時(shí)超過(guò)0x00ffffff時(shí),讀出來(lái)的數(shù)據(jù)是不對(duì)的,只有低24位能讀出來(lái),高8位讀出來(lái)的均是0.
        寫(xiě)寄存器函數(shù)修改如下:
        void p645_wreg(unsigned int base_addr,unsigned int rwcom,unsigned intdata)
        {
        unionudata{
        unsigned int ldata;
        unsigned short idata[2];
        }udt;
        udt.ldata = data;
        outpw (base_addr 2, udt. idata[0]);
        outpw (base_addr 3, udt. idata[1]);
        //outpw (base_addr, rwcom);
        }
        測(cè)試代碼如下:
        p645_wreg(AXS_AZ,WRENV2,0xffffffff);
        data3=inpw (AXS_AZ 2);
        data4=inpw (AXS_AZ 3);
        讀出的數(shù)據(jù)只能是data3=65535;data4=255,即最高8位丟失!
        當(dāng)p645_wreg(,,); 寫(xiě)入的數(shù)據(jù)是低0x00ffffff以下的數(shù)據(jù)時(shí),data3;data4讀出來(lái)的數(shù)據(jù)是對(duì)的。即寫(xiě)什么讀出什么。這就是對(duì)我現(xiàn)在遇到的問(wèn)題的詳細(xì)敘述。

        本文引用地址:http://www.104case.com/article/201612/324398.htm

        后來(lái)經(jīng)過(guò)一番折騰,經(jīng)過(guò)大量的測(cè)量觀察發(fā)現(xiàn)。是高16位中的高低字節(jié)順序被對(duì)調(diào)了。郁悶了。于是我與日本方便的工程師交流,他們讓將STM32的A1~A4與PCL6045的A1~A4相連,(原來(lái)是STM32的A0~A3與PCL6045的A1~A4)
        于是地址也更改為
        #define AXS_AX 0x90000000
        #define AXS_AY 0x90000008
        #define AXS_AZ 0x90000010
        #define AXS_AU 0x90000018
        我感覺(jué)很奇怪。地址線的不同應(yīng)該只是地址的不一樣而已,怎么會(huì)導(dǎo)致高兩個(gè)字節(jié)的高低8位對(duì)調(diào)呢。日本方面說(shuō)是他們的芯片內(nèi)部設(shè)計(jì)是那樣的,而我在日脈手冊(cè)上沒(méi)有看到任何說(shuō)明。
        之后進(jìn)一步研究,我的PCL6045控制自如,全部功能順利驗(yàn)證了一遍。
        以上就是我開(kāi)發(fā)PCL6045B過(guò)程中的開(kāi)發(fā)體會(huì)。轉(zhuǎn)載請(qǐng)注明出處,有問(wèn)題歡迎交流。


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 竹北市| 长治县| 芦山县| 江安县| 怀宁县| 绍兴市| 江孜县| 长武县| 平定县| 石柱| 甘谷县| 连云港市| 舒城县| 晋宁县| 慈利县| 台前县| 芦溪县| 浦江县| 德清县| 鹿泉市| 锡林浩特市| 祁东县| 饶阳县| 资中县| 遂昌县| 琼结县| 余干县| 南木林县| 九江市| 普安县| 六枝特区| 宁城县| 玉林市| 科技| 莆田市| 吉安市| 应城市| 惠州市| 会同县| 阳谷县| 保康县|