【三支火把】---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();
}
void Set_Num_Speed(u8 id,u32 arg) //设置舵机旋转的目标角度
{
static u8 i = ;
u8 sum = 0x00;
uint8_t dat[] = {0xFF,0xFF,,,0x03,0x1E,,,0xFF}; //定义一个数据包
dat[] = id; //设置ID号
dat[] = (arg*0x3FF/)&0xFF; //设置目标角度的低字节
dat[] = (arg*0x3FF/)>>; //设置目标角度的高字节
for(i=;i<;i++)
{
sum+=dat[i]; //计算校验和
}
dat[] = ~sum; for(i=;i<;i++)
{
USART1_Send_Char(dat[i]); //将数据包发出
}
}
以上两个函数基本算是舵机调试的主要函数了,希望能帮到各位。
*************************************************************
*************************************************************
*************************************************************
这两天的调试,让我想了很多,这样一个并不是很难的调试却花费了我两天的时间,而且还是在小伙伴@xkwy的帮助下(在此感谢xkwy,希望以后的某一天他能看到)其中的原因确实值得我深思。
1、面对一个新的东西,不知道该从何下手。。。或许这也是我最大的一个问题了,对于这次的调试,手头的资料只有一份技术手册,在刚开始调试的时候,自己就已经打起了退堂鼓,以前也是这样。无论是从最开始的准备工作,还是在之后的调试中,面对一个问题,心里就心烦意乱,把大量的时间和精力都花在了抱怨和一次次徒劳无功的测试上,没有想问题的根本处在哪里。其实看别人,才会发现,别人也是在这样的情况下,对照着手册, 一点点的进行。这一点自己确实做得还很不到位。
2、第二个最大的问题,就是”懒!“,在调试的过程当中,首先准备工作就没有做好,连接收应答包的准备工作都没有做好,那么又何谈区解决问题呢?除此之外,对于可能出现问题的地方,总是嫌麻烦,然后将问题规避掉,直接测试,期待最后的正确的结果,现在想想,这样的概率是有多么的低啊,把可能出问题的部分全都规避掉,然后对于不正确的结果又无可奈何,最后,只能让自己越加烦躁,看来,自己的心急气躁也不是没有原因的。
3、对于手册,总是不能认真的看,无论是面对什么样的新的问题,自己最希望的就是能从网上直接找到例程,然后看别人怎么弄,照葫芦画瓢,在这样的心里下,往往最可能的就是忽略了身边最有用的参考资料-技术手册。在以后的道路上,会面对各种各样的新的器件,问题,不可能都从网上找到资料,那么这时候,如果自己没有这种从手册出发,解决问题的能力,无疑自己未来的发展也就这样了。
4、基本功不够扎实,作为一个以嵌入式开发为目标的开发者来说,对于芯片硬件的了解太少了,甚至连最基本的底层程序也是”书到用时方恨少“,比如这次单纯的使用串口1已经不足以满足需求,我想过使用串口2,可是在这样时间比较紧的情况下,我还有那么多时间区进行串口2调试吗?或许有人说,串口2跟1差不多,直接用啊,,,但是我想说,对于一个没有用的东西来说,在时间紧,任务多的情况下,已然没有时间再去搞了,及时它比较简单,而且平时对于各个外设的使用没有总结,不知道有何区别,又如何快速熟练的使用呢?这个问题确实值得注意……
以上就是我在这两天的调试中所总结的自己的问题,学习不能像蜻蜓点水一样,否则,真正到用的时候就该傻眼了,希望大家看了之后能够吸取我的教训,在生活中就注意这些问题。 同时,以上总结也是我自己个人最自己的总结,带有强烈的主管色彩,希望大家看看就好,有什么问题,欢迎留言……加油,小火把!
【三支火把】---CDS5516舵机调试以及自己的感想!的更多相关文章
- 【三支火把】---队列和栈的C程序实现
这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...
- 【三支火把】---C文件学习
---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...
- 【三支火把】---C语言面试问题总结
看了一份关于HR在面试一名C程序员可能提问的问题手册,学到了很多,很多都是一些琐碎的知识点,总是你写过很多大型的C程序,但是我敢说,里面也有你没掌握的东西. 1.全局变量和局部变量有何区别? 答:全局 ...
- 【三支火把】---C语言const用法总结
C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...
- 【三支火把】---常用C语言控制台函数总结(持续更新)
写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: int main(vo ...
- 【三支火把】---C指针总结
好久没写博客了,重新学习C语言了的基础课程,发现很多东西都忘记的差不多了,闲来无事,总结一下关于指针的知识,希望能帮到像我一样的菜鸟们: 指针,众所周知是C语言的精华所在,不懂指针的话,你就不要说你学 ...
- 【三支火把】---一份程序看懂C程序printf()的几种常用用法
闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...
- 【三支火把】--- 关于UEFI&PCD的总结介绍
1个人理解 个人理解PCD基本等同于Token,应当算是一种描述性语言,按照规定书写好PCD的配置档,在编译的过程中,会根据你的配置生成同等含义的C文档,而在C文档中对应会出现相应的define或者变 ...
- 【三支火把】--- 关于BIOS&UEFI查阅资料网站总结
UEFI和BIOS的水太深,网上能找到的资料是那么的少,各个组织之间互有交叉,难弄的很,总结了下常用的BIOS资料网站,仅供参考,如果遗漏之处,请指出,博主将继续完善补充……
随机推荐
- hdu 4690 EBCDIC
还有什么好说的呢?打表题= = #include<cstdio> #include<cstring> #include<algorithm> #include< ...
- 利用改进的cca算法,进行识别
这个方法,很有意思,第一,不用降维:第二,跟ica做比较,竟然说比强大的ica还好: 看来,国防科大的博士,还是很牛的. <OI and fMRI Signal Separation Using ...
- Java [Leetcode 328]Odd Even Linked List
题目描述: Given a singly linked list, group all odd nodes together followed by the even nodes. Please no ...
- LeetCode: divideInteger
Title: Divide two integers without using multiplication, division and mod operator. If it is overflo ...
- JavaScript备忘录-原型
function Person() { this.name = "fs"; } Person.prototype.sayHello = function () { return & ...
- hdu 2155 小黑的镇魂曲(dp) 2008信息工程学院集训队——选拔赛
感觉蛮坑的一道题. 题意很像一个叫“是男人下100层”的游戏.不过多了个时间限制,要求在限定时间内从某一点下落到地面.还多了个最大下落高度,一次最多下落这么高,要不然会摔死. 一开始想dp的,然后想了 ...
- Java SE 6 新特性: Java DB 和 JDBC 4.0
http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...
- 数据仓库之ETL漫谈
ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取.转换和加载. 大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)--& ...
- Delphi RICHEDIT中插入图象
unit InsRich;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- delphi 操作 word
uses ComObj,word2000 procedure TForm1.ExportWord(); var FWord :Variant; FDoc :Variant; i,Row: ...