Автор Тема: ШИМ и PIC16F684  (Прочетена 19366 пъти)

Ap0c0lyp53

  • Робо-Новак
  • *****
  • Публикации: 11
    • Профил
    • http://apocolypserylz.blogspot.com/
ШИМ и PIC16F684
« Отговор #15 -: Ноември 28, 2007, 11:27:24 pm »
Ха, стана! Върви идеално при 25 kHz ШИМ и 30us Duty Cycle!  :clap: Ето го и кода. В момента съм направил мотора да се върти в една посока за определено време, да спре, да започне да се върти обратно, да спре, и така до безкрайност.
Delay1
movlw H'10'
movwf del1
Del1_1 movlw H'FF'
movwf del2
Del1_2 movlw H'FF'
movwf del3
Del1_3 decfsz del3, f
goto Del1_3
decfsz del2, f
goto Del1_2
decfsz del1, f
goto Del1_1
return

Delay2
movlw H'08'
movwf del1
Del2_1 movlw H'FF'
movwf del2
Del2_2 movlw H'FF'
movwf del3
Del2_3 decfsz del3, f
goto Del2_3
decfsz del2, f
goto Del2_2
decfsz del1, f
goto Del2_1
return

start
bcf STATUS, RP0 ;Bank 0
clrf PORTC
movlw H'07' ;PORTC - digital I/O
movwf CMCON0
bsf STATUS, RP0 ;Bank 1
clrf ANSEL ;PORTC - digital I/O
clrf TRISC ;PORTC - output
movlw D'199' ;25kHz PWM period (1/1 prescaler)
movwf PR2
bcf STATUS, RP0 ;Bank 0
movlw B'01101110'
movwf CCPR1L ;1/3 duty cycle of the PWM period (1/1 prescaler)
movlw B'01001100'
movwf CCP1CON ;Enable PWM full bridge forward
movlw B'00000100'
movwf T2CON ;Enable TMR2 with 1/1 prescaler
Loop
call Delay1 ;Wait
clrf CCP1CON ;Disable PWM
call Delay2 ;Wait
movlw B'11001100'
movwf CCP1CON ;Restore PWM and reverse it
call Delay1 ;Wait
clrf CCP1CON ;Disable PWM
call Delay2 ;Wait
movlw B'01001100'
movwf CCP1CON ;Restore PWM in forward mode
goto Loop ;Repeat
Обаче, реших да пробвам и без драйвери да пусна машинката при +5V и установих, че и без тях си върви нормално. Както и да е, с драйвери е по-добре.  :clap: