ШИМ в PIC16F886
|
|
mikhail09p |
Дата: Пн, 18.05.2015, 07:57 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 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
|
|
|
|
dimitriy-bc |
Дата: Пн, 18.05.2015, 11:37 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
mikhail09p, может я что-то не понял. При работе с мостом или полу мостом перед переключение транзистора (диагонали) необходимо отключить работающий транзистор (диагональ), выдержать паузу для рассасывания неосновных зарядов и после этого включать другой транзистор (диагональ). Отсюда, нужно либо влазить в асмовский код программы, либо решать эту проблему аппаратно.
|
|
|
|
ADMIN |
Дата: Пн, 18.05.2015, 12:16 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Попробовал настроить, что-то тоже не получается. Одно могу сказать точно, что там с команды HPWM нет смысла, так как полумост и мост запускается путем установки нужных значений в нужные регистры. На странице 131 описан процесс запуска. Но он мутный какой-то. Нужно оригинальный курить. Вот какая-то хрень вылазит в начальный момент. Архив
|
|
|
|
mikhail09p |
Дата: Пн, 18.05.2015, 12:32 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Да, аппаратный ШИМ и хочу. Там он красивый и есть! Пробовал тоже записывать значения прямо в регистры. Результат отрицательный - не работает в полумосту... Выходы переключаются синхронно. Не понимаю, какие ещё регистры на это влияют?
|
|
|
|
ivan_fd |
Дата: Чт, 21.05.2015, 10:21 | Сообщение # 5 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
mikhail09p, самое первое, никаких HPWM, только вручную настраивать регистры: PR2, CCPR1L:CCP1CON(5:4 ), CCP1CON и T2CON.
И почитайте апноут AN893. Посмотрите внимательно на каких выходах , что должно быть.
Удачи!
|
|
|
|
mikhail09p |
Дата: Чт, 21.05.2015, 21:46 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Ок, ivan_fd, попробую ещё раз.
|
|
|
|
mikhail09p |
Дата: Пт, 31.07.2015, 12:49 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Вот, работает. Кому интересно, смотрите. Это только проба. Я так понял, нужно включить прерывания обязательно. Это одно из условий.
|
|
|
|
Gomer888 |
Дата: Вс, 04.09.2016, 17:47 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
1
Замечания:
±
На сайте с 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 ; ------------------------------------------------------------------------------
Делаем подпрограммой, запускаем один раз при инициализации.
|
|
|
|