Перейти к содержанию

Не работает ШИМ на PIC


eestyk

Рекомендуемые сообщения

Имеется микроконтроллер dsPIC30F5011. Хочу реализовать на нём ШИМ через Output Compare Module, так как у этого модуля есть как раз режим PWM. Всё проинициализировал, задал период и коэффициент заполнения ШИМ (duty cycle - 50%), выбрал Timer2. На соответствующей ноге тыкаюсь осциллографом, ничего нет. Не могу понять в чём проблема. Вроде по даташиту настроил правильно.

	#define PERIOD_PWM		12484

	#define PERIOD_PWM_div2	6242

	WriteTimer2 (0);
	OpenTimer2 (T2_ON & T2_GATE_OFF & T2_IDLE_STOP & T2_PS_1_8 & T2_32BIT_MODE_OFF & T2_SOURCE_INT, PERIOD_PWM);
	ConfigIntTimer2 (T2_INT_PRIOR_5 & T2_INT_ON);

	OpenOC3(OC_IDLE_STOP & OC_TIMER2_SRC & OC_PWM_FAULT_PIN_ENABLE, PERIOD_PWM, PERIOD_PWM_div2);
	ConfigIntOC3(OC_INT_PRIOR_0 & OC_INT_ON);

void __attribute__((interrupt, auto_psv)) _T2Interrupt(void) {
	IFS0bits.T2IF = 0;					// Clear Timer interrupt flag 
	Nop();
}

void __attribute__((interrupt, auto_psv)) _OC3Interrupt(void) {
	IFS1bits.OC3IF = 0;			// Clear interrupt flag
}

 

dsPic30F5011-5013.pdf

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Полностью код слишком длинный.

	// PORTB 
	#define	Iout2_adc		ADCBUF0 		//PORTBbits.RB0		// Вход аналоговый от измерителя тока через нагрузку 1
	#define	Iout1_adc		ADCBUF1			//PORTBbits.RB1		// Вход аналоговый от измерителя тока через нагрузку 2
	#define	Iout4_adc		ADCBUF2			//PORTBbits.RB2		// Вход аналоговый от измерителя тока через нагрузку 3
	#define	Iout3_adc		ADCBUF3			//PORTBbits.RB3		// Вход аналоговый от измерителя тока через нагрузку 4
	#define	Iout6_adc		ADCBUF4			//PORTBbits.RB4	
	#define	Iout5_adc		ADCBUF5			//PORTBbits.RB5	
	#define	Iout8_adc		ADCBUF6			//PORTBbits.RB8	
	#define	Iout7_adc		ADCBUF7			//PORTBbits.RB9	
	#define	Iout10_adc		ADCBUF8			//PORTBbits.RB10	
	#define	Iout9_adc		ADCBUF9			//PORTBbits.RB11	
	#define	Iext_adc		ADCBUFA			//PORTBbits.RB12	
	#define	VccCAN_adc		ADCBUFB			//PORTBbits.RB13	
	#define	VccL_adc		ADCBUFC			//PORTBbits.RB14	
	#define	VccA_adc		ADCBUFD			//PORTBbits.RB15	
	#define	Adr4			PORTBbits.RB6		// бит адреса блока
	#define	Adr3			PORTBbits.RB7		// бит адреса блока
