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

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

简单到不能相信的有刷电调(508)

[复制链接]
跳转到指定楼层
楼主
发表于 2011-9-4 19:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到仍有人对有刷电调感兴趣,我把自己开发的508单向有刷电调也发给大家看看,给大家一个参考。我这个电调的思路是把PPM信号检测植入PWM输出过程,不知道别人怎么设计的,请大家看后给个提示。电调已经完成,我用洞洞板做的,没任何问题。因为用在小机器人车上,4节5#电池供电,所以电源电路部分设计很简单。源程序和电路图如下。
源程序:
;508直流电机调速器。接收PPM信号,并转换成相应转速。(单向无刹车)
;508工作状态为PWM占空比输出的循环下。
;输入信号高电平期间,PWM频率约为1000Hz。
;输入信号的检测植入PWM信号输出的过程中。
;GPIO<3>为输入,GPIO<1>为输出。
;
;
;                        
;       VERSION 1.0C    20110407  12F508
;          万学斌
;
;
  processor 12C508
  INCLUDE  <P12C508.inc>
  __config  _MCLRE_OFF & _CP_ON & _WDT_ON & _IntRC_OSC
;
;----  自定义符号  ------
;
PPM_H   EQU 10H   ;PPM高电平值
PPM_L EQU 11H   ;PPM低电平值
H_OUT EQU 12H   ;输出PWM信号高电平值
L_OUT EQU 13H   ;输出PWM信号低电平值
HTMP EQU 14H   ;输入信号
LTMP EQU 15H   ;
FLAGR EQU 16H   ;标志
;
;
;----  变量 ----
;
W EQU 0           
F EQU 1
PPM EQU 0   ;FLAGR第0位为PPM信号上次状态标志位,1为H,0为L
OUT EQU 1   ;FLAGR第1位为当前输出信号状态标志位,1为PWM高,0为
PWM低
;
  org 0000
;------------
INIT MOVLW B'001100'  ;GPIO<2:3>输入
  TRIS GPIO
  CLRF GPIO
  CLRF FLAGR
  CLRF HTMP
  CLRF LTMP
;------------
START  MOVLW .1
  MOVWF HTMP
  MOVLW .99
  MOVWF LTMP
;------------
MAIN
;----- 输出高电平 -----
PWM_H  MOVF HTMP,W
  MOVWF H_OUT
  MOVF LTMP,W
  MOVWF L_OUT
  BSF FLAGR,OUT ;PWM当前输出高位标志
  BSF GPIO,1  ;输出高电平
PWM_H1  BTFSS GPIO,3  ;输入信号高电平跳
  GOTO L  ;低电平,转L
  BTFSS FLAGR,PPM ;PPM信号持续为高,则PPM_H+1
  GOTO PWM_H2  ;PPM信号由低跳高,转PWM_H2(PPM_H重新计数)
  INCF PPM_H,F
  BSF FLAGR,PPM ;置PPM电平标记位为1
  NOP
HDEC  DECFSZ H_OUT,F
  GOTO PWM_H1  ;持续高电平的计数周期为10uS
  GOTO PWM_L  ;高电平输出结束,转低电平输出
PWM_H2  CLRF PPM_H  ;PPM信号跳变为高电平,PPM_H重新计数
  BSF FLAGR,PPM ;置PPM电平标记位为1
  INCF PPM_H,F  ;PPM_H+1
  DECFSZ H_OUT,F  ;
  GOTO PWM_H1  ;PPM_H重新计数的第一个周期为11uS
;----- 输出低电平 -----
PWM_L  BCF FLAGR,OUT ;PWM当前输出低位标志
     BCF GPIO,1  ;输出低电平
PWM_L1  BTFSS GPIO,3  ;PPM信号高电平跳
  GOTO L  ;低电平,转
  BTFSS FLAGR,PPM ;PPM信号持续为高,则PPM_H+1
  GOTO PWM_L2  ;PPM信号由低跳高,转PWM_L2(PPM_H重新计数)
  INCF PPM_H,F
  BSF FLAGR,PPM ;置PPM电平标记位为1
  NOP
LDEC  DECFSZ L_OUT,F
  GOTO PWM_L1  ;持续高电平的计数周期为10uS
  CLRWDT   ;喂狗
  GOTO PWM_H  ;程序循环
PWM_L2  CLRF PPM_H  ;PPM信号跳变为高电平,PPM_H重新计数
  BSF FLAGR,PPM ;置PPM电平标记位为1
  INCF PPM_H,F  ;PPM_H+1
  DECFSZ L_OUT,F ;
  GOTO PWM_L1  ;PPM_H重新计数的第一个周期为11uS
  CLRWDT    ;喂狗
  GOTO PWM_H  ;程序循环
;----- PPM信号为低时的处理程序 -----
L  BTFSS FLAGR,PPM ;PPM信号高位向低位跳变,计算新数据
  GOTO OLD  ;PPM信号持续低位,使用原有数据
  MOVF PPM_H,W  ;
  MOVWF HTMP
  BCF FLAGR,PPM ;置PPM电平标记位为0
  MOVLW .199
  SUBWF HTMP,W  ;HTMP-199
  SKPC   ;HTMP>199,跳
  GOTO L1
  MOVLW .1
  MOVWF L_OUT
  MOVLW .99
  MOVWF H_OUT
  BTFSS FLAGR,OUT ;当前输出PWM高位,转向HDEC
  GOTO LDEC  ;当前输出PWM低位,转向LDEC,周期20uS
  GOTO HDEC  ;此分支周期为21uS
L1  MOVLW .100
  SUBWF HTMP,W  ;HTMP-100
  SKPC   ;IF HTMP>100,SKIP
  GOTO L2
  MOVLW .100
  SUBWF HTMP,F  ;HTMP-100
  MOVLW .100
  MOVWF LTMP
  MOVF HTMP,W
  SUBWF LTMP,F  ;100-HTMP
  BTFSS FLAGR,OUT ;当前输出PWM高位,转向HDEC
  GOTO LDEC  ;当前输出PWM低位,转向LDEC,周期26uS
  GOTO HDEC  ;此分支周期为27uS
L2  MOVLW .1
  MOVWF H_OUT
  MOVLW .99
  MOVWF L_OUT
  BTFSS FLAGR,OUT ;当前输出PWM高位,转向HDEC
  GOTO LDEC  ;当前输出PWM低位,转向LDEC,周期26uS
  GOTO HDEC  ;此分支周期为27uS
OLD  BTFSS FLAGR,OUT ;当前输出PWM高位,转向HDEC
  GOTO LDEC  ;当前输出PWM低位,转向LDEC,周期10uS
  GOTO HDEC  ;此分支周期为11uS
;============
  END


电路图:

508ESC(单向).JPG (11.02 KB, 下载次数: 38)

508ESC(单向).JPG

评分

参与人数 2威望 +3 收起 理由
烈日圣火 + 1 赞一个! 虽然啥也没看懂
airwolf + 2 【发贴鼓励】感谢分享,希望继续努力发更多 ...

查看全部评分

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

沙发
 楼主| 发表于 2011-9-4 19:29 | 只看该作者
修正一下,电路图有错误,图上GPIO<0>是PWM输出,程序中用GPIO<1>做的PWM输出。
3
发表于 2011-9-5 07:53 | 只看该作者
外行表示这么简单还是看不懂
4
发表于 2011-9-8 13:55 | 只看该作者
谢谢分享
5
发表于 2011-9-8 14:33 | 只看该作者
帮顶
6
发表于 2011-9-9 11:11 | 只看该作者
不明白。。。。。。。。。。。。
7
发表于 2011-9-9 12:08 | 只看该作者
对我来说根本就是天书~
8
发表于 2011-9-9 20:18 | 只看该作者
:em26: 帮顶:em15:
9
发表于 2011-9-9 21:29 | 只看该作者
汇编程序,高!
10
发表于 2011-9-10 00:44 | 只看该作者
原帖由 chenwei5105729 于 2011-9-5 07:53 发表
外行表示这么简单还是看不懂

:em00: :em00: :em15: :em15: :em00: :em00:
11
发表于 2011-9-10 13:22 | 只看该作者
有刷电调就是这样了。。。淘宝上挺多的

http://item.taobao.com/item.htm?id=10339307811&_u=aaot3q94cb8

youshua.JPG (38.77 KB, 下载次数: 24)

youshua.JPG
12
发表于 2011-9-10 14:00 | 只看该作者
:em15:
13
发表于 2011-9-14 14:41 | 只看该作者
:em26: :em15:
14
 楼主| 发表于 2011-9-28 11:35 | 只看该作者
发这个帖本想让坛中的高手指点一下的,我的单片机完全自学的,只会汇编。编这个程序花了一些精力,成功了后心里也很高兴。但因为没和别人交流过,不知道我这个程序的思路有些什么问题,编程技巧上还需要怎么提高,所以自己顶上来,望各位高人不吝赐教,不胜感激!
15
发表于 2011-10-11 13:41 | 只看该作者
接收器需要独立的5V供电么?
16
 楼主| 发表于 2011-12-24 07:38 | 只看该作者
原帖由 skypup 于 2011-10-11 13:41 发表
接收器需要独立的5V供电么?

电调和接收机的3根连线中包含了电源,由电调提供给接收机。
17
发表于 2011-12-24 11:28 | 只看该作者
顶一个,支持DIY
18
发表于 2011-12-24 22:57 | 只看该作者
万老师,什么时候帮我弄个3路双向电调!:em15: :em15:
19
发表于 2011-12-26 17:36 | 只看该作者
要学习一下
20
发表于 2011-12-26 21:45 | 只看该作者
本人汇编水平有限,除非对于非常非常感兴趣的,基本不看代码,太累,不过楼主注解挺多的,不错。

如果楼主不是PIC老手,我觉得AVR的单片机不错,1般的MEGA8才5块钱,有很多的C编译器可用,如AVRGCC,ICCAVR等。
C相对于汇编更好理解,效率也不错。M8片内硬件也比较多。对于制作一个实用且通用的电调的话(甚至双向)都够用了。
学深了,熟悉一种芯片之后,就比较懒于花大功夫学新品的了,我就是这样,一直停在AVR上了。
一半电调的几个部分:
1,接收机信号PPM解码,1ms至2ms,以片内始终计数值表达。对于M8,可设定中断来处理这个,主程序可以不管这个过程。
2,PWM输出,可由MCU自动产生输出,程序只需改变占空比的值就可以,PPM解码中断程序里可以做这个。
3,监控动力电源电压,低于一定值需要切断,使接收机和舵机可以继续有电工作,M8自带6路模数转换。
4,失控保护,没有接收机信号,就切断动力。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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