5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 1594|回复: 19
打印 上一主题 下一主题

舵机测试仪

[复制链接]
跳转到指定楼层
楼主
发表于 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;
}








舵机测试仪代码.gif (11.84 KB, 下载次数: 2)

舵机测试仪代码.gif

P1100109.JPG (43.68 KB, 下载次数: 5)

P1100109.JPG

欢迎继续阅读楼主其他信息

沙发
 楼主| 发表于 2013-6-14 23:21 | 只看该作者
测试的视频:



3
发表于 2013-6-15 00:07 | 只看该作者
楼主大哥的头象太有喜感了。另外向楼主学习了。
4
发表于 2013-6-15 00:10 | 只看该作者
沙发
5
发表于 2013-6-15 02:03 | 只看该作者
楼主是技术达人,感谢楼主讲解,但是能否对接口、原理等基础知识讲解的再细致些
6
发表于 2013-6-15 08:28 | 只看该作者
顶一下,技术牛
7
发表于 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个

8
发表于 2013-6-15 11:12 | 只看该作者
本帖最后由 3dbuild 于 2013-6-15 11:24 编辑

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

9
发表于 2013-6-15 21:27 | 只看该作者
小白弱问一句,这个输出的控制信号是数字信号吗?
10
 楼主| 发表于 2013-6-16 01:21 | 只看该作者
神圣军医 发表于 2013-6-15 21:27
小白弱问一句,这个输出的控制信号是数字信号吗?

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

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

11
 楼主| 发表于 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之间的数值。

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



12
发表于 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 不能用过头啊。。要不成本和功耗 会给最后的产品带来很大问题。。



13
发表于 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,呵呵

14
发表于 2013-6-16 09:37 | 只看该作者
找到一个和ATTINY13差不多的8脚PIC芯片:PIC12F675,比ATTINY13便宜,这个不错
15
发表于 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 什么都弄好了。
16
发表于 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了解一些底层的东西,会进步很快

17
 楼主| 发表于 2013-6-16 18:57 | 只看该作者
感谢“野草”同学的建议,因为有了他的建议,我才想到了写舵机测试仪这个小程序。
18
发表于 2013-6-16 19:33 | 只看该作者
能人,好东西啊。
19
发表于 2013-6-16 21:49 | 只看该作者
skypup 发表于 2013-6-16 01:25
给 nPWM[0] 指定一个2000-4000之间的数值后,ArduPIC 的内核会在对应的接口输出相应的数字信号来控制舵 ...

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

20
 楼主| 发表于 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.


您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表