5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 舵机测试仪 [打印本页]

作者: skypup    时间: 2013-6-14 23:13
标题: 舵机测试仪
本帖最后由 skypup 于 2015-3-3 00:00 编辑

需要找一只电位器(可以从旧舵机上拆下或者花几角钱买一个),焊出Futaba(或JR)头。本例中,电位器插在第2个接口。



代码:

void setup() {
以上代码为固定格式。
    // 端口设置
    TRIS2 = INPUT;
设置第2端口为输入
    // P2:AN3
    ANSEL |= 0x08;
设置第2端口为A/D模拟量采样。
}
unsigned char loop() {
    int nAD = 0;
定义变量 nAD,记录采样值。
    nAD = analogReadX(3);
模拟量采样值范围为 0 - 1023。
    nPWM[0] = 2000 + 2 * nAD;
根据采样值改变第一个舵机的位置。
舵机正常数据范围为 2000 - 4000,上式“2000 + 2 * nAD”的范围是 2000 - 4046,范围基本吻合.
    return TRUE;
}









作者: skypup    时间: 2013-6-14 23:21
测试的视频:




作者: e44172    时间: 2013-6-15 00:07
楼主大哥的头象太有喜感了。另外向楼主学习了。

作者: 宫瑜    时间: 2013-6-15 00:10
沙发

作者: 揽月射天狼    时间: 2013-6-15 02:03
楼主是技术达人,感谢楼主讲解,但是能否对接口、原理等基础知识讲解的再细致些

作者: 416786163    时间: 2013-6-15 08:28
顶一下,技术牛

作者: 3dbuild    时间: 2013-6-15 11:02
为什么不用AVR单片机做?用ATMEGA88做就很好,性价比更高,支持原生的Arduino系统,没看出PIC有什么优点,而且PIC的堆栈是硬件的,最多只有8级,子程序调用不能太复杂。AVR的编译器编译出来的运行速度也比PIC快几倍

PIC16F688 4.0圆 编程空间:8K 内存:0.25K EEPROM:256字节 I/O:12个
ATMEGA88  3.5圆 编程空间:8K 内存:1K EEPROM:512字节 I/O:22个


作者: 3dbuild    时间: 2013-6-15 11:12
本帖最后由 3dbuild 于 2013-6-15 11:24 编辑

刚查过PIC的数据手册,它的指令周期是由4个时钟周期组成,而AVR的指令周期就是1个时钟周期,同样的20M晶振,PIC的运行速度只有AVR的1/4,PIC没有硬件乘法器,AVR有硬件乘法器,再考虑到编译器的性能差别,性能差太远,不看好这个PIC


作者: 神圣军医    时间: 2013-6-15 21:27
小白弱问一句,这个输出的控制信号是数字信号吗?

作者: skypup    时间: 2013-6-16 01:21
神圣军医 发表于 2013-6-15 21:27
小白弱问一句,这个输出的控制信号是数字信号吗?

是的,用来控制舵机的数字信号。

与遥控接收器控制舵机的数字信号一致。


作者: skypup    时间: 2013-6-16 01:25
本帖最后由 skypup 于 2015-3-3 00:01 编辑
   nPWM[0] = 2000 + 2 * nAD;
根据采样值改变第一个舵机的位置。
舵机正常数据范围为 2000 - 4000,上式“2000 + 2 * nAD”的范围是 2000 - 4046,范围基本吻合.

给 nPWM[0] 指定一个2000-4000之间的数值。

只需要这样一句代码就可以了。




作者: flywind    时间: 2013-6-16 08:20
本帖最后由 flywind 于 2013-6-16 10:31 编辑
3dbuild 发表于 2013-6-15 13:12
刚查过PIC的数据手册,它的指令周期是由4个时钟周期组成,而AVR的指令周期就是1个时钟周期,同样的20M晶振, ...

主要Microchip 的 16F688 8bit PIC还是基于上一代的Microcontroller 架构。我估计都有5到6年了。。 PIC16Fxxx系列是 PIC低端的8bit处理器。最早的一代 和8051 都有的一比了。当然不能和AVR这种新的架构比了。要比的话。。。比比16F1xxx 18F 24F  DsPic 这些新系列的低端吧..
PIC的开发周期 要比AVR小得多。。适合快速研发。。还有就是功耗方面。。PIC的功耗控制可是领先AVR的。。。

最重要一点。。Microcontroller 永远比的不是速度。不是性能。不是端口数。而是 应用。。PIC 的library可以支持几乎大多数的控制理论。。那就够了。。

但开发还是要看个人经验, 我用PIC快5年了。。对于最基础的控制应用。。PIC完全足够了。因为部研发快啊。。你让我用AVR可以啊。但用的肯定不精啊。。。。只有用到大规模集中控制时。才会考虑别的Microcontroller。。。。Microchip 的 PIC肯定有他的好处。。等我有时间了就看看AVR。。也该学学别的了。。
只是想说真正用 Microcontroller 永远不是比参数的 ,而是通过参数找到最适合自己的硬件搭配。。。MicroController 不能用过头啊。。要不成本和功耗 会给最后的产品带来很大问题。。




作者: 3dbuild    时间: 2013-6-16 09:04
本帖最后由 3dbuild 于 2013-6-16 09:18 编辑

