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

标题: BASCOM M8打造低成本无人机 38楼更新PPM解码 [打印本页]

作者: 栋栋    时间: 2010-6-21 15:31
标题: BASCOM M8打造低成本无人机 38楼更新PPM解码
研究了一夜终于小有成就用小弟初学单片机编程,用的是BASCOM,成功控制5个舵机转到指定角度,并无抖动。

特此发帖纪念一下,回家后上程序源代码图片。


这个成果应该可以达到平飞后自动盘旋的功能。(实现这个功能的稳定性还需要修改很多参数)

请大家提意见帮助我成长哈哈!

$hwstack = 32                                                '忽略存贮器不足
$swstack = 10                                               '忽略存贮器不足
$framesize = 40                                              '忽略存贮器不足
$regfile = "attiny13.dat"
$crystal = 9600000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Do
     For Y = 0 To 4
     Pulseout Portb , 0 , 500                               'PB0驱动9g舵机转到中间
     Waitms 17
     Next
     For Y = 0 To 4
     Pulseout Portb , 1 , 250                               'PB19g舵机左转至60度
     Waitms 17
     Next
     For Y = 0 To 4
     Pulseout Portb , 2 , 750                               'PB29g舵机右转至60度
     Waitms 17
     Next
Loop
End
由于今天又加了些东西职能上个驱动3个舵机的实例希望对新手们有些帮助。

[ 本帖最后由 栋栋 于 2011-7-10 22:48 编辑 ]
作者: 电动机    时间: 2010-6-21 21:03
干吗不用定时器,直接实现10几路舵机信号很轻松:em15:
作者: 栋栋    时间: 2010-6-22 00:12
原帖由 电动机 于 2010-6-21 21:03 发表
干吗不用定时器,直接实现10几路舵机信号很轻松:em15:

不是很懂,我是新手。我现在的要求就是在一个命令下,激活一种姿态。
作者: 栋栋    时间: 2010-6-30 23:00
成功通过PC键盘控制舵机上下拉!而且是软串口哦soft!!哈哈哈不多话了上代码
虽然只是单个舵机,多几个也是一样的。下次目标就是让舵机根据键盘计数器矢量运动了呵呵!

$hwstack = 32                                               '忽略存贮器不足
$swstack = 10                                               '忽略存贮器不足
$framesize = 40
$regfile = "ATTINY13.dat"
$crystal = 1200000
Config Portb.2 = Output
Dim B As Byte
Dim Y As Byte
Open "comb.0:9600,8,n,1" For Output As #1
Open "comb.1:9600,8,n,1" For Input As #2
  Print #1 , "请输入任何数字或字符:"
   For Y = 0 To 30
       Pulseout Portb , 2 , 500                             '9g舵机回中
       Waitms 17
       Next
Do
    B = Inkey(#2)
   If B = 119 Then                                          '键盘w
      Print #1 , Chr(b)
       For Y = 0 To 30
       Pulseout Portb , 2 , 250                             '9g舵机左转
       Waitms 17
       Next
       End If
   If B = 115 Then                                          '键盘s
      Print #1 , Chr(b)
       For Y = 0 To 30
       Pulseout Portb , 2 , 750                             '9g舵机右转
       Waitms 17
       Next
   End If
     If B = 113 Then                                        '键盘q舵机回中
      Print #1 , Chr(b)
       For Y = 0 To 30
       Pulseout Portb , 2 , 500                             '9g舵机回中
       Waitms 17
       Next
   End If
Loop

Close #2
Close #1
End
作者: 栋栋    时间: 2010-6-30 23:04
注意使用ATTINY13开软串口,时钟必须为$crystal = 1200000,否则收到的数据都是乱码。

为了能够控制飞机已经又迈出了第一步了!希望会对新手有些帮助。
作者: 栋栋    时间: 2010-7-1 10:57
上视频咯!


舵机来回的稳定性还是差了点,可能没有使用外部晶振的关系。继续修改,开贴纪念哈哈哈哈!

[ 本帖最后由 栋栋 于 2010-7-1 13:47 编辑 ]
作者: 栋栋    时间: 2010-7-1 22:27
更新修改后的值,可以根据键盘按键转动舵机,虽然精度很低,但是已经算矢量输出了。

$hwstack = 32                                               '忽略存贮器不足
$swstack = 10                                               '忽略存贮器不足
$framesize = 40
$regfile = "ATTINY13.dat"
$crystal = 1200000
Config Portb.2 = Output
Dim B As Byte
Dim Y As Byte
Dim Z As Integer
Open "comb.0:9600,8,n,1" For Output As #1
Open "comb.1:9600,8,n,1" For Input As #2
  Print #1 , "请输入任何数字或字符:"
   For Y = 0 To 30
       Pulseout Portb , 2 , 500                             '9g舵机回中
       Waitms 17
       Next
Z = 0
Do
    B = Inkey(#2)
   If B = 119 Then                                          '键盘w
      Print #1 , Chr(b)
       Z = 150
       Pulseout Portb , 2 , Z                               '9g舵机左转
       Waitms 17
   End If
   If B = 115 Then                                          '键盘s
         Z = 850
       Pulseout Portb , 2 , Z                               '9g舵机右转?
       Waitms 17
    End If
     If B = 113 Then                                        '键盘q舵机回中
      Print #1 , Chr(b)
       For Y = 0 To 10
       Pulseout Portb , 2 , 500                             '9g舵机回中
       Waitms 17
       Next
   End If
Loop

Close #2
Close #1
End



[ 本帖最后由 栋栋 于 2010-7-1 22:59 编辑 ]
作者: xuzhaohuatom    时间: 2010-7-3 16:50
支持lz,偶刚开始学,以后还得向lz多多请教:em26:
作者: 栋栋    时间: 2010-7-4 16:19
原帖由 xuzhaohuatom 于 2010-7-3 16:50 发表
支持lz,偶刚开始学,以后还得向lz多多请教:em26:

我也是刚刚开始学。一起学习,我这几天发现用IF语句并不是最有效的,而且舵机没有精确锁定位置,正在尝试CASE语句
作者: 栋栋    时间: 2010-7-4 16:25
舵机控制只是一小部分,接下去还有很多东西要加上去。高度计,最终用串行接口把这些模块连接起来就可以了。
作者: 栋栋    时间: 2010-7-6 10:26
发现一个很严重的问题,我这样只能做到转动,还不能做到锁定某个位置。还需要改进。。。。。
作者: danielwang    时间: 2010-8-17 12:15
建议楼主立即着手进行多路舵机的控制实验.
控制一个舵机和控制几个舵机可不是简简单单加几行代码的事情哦.
祝成功.
作者: 栋栋    时间: 2010-9-6 13:57
原帖由 danielwang 于 2010-8-17 12:15 发表
建议楼主立即着手进行多路舵机的控制实验.
控制一个舵机和控制几个舵机可不是简简单单加几行代码的事情哦.
祝成功.


我的要求仅限控制无人机的飞行最多也就4路。通过串口传输已经OK了。程序测试下来,很稳定用的是mega8的芯片。
作者: liu_tianyi    时间: 2010-9-7 02:21
//Timre1
DDRB|=1<<5|1<<6|1<<7;
ICR1=20000;//基频20MS
OCR1A=1500;
OCR1B=1500;
TCCR1A=(1<<COM1A1|1<<COM1B1|1<<COM1C1);//比较匹配的时候清零
TCCR1B=(1<<WGM13)|(1<<CS11);// Phase and Freq correct ICR1=Top

用定时器控制单片机的代码。。稳定可靠,而且为异步操作,只要在代码里修改输出比较器的值就可以了。。希望能帮到点忙
作者: gale    时间: 2010-9-7 09:24
如果只做驱动电机这一件事情,用循环也是可以的,否则还是用定时器比较好,可以实现高精度多路输出,如果信号要求比较标准(50Hz),精度要求又很高,那么最多也就实现9路了。楼上的说轻轻松松十几路是做不到的(不是说管脚不够),轻轻松松十几路输出的信号,也能驱动舵机,但是信号的精度和刷新频率无法同时满足要求,玩玩可以,或者搞机器人这样的东西。
作者: lxw2087290    时间: 2010-10-3 00:35
楼主上位机软件是什么编的啊?
我认为控制多路舵机,还是用定时器生成类似PPM的码串行输出,然后外面用个移位寄存器就可以了,最多可以控制20/2=10路舵机呢,够用了吧
作者: cqmiao    时间: 2010-10-3 00:54
用定时器吧,不然程序复杂了就不行了
作者: fujianshu    时间: 2010-10-3 14:44
祝贺
作者: 赖胖子    时间: 2010-11-11 20:40
学习学习。
作者: feitian    时间: 2011-1-1 15:02
:em24: :em03: :em03: :em03: :em01:
作者: miracle304    时间: 2011-1-27 19:34
此帖很牛..
作者: 栋栋    时间: 2011-5-28 00:06
最新出炉,真正的PWM驱动输出了。还是ATTINY13 呵呵,其实我看好这个芯片,的确牛!一会给大家看视频



[ 本帖最后由 栋栋 于 2011-5-28 00:23 编辑 ]
作者: 切风40.83    时间: 2011-5-28 12:03
时钟频率1,200,000HZ ?!
作者: 栋栋    时间: 2011-5-28 12:45
原帖由 切风40.83 于 2011-5-28 12:03 发表
时钟频率1,200,000HZ ?!


第一页上这个代码有点问题,最新的代码稍候附上

时钟频率应该是9600000
作者: n44303    时间: 2011-5-28 15:54
为什么 不用AVR?
作者: rchentl    时间: 2011-5-28 16:28
LS 的,你说的AVR是毛?
你知道 ATTiny也是 AVR芯片的一种么? 只是是低端的而已v :em15:
作者: 栋栋    时间: 2011-5-28 16:48
原帖由 n44303 于 2011-5-28 15:54 发表
为什么 不用AVR?



楼上的说的没错,attiny也是avr,其实我就想做一些地成本结构简单的设备。用这个芯片输出2-3路控制舵机做个双足机器人应该很方便。

还支持 adc数据采集。应该有很大的应用前景,况且外部结构也简单,只有电源和输出,比较适合初学者
作者: 切风40.83    时间: 2011-5-30 11:20
支持支持,坚持下去,一年之内就能做飞控了。
作者: 栋栋    时间: 2011-5-30 21:45
你们的每一次回复都是对我这样的初学者最好的鼓励,谢谢!
作者: dstdx72    时间: 2011-6-2 23:31
:em10: 什么个情况?!什么语言?莫非是VB?
作者: 栋栋    时间: 2011-6-3 00:37
最新更新,加上三轴加速度计控制舵机。抖动非常小,而且灵敏度也不错!



[ 本帖最后由 栋栋 于 2011-6-3 00:39 编辑 ]
作者: 栋栋    时间: 2011-6-15 10:58
我还坚持着,这是最近做的关于陀螺仪数据控制舵机小实验。(非锁定模式)
语言还是BASCOM,下次可能就是带锁定模式的,可以根据初始值纠正偏航角度。哎,其实就是个加减法。


[ 本帖最后由 栋栋 于 2011-6-15 10:59 编辑 ]
作者: 栋栋    时间: 2011-6-15 11:03
原帖由 liu_tianyi 于 2010-9-7 02:21 发表
//Timre1
DDRB|=1

高手呀,相隔将近1年,我才弄明白了。为啥大家都喜欢用定时器的道理。呵呵
作者: fujianshu    时间: 2011-6-15 11:38
还是有点抖舵
作者: 栋栋    时间: 2011-6-15 11:41
原帖由 fujianshu 于 2011-6-15 11:38 发表
还是有点抖舵

可以调节,只要调节低于多少个G不做响应就可以了,舵机对单片机有干扰,需要在供电上隔离。我没有做所以略微有点。
作者: 栋栋    时间: 2011-6-17 01:13
原帖由 fujianshu 于 2011-6-15 11:38 发表
还是有点抖舵

今天继续努力的结果呵呵呵,见笑了!

作者: 栋栋    时间: 2011-7-6 08:56
终于把三轴加速度计和陀螺仪融合了。


作者: 栋栋    时间: 2011-7-10 22:46
ATMEGA8 解码PPM信号 ,继续BASCOM,阶段实验又推进一步


[ 本帖最后由 栋栋 于 2011-7-10 22:50 编辑 ]




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