16.12.2013, 16:24
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
STM32F051 и ШИМ
Порядочно долго не выходит получить ШИМ. Использую TIM3. Хочу на CH2 этого TIM3 получить ШИМ и вывести его на PB5 (если я правильно разобрался в этой запутанной системе).
Код:
|
int main() {
RCC-›APB1ENR|=RCC_APB1ENR_TIM3EN; //тактирование TIM3 (на нем работет ШИМ)
RCC-›AHBENR |= RCC_AHBENR_GPIOBEN; //тактирование порта B (в данном случае необходим для вывода ШИМ)
GPIOB-›MODER &= ~GPIO_MODER_MODER5; //сбрасываем биты MODER отвечающие за PB5
GPIOB-›MODER |= GPIO_MODER_MODER5_1; //устанавливаекм биты MODER PB5 (0b10 - AF)
GPIOB-›OTYPER &= ~GPIO_OTYPER_OT_5; //сбрасываем биты OTYPER_OT_5 (0: Output push-pull (reset state))
GPIOB-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; //устанавливаем OSPEEDR PB5=0b11 (максимальная скорость)
GPIOB-›PUPDR &= ~GPIO_PUPDR_PUPDR5; //сбрасываем биты PUPDR5 PB5 (push-pull, No pull-up, No pull-down)
GPIOB-›AFR[0] |= (uint32_t)1‹‹(4*5); //указываем на PB5 альтернативную функцию 1 (0001: AF1)
TIM3-›PSC = 240 - 1;
TIM3-›ARR = 0x7FFF;
TIM3-›CCR1 = 0x3FFF;
TIM3-›CCMR1 |= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; //CCR1=0b110: PWM mode 1
TIM3-›CCMR1 |= TIM_CCMR1_OC2PE; //Output compare 2 preload enable
TIM3-›CR1 |= TIM_CR1_ARPE; //auto-reload preload enabl (egister is buffered)
TIM3-›CCER |= TIM_CCER_CC2E; //Capture/Compare 2 output enable
TIM3-›CR1 |= TIM_CR1_CEN; //запускаем таймер
while(1);
} |
На PB5 - постоянно 0.
__________________
Kvsrk85(Андрей)
|
|
|
|
16.12.2013, 18:01
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: STM32F051 и ШИМ
как чувствовал что ошибка где то поблизости очень простая и связана с невнимательностью: в коде выше строка TIM3-›CCR1 = 0x3FFF; а канал 2, следовательно надо так TIM3-›CCR2 = 0x3FFF . заработало. аж не верится (долго запускал этот шим). Только для меня остается непонятным момент почему частота ШИМ у меня получается в 2 раза меньше расчетной. Что ее делит в 2 раза не пойму.
__________________
Kvsrk85(Андрей)
Последний раз редактировалось kvark85; 16.12.2013 в 18:40.
|
|
|
|
16.12.2013, 19:04
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: STM32F051 и ШИМ
Сообщение от kvark85
|
и связана с невнимательностью:
|
Угу , если считать что сие уже обсуждалось https://kazus.ru/forums/showthread.php?t=106689
рекомендую всю ветку читать ...
__________________
Осторожно , злой кот
|
|
|
|
16.12.2013, 19:07
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,413
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
|
Re: STM32F051 и ШИМ
апапратно нигде не делится частота? помоему так у лпц13 было вроде
|
|
|
|
16.12.2013, 19:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: STM32F051 и ШИМ
Сообщение от kvark85
|
как чувствовал что ошибка где то поблизости очень простая и связана с невнимательностью: в коде выше строка TIM3-›CCR1 = 0x3FFF; а канал 2, следовательно надо так TIM3-›CCR2 = 0x3FFF . заработало. аж не верится (долго запускал этот шим). Только для меня остается непонятным момент почему частота ШИМ у меня получается в 2 раза меньше расчетной. Что ее делит в 2 раза не пойму.
|
Если выбран режим Center-aligned частота будет в два раза ниже расчетной. При Edge-aligned один-в-один. Но в режиме edge-aligned нельзя получить "чистый" уровень "1" при полном заполнении периода. Всегда будут короткие отрицательные просечки длительностью в период клока таймера. В режиме center-aligned все чисто. На времянках обеих мод все наглядно видно.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
16.12.2013, 19:59
|
|
Прописка
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: STM32F051 и ШИМ
Все верно у меня. Никакого предделения частоты - нет, выравнивания по центру - нет. APB - 48 МГц. Генерирую меандр с частотой 37,7кГц. Код с очень простым расчетом ниже:
Код:
|
RCC-›APB1ENR|=RCC_APB1ENR_TIM3EN; //тактирование TIM3 (на нем работет ШИМ)
RCC-›AHBENR |= RCC_AHBENR_GPIOBEN; //тактирование порта B (в данном случае необходим для вывода ШИМ)
GPIOB-›MODER &= ~GPIO_MODER_MODER5; //сбрасываем биты MODER отвечающие за PB5
GPIOB-›MODER |= GPIO_MODER_MODER5_1; //устанавливаекм биты MODER PB5 (0b10 - AF)
GPIOB-›OTYPER &= ~GPIO_OTYPER_OT_5; //сбрасываем биты OTYPER_OT_5 (0: Output push-pull (reset state))
GPIOB-›OSPEEDR &= ~GPIO_OSPEEDER_OSPEEDR5; //сбрасываем OSPEEDR PB5=0b00 (минимальная скорость)
GPIOB-›PUPDR &= ~GPIO_PUPDR_PUPDR5; //сбрасываем биты PUPDR5 PB5 (push-pull, No pull-up, No pull-down)
GPIOB-›AFR[0] |= (uint32_t)1‹‹(4*5); //указываем на PB5 альтернативную функцию 1 (0001: AF1)
TIM3-›ARR = 48000000/37700; //период ШИМ (37700 - частота ШИМа)
TIM3-›CCR2 = TIM3-›ARR/2;
TIM3-›CCMR1 |= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; //CCR1=0b110: PWM mode 1
TIM3-›CCMR1 |= TIM_CCMR1_OC2PE; //Output compare 2 preload enable
TIM3-›CR1 |= TIM_CR1_ARPE; //auto-reload preload enabl (egister is buffered)
TIM3-›CCER |= TIM_CCER_CC2E; //Capture/Compare 2 output enable
TIM3-›CR1 |= TIM_CR1_CEN; //запускаем таймер |
__________________
Kvsrk85(Андрей)
Последний раз редактировалось kvark85; 16.12.2013 в 20:02.
|
|
|
|
16.12.2013, 21:08
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: STM32F051 и ШИМ
Сообщение от kvark85
|
Только для меня остается непонятным момент почему частота ШИМ у меня получается в 2 раза меньше расчетной.
|
А сколько получилось? И чем проверяешь?
У меня получилось 6Гц
__________________
Осторожно , злой кот
|
|
|
|
17.12.2013, 00:41
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: STM32F051 и ШИМ
Цитата:
|
Порядочно долго не выходит получить ШИМ
|
проще залезть в код библиотечных функций и сравнить, с ними все работает
|
|
|
|
17.12.2013, 05:17
|
|
Гражданин KAZUS.RU
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
|
Re: STM32F051 и ШИМ
ШИМ точно работает, проверено на разных таймерах и режимах
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:26.
|
|