你说得也对,我就是一开始就从Arduino入门的,然后学习的WINAVR直接编程,感觉用什么CPU不是最关键,关键是对这个系列的CPU的特性要熟练掌握,主要还是以应用为主。AVR的综合性能不错,掌握了也就没动力学其他的,而且购买渠道也熟悉,存货也不少,所以现在没有学PIC等其他的。只要是支持C语言的8位CPU,只要仔细看一下数据手册,移植一个程序到PIC等其他CPU上,只需要1到2天的时间。

对性能的要求,是最近做的一个东西才感觉到的,最近做了一个VGA驱动液晶显示器的板,用20M的AVR配合一个SRAM做到了256x480的8位颜色显示,在不超频的情况下,AVR的性能达到极限,每行多显示一个象素都不行了。要显示512x480的话,要再增加一个计数器,或者改用DRAM,这样就有点复杂了,就没搞

16FXXX系列也是4个时钟周期1个机器周期,48M的主频相当于12M的AVR,而且PIC还是没有硬件乘法器,不过PIC的价格倒是很吸引,以原装PIC的价格买到的AVR很多是翻新的芯片,以后做成本敏感的项目时要考虑一下这个PIC,呵呵


作者: 3dbuild    时间: 2013-6-16 09:37
找到一个和ATTINY13差不多的8脚PIC芯片:PIC12F675,比ATTINY13便宜,这个不错

作者: flywind    时间: 2013-6-16 12:35
3dbuild 发表于 2013-6-16 11:04
你说得也对,我就是一开始就从Arduino入门的,然后学习的WINAVR直接编程,感觉用什么CPU不是最关键,关键是 ...

主要原因。 Microchip 始终坚持自己的构架。所以几乎没换过。。对开发者来说,这是最好的。。想我这种学开始玩 单片机时 就用的PIC16F系列。。现在即使用最高的32Bit 也是很顺手的。
知道我为什么没换了吧。。。还有就是 价钱啊。。 我不知道翻新多少钱。。因为我不会用翻新的。。(Boss: 废话,哪个公司会让你用翻新货做产品啊)
所以 PIC的成本是算比较低的。。。对我来说是够用的。。

但PIC的强项在于 低功耗 超低的待机功耗。。一般一块3.5V待机2-3年。。这个还是非常吸引人的。。(当然,你的电路的支持。。要不电都被电路吃了)。。

但你说速度问题。。确实。。一般的标注32bit dsPIC才达到 80Mhz。。也够慢的了。。我最近开始慢慢研究 ARM 了。。那个性能高非常多。。

btw 为什么那么多人用 Arduino 啊。。那个有点偷懒 ,新手 完全学不到东西。。我用过几次Arduino 完全摸不到头脑。用不好。。我的意思 Arduino 太简单了。简单到我不知道里面怎么工作的。。我信不过啊。。可能是我没有完全理解Arduino。。。。PIC 的library 还处在cpu时间控制 ,内存控制, 端口控制, interrupt控制,模块控制这些。。。不像Arduino 什么都弄好了。

作者: 3dbuild    时间: 2013-6-16 14:40
本帖最后由 3dbuild 于 2013-6-16 14:42 编辑
flywind 发表于 2013-6-16 12:35
主要原因。 Microchip 始终坚持自己的构架。所以几乎没换过。。对开发者来说,这是最好的。。想我这种学开 ...

那么多人用Arduino就是因为简单啊,对新手讲太底层的硬件概念,很多人会很难理解

Arduino完全就是C++,只不过在编译前,那个IDE环境会自动给你加上各个函数的声明。它的库是用C++实现的,全部在libraries目录里面,看一下这些代码就知道里面是怎么工作的。Arduino官网提供了大量的库文件,稍微改动,甚至不用改动,就可以用在WINAVR的项目里,反过来,WINAVR的程序也可以直接在Arduino里面用,总之是相当方便的

等新手变成很熟悉之后,再看看libraries目录的代码,再学WINAVR了解一些底层的东西,会进步很快


作者: skypup    时间: 2013-6-16 18:57
感谢“野草”同学的建议,因为有了他的建议,我才想到了写舵机测试仪这个小程序。

作者: yinyong    时间: 2013-6-16 19:33
能人,好东西啊。

作者: 神圣军医    时间: 2013-6-16 21:49
skypup 发表于 2013-6-16 01:25
给 nPWM[0] 指定一个2000-4000之间的数值后,ArduPIC 的内核会在对应的接口输出相应的数字信号来控制舵 ...

我再弱问一下啊,舵机控制信号不是一个PWM的嘛,高电平在1-2ms直接变化的,你这个数值在2000-4000变化怎么回事啊?谢谢


作者: skypup    时间: 2013-6-16 22:23
神圣军医 发表于 2013-6-16 21:49
我再弱问一下啊,舵机控制信号不是一个PWM的嘛,高电平在1-2ms直接变化的,你这个数值在2000-4000变化怎么 ...

数值1代表 0.5μs

2000 代表 1000μs 也就是 1ms, 4000 代表 2000μs 也就是 2ms.







欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://wz.5imx.com/) Powered by Discuz! X3.3