【三支火把】---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资料网站,仅供参考,如果遗漏之处,请指出,博主将继续完善补充……
随机推荐
- 转:MVC2表单验证失败后,直接返回View,已填写的内容就会清空,可以这样做;MVC2输出文本;MVC2输出PDF文件
ViewData.ModelState.AddModelError("FormValidator", message); foreach (string field in Requ ...
- 如何使用jetty
一直都听说jetty跟Tomcat一样,是一个web容器.之前做项目的时候,也使用过jetty,不过当时jetty是作为一个插件,跟maven集成使用的.那个时候,由于是第一次使用jetty,感觉je ...
- 用Rational Rose来建立数据库表
这里以MS SQL Server2000中已有的一个Northwind库为例,我们命名新的数据库名为NorthwindRose:我们只挑其中的两个表Customers和Employees做示例,另外我 ...
- C扩展Python
基本想法: 先看中文小介绍,再看英文详细文档. 1. 参考 首先参考THIS, IBM的工程师好像出了好多这样的文章啊,而且每次看到时间戳,我都想戳自己- -! 2. ERROR 可能遇到错误: fa ...
- oracle 回收站管理
oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表. 1.查看回收站 select * from user_recyclebin ...
- GitHub开源库排名一百的简单介绍,值得收藏!
GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub ...
- 在stm32上移植wpa_supplicant(二)
第一层调用的移植和裁剪. wpa_supplicant_init 照论文的指示,删除wpa_params和wpa_global相关的东西.初始化流程也相当简单,driver初始化,eap_regist ...
- [Everyday Mathematics]20150107
设 $f\in C^1[a,b]$, $f(a)=0$, 且存在 $\lm>0$, 使得 $$\bex |f'(x)|\leq \lm |f(x)|,\quad \forall\ x\in [a ...
- <译>Selenium Python Bindings 1 - Installation
Installation Introduction Selenium Python bindings 提供了一个简单的API来使用Selenium WebDriver编写使用功能/验收测试.通过Sel ...
- python学习资源
12岁的少年教你用Python做小游戏: http://blog.jobbole.com/46308/ python视频教程大全集: http://www.douban.com/group/topic ...