Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ШИМ в PIC16F886 (Настройка HALF-BRIDGE PWM в PIC16F886)
ШИМ в PIC16F886
mikhail09p Дата: Пн, 18.05.2015, 07:57  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 507
Репутация: 11   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Здравствуйте.
Нужна помощь по интересному контроллеру PIC16F886. Не могу заставить его ШИМ работать в режиме полумоста. Да и моста тоже. Чего-то упускаю при настройке. Объясните, пожалуйста, кто знает.
Даташит, частично переведён в разделе ШИМ в архиве прилагается.
А архив то не прикрепился! Что такое...

Вот: http://www.ex.ua/460151103038
Или вот: https://yadi.sk/d/eTZk1TYegfbgk

Добавлено (18.05.2015, 07:57)
---------------------------------------------
Да, жалко, что никто не знает...

Сообщение отредактировал mikhail09p - Сб, 16.05.2015, 14:43
ЯНДЕКС Дата: 18.05.2015
dimitriy-bc Дата: Пн, 18.05.2015, 11:37  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

mikhail09p, может я что-то не понял.
При работе с мостом или полу мостом перед переключение  транзистора (диагонали) необходимо отключить работающий транзистор (диагональ), выдержать паузу для рассасывания неосновных зарядов и после этого включать другой транзистор (диагональ).
Отсюда, нужно либо влазить в асмовский код программы, либо решать эту проблему аппаратно.
ADMIN Дата: Пн, 18.05.2015, 12:16  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1110
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Попробовал настроить, что-то тоже не получается. Одно могу сказать точно, что там с команды HPWM нет смысла, так как полумост и мост запускается путем установки нужных значений в нужные регистры. На странице 131 описан процесс запуска. Но он мутный какой-то. Нужно оригинальный курить.
Вот какая-то хрень вылазит в начальный момент.
Архив
mikhail09p Дата: Пн, 18.05.2015, 12:32  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 507
Репутация: 11   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Да, аппаратный ШИМ и хочу. Там он красивый и есть!
Пробовал тоже записывать значения прямо в регистры. Результат отрицательный - не работает в полумосту... Выходы переключаются синхронно.
Не понимаю, какие ещё регистры на это влияют?
ivan_fd Дата: Чт, 21.05.2015, 10:21  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 910
Репутация: 50   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

mikhail09p,  самое первое, никаких HPWM, только вручную настраивать регистры:
PR2, CCPR1L:CCP1CON(5:4 ), CCP1CON и T2CON.

И почитайте апноут AN893. Посмотрите внимательно на каких выходах , что
должно быть.

Удачи!


Меня все время преследуют умные мысли...но я быстрее!!!
mikhail09p Дата: Чт, 21.05.2015, 21:46  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 507
Репутация: 11   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Ок, ivan_fd, попробую ещё раз.
mikhail09p Дата: Пт, 31.07.2015, 12:49  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 507
Репутация: 11   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Вот, работает. Кому интересно, смотрите. Это только проба.
Я так понял, нужно включить прерывания обязательно. Это одно из условий.
Прикрепления: PWR_50v_886.rar(46Kb)
Gomer888 Дата: Вс, 04.09.2016, 17:47  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Новенький
Сообщений: 1
Репутация: 0   ±
Замечания:   ±
На сайте с 04.09.2016

Статус: Offline

Кому интересно, прерывания НЕ нужны. Работает отлично.

; ------------------------------------------------------------------------------
; Setup PWM Half-Bridge (P1A, P1B) with dead-time
; PWM Period = (PR2+1)*4*Tosc*TMR2_prescaler=45µs
; Pilse Width = (CCPR1L:CCP1CON{5:4};)*Tosc*TMR2_prescaler=22,5µs
; Dead Time = 1 tic    
; ------------------------------------------------------------------------------
Init_HalfBridge:
    
    ; Disable the PWM pin (CCPx) output drivers as an input by setting the
    ; associated TRIS bit.
   banksel TRISB
   bsf    TRISB, 2    
   bsf    TRISC, 2
   
    ; Set the PWM period by loading the PR2 register.
   banksel PR2
   movlw   .224 ; Period = 45µs
   movwf   PR2
    
    ; Configure the CCP module for the PWM mode by loading the CCP1CON register
    ; with the appropriate values: 
    ; bits [7,6] = P1M[1:0]=10 - Half-bridge output P1A-P1B, modulated with dead-band
    ; bits [5,4] = LSBs of the PWM duty cycle (b'10').
    ; bits [3,0] = CCP1M[3:0]=1100 - polarity of the PWM pins are active-high

   banksel CCP1CON
   movlw   b'10101100'
   movwf   CCP1CON    
   
    ; Set the PWM duty cycle by loading the CCPR1L register
    ; and DC1B<1:0> bits of the CCP1CON register.
   banksel CCPR1L
   movlw   b'01110000' ; +LSBs b'10' = 450 = 22,5µs Pulse width
   movwf   CCPR1L
   
; Programm Dead-Band delay mode
   banksel PWM1CON
   movlw   b'00000001'    ; PWM Delay Count bits = One tick
   movwf   PWM1CON
   
    ; Configure and start Timer2:
    ; - Clear the TMR2IF interrupt flag bit of the PIR1 register.
   banksel PIR1
   bcf    PIR1, TMR2IF
    
    ; - Set the Timer2 prescale value by loading the T2CKPS bits
    ;  of the T2CON register.
   banksel T2CON
   clrf    T2CON    ; 00 = Prescaler is 1
   bsf    T2CON, TMR2ON   ; Enable Timer2 by setting the TMR2ON bit
   ; of the T2CON register.

    ; Enable PWM output after a new PWM cycle has started:
    ; - Wait until Timer2 overflows (TMR2IF bit of the PIR1 register is set).
   banksel PIR1
_wait_T2_overflows    
   btfss   PIR1, TMR2IF
   goto    _wait_T2_overflows
    
    ; - Enable the CCP1 pinout put driver by clearing the associated TRIS bit.
   banksel TRISB
   bcf    TRISB, 2    
   bcf    TRISC, 2
; End Half-Bridge
; ------------------------------------------------------------------------------

Делаем подпрограммой, запускаем один раз при инициализации.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ШИМ в PIC16F886 (Настройка HALF-BRIDGE PWM в PIC16F886)
Страница 1 из 11
Поиск: