【三支火把】---CDS5516舵機調試以及自己的感想!


  我依然堅持,任何一次自己的心有感觸都要及時的記錄下來,這樣你的努力才是真正的努力。

  這兩天一直在用STM32調試CDS5516舵機,其實很簡單,但是卻花了將近兩天的時間,過程之曲折我就不說了,先總結一下怎么用32調試CDS5516舵機吧!

  首先,要明確,CDS5516舵機是一個可編程的數字舵機,要實現對他的控制,就要通過串口線,發一系列的指令包,通過應答來判斷所發指令是否正確,由於是單線通信,所以必須要在發送完指令包之后立馬轉換為接收模式,采用STM32的話有兩種方法,可以實現,1、將串口的TX和RX連接起來,通過使能發送使能和接收使能,來實現。2、利用單線的半雙工模式通信,也就是只用TX線,在發送完之后,TX線被釋放,可以接收(實際上就是內部將TX和RX線連接起來了)。(注意:在此進行單線測試的時候,若發送用的USART1那么接收中斷不能再使用USART1的接收中斷)

  以上只是准備工作,然后就可以連接舵機進行調試了,在調試的時候,我用的STM32的USART1的TX口,TX口必須加上3.3V,4.7K左右的上拉電阻,才能保證發出的數據包的正確。而舵機的工作電壓范圍是6.8-14V,我用了11.3V的電池對舵機進行供電,當你拿到一個CDS5516的舵機的時候,你可能並不知道該舵機的ID號是多少,那么你就可以采用廣播發送的模式,將ID號設置為已知,具體設置方法手冊中有詳細說明,

                                                  

  我在查閱資料的時候,見到有人問關於通信的波特率的問題,在默認情況下,CDS5516舵機的通信波特率應該是1MHZ,我也是試出來的,因為只有幾個固定設置的比特率的值在設置后再掉電是不會消失的,而其他的掉電之后會消失,因此,在此推薦各位能試一試。在設置完ID號的時候,可以通過查看應答包來確定是否設置成功,該步驟很重要,因為如果這一步完成,那么你的調試基本可以算是完成了百分之99,,,所有的指令包,在手冊里都能詳細的查到,在此提醒一下各位,如果你是仿照手冊中的某一個例子,改了ID號或者是其他的希望實現同樣的功能,那么請你一定要記得修該最后的校驗和該數值,樓主在一開始調試的時候,就沒注意到這一點,照本宣科,結果浪費了很多時間。由於我對舵機的要求比較簡單,只實現舵機能夠按照我設定的角度進行旋轉,因此沒有在進行其他的測試,但是已經實現這些功能的話,其他的應該也是不成問題的。樓主使用的正點原子戰艦的板子進行調試的,下面將兩個主要的代碼進行粘貼,供大家參考:

void Set_Num_1(void) //設置舵機的ID號為1
{
    USART1->CR1 &= ~0x4;
    USART1_Send_Char(0xFF);
    USART1_Send_Char(0XFF);
    USART1_Send_Char(0XFE);
    USART1_Send_Char(0X04);
    USART1_Send_Char(0X03);
    USART1_Send_Char(0X03);
    USART1_Send_Char(0X01);
    USART1_Send_Char(0XF6);
    USART1->CR1 |= 0x4;
    delay_ms(2);
}
void Set_Num_Speed(u8 id,u32 arg)      //設置舵機旋轉的目標角度
{
    static u8 i = 0; 
    u8 sum = 0x00; 
    uint8_t dat[] = {0xFF,0xFF,0,5,0x03,0x1E,0,0,0xFF};  //定義一個數據包
    dat[2] = id;                          //設置ID號
    dat[6] = (arg*0x3FF/300)&0xFF;        //設置目標角度的低字節
    dat[7] = (arg*0x3FF/300)>>8;          //設置目標角度的高字節
    for(i=2;i<8;i++)
    {
        sum+=dat[i];                    //計算校驗和
    } 
    dat[8] = ~sum;                      
    
    for(i=0;i<9;i++)
    {
        USART1_Send_Char(dat[i]);       //將數據包發出
    }
}

  以上兩個函數基本算是舵機調試的主要函數了,希望能幫到各位。

 

*************************************************************

*************************************************************

*************************************************************

  這兩天的調試,讓我想了很多,這樣一個並不是很難的調試卻花費了我兩天的時間,而且還是在小伙伴@xkwy的幫助下(在此感謝xkwy,希望以后的某一天他能看到)其中的原因確實值得我深思。

1、面對一個新的東西,不知道該從何下手。。。或許這也是我最大的一個問題了,對於這次的調試,手頭的資料只有一份技術手冊,在剛開始調試的時候,自己就已經打起了退堂鼓,以前也是這樣。無論是從最開始的准備工作,還是在之后的調試中,面對一個問題,心里就心煩意亂,把大量的時間和精力都花在了抱怨和一次次徒勞無功的測試上,沒有想問題的根本處在哪里。其實看別人,才會發現,別人也是在這樣的情況下,對照着手冊, 一點點的進行。這一點自己確實做得還很不到位。

2、第二個最大的問題,就是”懶!“,在調試的過程當中,首先准備工作就沒有做好,連接收應答包的准備工作都沒有做好,那么又何談區解決問題呢?除此之外,對於可能出現問題的地方,總是嫌麻煩,然后將問題規避掉,直接測試,期待最后的正確的結果,現在想想,這樣的概率是有多么的低啊,把可能出問題的部分全都規避掉,然后對於不正確的結果又無可奈何,最后,只能讓自己越加煩躁,看來,自己的心急氣躁也不是沒有原因的。

3、對於手冊,總是不能認真的看,無論是面對什么樣的新的問題,自己最希望的就是能從網上直接找到例程,然后看別人怎么弄,照葫蘆畫瓢,在這樣的心里下,往往最可能的就是忽略了身邊最有用的參考資料-技術手冊。在以后的道路上,會面對各種各樣的新的器件,問題,不可能都從網上找到資料,那么這時候,如果自己沒有這種從手冊出發,解決問題的能力,無疑自己未來的發展也就這樣了。

4、基本功不夠扎實,作為一個以嵌入式開發為目標的開發者來說,對於芯片硬件的了解太少了,甚至連最基本的底層程序也是”書到用時方恨少“,比如這次單純的使用串口1已經不足以滿足需求,我想過使用串口2,可是在這樣時間比較緊的情況下,我還有那么多時間區進行串口2調試嗎?或許有人說,串口2跟1差不多,直接用啊,,,但是我想說,對於一個沒有用的東西來說,在時間緊,任務多的情況下,已然沒有時間再去搞了,及時它比較簡單,而且平時對於各個外設的使用沒有總結,不知道有何區別,又如何快速熟練的使用呢?這個問題確實值得注意……

  以上就是我在這兩天的調試中所總結的自己的問題,學習不能像蜻蜓點水一樣,否則,真正到用的時候就該傻眼了,希望大家看了之后能夠吸取我的教訓,在生活中就注意這些問題。 同時,以上總結也是我自己個人最自己的總結,帶有強烈的主管色彩,希望大家看看就好,有什么問題,歡迎留言……加油,小火把!

 

 

 

 

 

 

 

 

 

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM