您的位置:首页 > 其它

RCP 信号处理

2011-08-30 10:16 141 查看
刚进公司时做的一个电子产品,由电路给予单片机(Mega8)一个RCP信号,然后根据信号长度转换成相应的PWM(调宽脉冲).

电路环境: RCP信号接入到外部中断INT0(pin32).

设计思想:

; 中断设置
; TIMER0 扩展到R6, CLK/8

ldi		r16, _BV(CS01)
out		_SFR_IO_ADDR(TCCR0),r16

; INT0 上升弦发生中断
ldi		r16,_BV(ISC01)+_BV(ISC00)
out		_SFR_IO_ADDR(MCUCR),r16
ldi		r16,_BV(INT0)
out		_SFR_IO_ADDR(GICR),r16


把TIMER0计算器软件扩增为16位.

.global TIMER0_OVF_vect
TIMER0_OVF_vect:
in		R0,_SFR_IO_ADDR(SREG)
push	r21
; r6 timer0的高8位
inc		R6
breq	1f
rjmp	3f
1:
dec		r7
mov		R21,r7
subi	        r21,110
; if r21 > 110 goto 3f
brcc	3f
; 丢信号,可能是硬件故障.
; 关闭相应的操作
cli
rjmp         halt_mcu
3:
pop		r21
out		_SFR_IO_ADDR(SREG),R0
reti


把外部中断INT0设置成边缘触发.然后在中断中切换上升/下降弦

ADDR_T0_TEMP 为内存地址, RCP_HIGH 是rcp信号的最大长度,RCP_LOW是rcp信号最小长度

.global INT0_vect
INT0_vect:
in		R0,_SFR_IO_ADDR(SREG)
push	r20
push	r21
push	r22
push	r23
in		R20,_SFR_IO_ADDR(TCNT0)
mov		R21,R6
; 为了保持计算器的一致性.必须检测溢出是否发升.
in		r22,_SFR_IO_ADDR(TIFR)
sbrs	r22,TOV0
rjmp	1f
; 内容不一致,重新再读一次timer0
in		R20,_SFR_IO_ADDR(TCNT0)
inc		r21
1:
; 计算当前中断发生距离上一次的时间
lds		R22,ADDR_T0_TEMP
lds		R23,ADDR_T0_TEMP+1
sts		ADDR_T0_TEMP,R20
sts		ADDR_T0_TEMP+1,R21
sub		R20,R22
sbc		R21,R23
; 检查信号的状态.如果是上升弦触发, RCP 信号开始
in		R22,_SFR_IO_ADDR(MCUCR)
sbrs	R22,ISC00
rjmp	1f
; 上升弦触发,下一次中断必须改为下降弦
; triggered by falling edge at next time
ldi		r23,_BV(ISC01)
out		_SFR_IO_ADDR(MCUCR),r23
rjmp	3f
1:	; 下降弦触发, RCP 结束.比较 RCP 长度
movw	R10,R20

; if(r20:r21 > RCP_LOW && r20:r21 < RCP_HIGH)
subi	R20,lo8(RCP_LOW)
sbci	R21,hi8(RCP_LOW)
subi	R20,lo8(RCP_HIGH-RCP_LOW)
sbci	R21,hi8(RCP_HIGH-RCP_LOW)
brcc	1f
; 在合理范围内的RCP signal
sbr		r27,_BV(6)
ldi		r22, RCP_ERROR_COUNT
mov		r7, r22
rjmp	2f
1:
dec		r7
cbr		r27,_BV(6)
2:
; 下次中断改上升弦触发
ldi		r23,_BV(ISC01)+_BV(ISC00)
out		_SFR_IO_ADDR(MCUCR),r23
3:
pop		r23
pop		r22
pop		r21
pop		r20
out		_SFR_IO_ADDR(SREG),r0
reti


以上代码段完成了RCP的处理.每次检测 R27.6是否高电平. 如果RCP准备好即为高.取出数据后把R27.6设在为低.以便下一次的RCP输入判断.

注意:以上代码片段是从一个成熟产品中抽取出来.不保证在读者的程序里正确运行.但是在产品中是工作的.这里只是为了描述程序设计思路才列出来的.

以后我会把产品中其他的部分也放出来,主要是PWM控制.下一步我们的产品是无刷马达的控制.希望能把这个项目也拿下,把技术拿出来和大家分享.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: