|
看到仍有人对有刷电调感兴趣,我把自己开发的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
电路图:
|
评分
-
查看全部评分
欢迎继续阅读楼主其他信息
|