#define	ziTRISB	0b1111111111111111 			//настройка направления порта на вход

	//PORTD
	#define	Vout1_d		PORTDbits.RD0		// напряжение на входе 1
	#define	Vout2_d		PORTDbits.RD1		// напряжение на входе 1
	#define	Vout3_d		PORTDbits.RD2		// PWM module as output
	#define	Vout4_d		PORTDbits.RD3		// напряжение на входе 3
	#define	Vout5_d		PORTDbits.RD4		// напряжение на входе 4
	#define	Vout6_d		PORTDbits.RD5		// напряжение на входе 5
	#define	Vout7_d		PORTDbits.RD6		// напряжение на входе 6
	#define	Vout8_d		PORTDbits.RD7		// напряжение на входе 7
	#define	Vout9_d 	PORTDbits.RD8		// напряжение на входе 8
	#define	Vout10_d	PORTDbits.RD9		// напряжение на входе 9

	#define	Input1		PORTDbits.RD10		// Вход 1 внешний
	#define	Input2		PORTDbits.RD11		// Вход 2 внешний
	#define	Input3		PORTCbits.RC1		// Вход 3 внешний
	#define	Input4		PORTCbits.RC2		// Вход 4 внешний
	#define	Input5		PORTCbits.RC13		// Вход 5 внешний
	#define	Input6		PORTCbits.RC14		// Вход 6 внешний
	#define	Input7		PORTFbits.RF4		// Вход 7 внешний
	#define	Input8		PORTFbits.RF5		// Вход 8 внешний
	#define	Adr1		PORTFbits.RF2		// бит адреса блока
	#define	Adr2		PORTFbits.RF3		// бит адреса блока
	#define	X1Ctrl		PORTFbits.RF6		// наличие разъема адреса?
#define	ziTRISD	0b1111111111111011			//настройка направления порта на вход
#define	ziTRISC	0b1111111111111111			//настройка направления порта на вход
#define	ziTRISF	0b1111111111111111			//настройка направления порта на вход

	// PORTG 

	#define	Sw1_ctrl		PORTGbits.RG0		// Выход 1
	#define	Sw2_ctrl		PORTGbits.RG1		// Выход 2
	#define	Sw3_ctrl		PORTGbits.RG2		// Выход 3
	#define	Sw4_ctrl		PORTGbits.RG3		// Выход 4
	#define	Sw5_ctrl		PORTGbits.RG6		// Выход 5
	#define	Sw6_ctrl		PORTGbits.RG7		// Выход 6
	#define	Sw7_ctrl		PORTGbits.RG8		// Выход 7
	#define	Sw8_ctrl		PORTGbits.RG9		// Выход 8
	#define	Sw9_ctrl		PORTGbits.RG12		// Выход 9
	#define	Sw10_ctrl		PORTGbits.RG13		// Выход 10
	#define	Ready_ctrl		PORTGbits.RG14		// Выход готовность
#define	ziTRISG	0b1000110000110000 				//настройка направления порта на выход

 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не это не то, где у вас задана частота работы шим, в каком режиме шим будет работать? опять же нет указания работы седящих на том же порте модулей.

Ссылка на комментарий
Поделиться на другие сайты

Прошу прощения за поздний ответ. При вызове функции в регистры OC3RS записывается период ШИМ, а в регистр OC3R значение скважности ШИМ. Собственно так и получается частота я так понимаю. А что за модуль следящий на порту?

void OpenOC3(unsigned int config, unsigned int value1, unsigned int value2)
{
    OC3CONbits.OCM = 0; /* turn off OC before switching to new mode */
    OC3RS = value1;     /* assign value1 to OCxRS Secondary Register */
    OC3R = value2;      /* assign value2 to OCxR Main Register*/  
    OC3CON = config;    /* assign config to OCxCON Register*/
}

 

Ссылка на комментарий
Поделиться на другие сайты

Период ШИМ записывают в регистр пересчета ТАЙМЕРА связанного с этим ШИМом (PRx), где х - номер ТАЙМЕРА, то есть у Вас PR2. А в регистры OCxR и OCxRS  (тут х - номер модуля Output Compare) записывают состояние счетчика при срабатывании ШИМа. В зависимости от выбранного режима модуля ШИМ применяется либо один из них, либо оба. Обычно младшие биты OCxCON<OCM> и определяют режим.

Читаем референсный мануал на семейство - раздел 14 :  http://ww1.microchip.com/downloads/en/devicedoc/70046c.pdf

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...