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

标题: 简单到不能相信的有刷电调(508) [打印本页]

作者: wxb3871    时间: 2011-9-4 19:26
标题: 简单到不能相信的有刷电调(508)
看到仍有人对有刷电调感兴趣,我把自己开发的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


电路图:

作者: wxb3871    时间: 2011-9-4 19:29
修正一下,电路图有错误,图上GPIO<0>是PWM输出,程序中用GPIO<1>做的PWM输出。
作者: chenwei5105729    时间: 2011-9-5 07:53
外行表示这么简单还是看不懂
作者: yoso    时间: 2011-9-8 13:55
谢谢分享
作者: shunnian    时间: 2011-9-8 14:33
帮顶
作者: catv    时间: 2011-9-9 11:11
不明白。。。。。。。。。。。。
作者: 孤独夜凄凉    时间: 2011-9-9 12:08
对我来说根本就是天书~
作者: qwbhbwz    时间: 2011-9-9 20:18
:em26: 帮顶:em15:
作者: 铜河    时间: 2011-9-9 21:29
汇编程序,高!
作者: lczjjyy    时间: 2011-9-10 00:44
原帖由 chenwei5105729 于 2011-9-5 07:53 发表
外行表示这么简单还是看不懂

:em00: :em00: :em15: :em15: :em00: :em00:
作者: gale    时间: 2011-9-10 13:22
有刷电调就是这样了。。。淘宝上挺多的

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

电调和接收机的3根连线中包含了电源,由电调提供给接收机。
作者: fenrirwo    时间: 2011-12-24 11:28
顶一个,支持DIY
作者: airwolf    时间: 2011-12-24 22:57
万老师,什么时候帮我弄个3路双向电调!:em15: :em15:
作者: PLA飞飞飞    时间: 2011-12-26 17:36
要学习一下
作者: bldc    时间: 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,失控保护,没有接收机信号,就切断动力。
作者: 改革不成必革命    时间: 2011-12-31 16:26
晕:em16:
作者: 静静的回忆    时间: 2012-1-14 03:09
:em26:
作者: john.zhao    时间: 2012-1-16 23:37
好帖。。顶:em26: :em15:
作者: mikeclarke    时间: 2012-1-19 14:24
不明白!
作者: bitrc    时间: 2012-1-23 16:55
看不懂:em23:
作者: 1847888786    时间: 2012-1-23 18:52
看似简单
作者: wxb3871    时间: 2012-4-11 06:24
原帖由 bldc 于 2011-12-26 21:45 发表
本人汇编水平有限,除非对于非常非常感兴趣的,基本不看代码,太累,不过楼主注解挺多的,不错。

如果楼主不是PIC老手,我觉得AVR的单片机不错,1般的MEGA8才5块钱,有很多的C编译器可用,如AVRGCC,ICCAVR等。
...

受教了,茅塞顿开!我因为一直在考虑用508,根本未考虑用中断和PWM去做,所以把自己陷入了苦境,这一说可就简单多了啊!多谢多谢!

[ 本帖最后由 wxb3871 于 2012-4-12 05:55 编辑 ]
作者: 业余爱好者    时间: 2012-7-27 08:09
楼住可否发一份资料给我,我想自己做,淘宝上的太贵了,程序是HEX最好。谢谢
作者: whome    时间: 2012-10-11 02:13
够用、适用,有刷电机还是很有用处的,不一定什么都要无刷电机,应用还是要考虑性价比
作者: feitian    时间: 2013-3-12 21:16


作者: hh7up    时间: 2013-3-27 01:20
能否用51单片机解决这个问题 ? 哪些地方需要注意?

作者: 飞行的小兵    时间: 2013-4-22 16:35
谢谢分享

作者: gx346    时间: 2013-4-22 22:28
PIC单片机可以选择12F683,内置PWM模块,16位定时/计数器,外部引脚计数使能可以更加精确的获取PPM信号脉冲宽度。程序也可以简化很多。

作者: 飞行的小兵    时间: 2013-8-1 01:16
帮顶,帮顶!


作者: 烈日圣火    时间: 2013-8-1 17:40
你说的太简单了, 只是我没看懂。不懂这些代码。

作者: bugsplus    时间: 2013-8-18 10:10
说说原理就好了,譬如ppm信号转化成相应的pwm信号,是什么样的对应关系。


作者: bugsplus    时间: 2013-8-18 14:31
bldc 发表于 2011-12-26 21:45
本人汇编水平有限,除非对于非常非常感兴趣的,基本不看代码,太累,不过楼主注解挺多的,不错。

如果楼 ...

明白了,很简单






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