Например TDA7294

Форум РадиоКот • Просмотр темы - Генерация ШИМ разными таймерами
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 07:30:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Генерация ШИМ разными таймерами
СообщениеДобавлено: Сб ноя 05, 2016 21:27:28 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб янв 08, 2011 18:10:22
Сообщений: 340
Откуда: Украина
Рейтинг сообщения: 0
Здравствуйте.
На stm32f051c8t6 генерирую ШИМ через TIM1 (advanced control) и TIM3 (general purpose) с абсолютно одинаковыми настройками. Но на пинах с TIM1 максимальное напряжение 2.5В, а на пинах с TIM3 только 0.5В. В интернете пишут, что разницы между ними не должно быть.
Подскажите пожалуйста в чем может быть проблема?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация ШИМ разными таймерами
СообщениеДобавлено: Сб ноя 05, 2016 21:47:38 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 1
zwer97 писал(а):
Подскажите пожалуйста в чем может быть проблема?
Неверное к коде.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация ШИМ разными таймерами
СообщениеДобавлено: Вс ноя 06, 2016 01:12:07 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Сб янв 08, 2011 18:10:22
Сообщений: 340
Откуда: Украина
Рейтинг сообщения: 0
Мурик писал(а):
Неверное к коде.


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

Код:
#include "main.h"
#include "stm32f0xx.h"
#include <stdio.h>
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_usart.h"
#include <stm32f0xx_syscfg.h>

GPIO_InitTypeDef gpio;
static __IO uint32_t TimingDelay;

uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0, Channel4Pulse = 0;

 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;


void Delay(__IO uint32_t nTime);
static void TIM_Config(void);
void step1(void);



static void TIM_Config(void)
{

  RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA , ENABLE);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_2);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_2);
 
   RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE);
 
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource0, GPIO_AF_1);
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_1);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_1);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_1);
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
 
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = 1199;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
 
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = 300;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
 
   TIM_OC1Init(TIM1, &TIM_OCInitStructure);
   TIM_Cmd(TIM1, ENABLE);
   TIM_CtrlPWMOutputs(TIM1, ENABLE);
 
   TIM_OC1Init(TIM3, &TIM_OCInitStructure);
   TIM_Cmd(TIM3, ENABLE);
   TIM_CtrlPWMOutputs(TIM3, ENABLE);
   
}



int main(void)
{
  TIM_Config();
 
  if (SysTick_Config(SystemCoreClock / 5000))
  {
    /* Capture error */
    while (1);
  }

  while (1)
  {
 
  Channel1Pulse = 10;
  Channel2Pulse = 100;
  Channel3Pulse = 100;
  Channel4Pulse = 10;
 
        TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel4Pulse;
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);
       
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
        GPIO_SetBits(GPIOB, GPIO_Pin_4);
        Delay(500);
       
  Channel1Pulse = 119;
  Channel2Pulse = 1199;
  Channel3Pulse = 1199;
  Channel4Pulse = 119;
 
        TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;
       TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);
         TIM_OCInitStructure.TIM_Pulse = Channel4Pulse;
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);       
 
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);
        GPIO_ResetBits(GPIOB, GPIO_Pin_4);
        Delay(500);
       

   
  }
}

void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;

  while(TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}


Добавлено after 6 minutes 22 seconds:
Заметил, что если пишу большее значение в Pulse для TIM3 то напряжение растет. Хотя должно было бы работать одинаково на TIM1 и TIM3 с одинаковыми значениями :shock:

Добавлено after 2 hours 59 minutes 57 seconds:
Спасибо за помощь, проблема таки была в коде. Для TIM3 забыл прописать TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
:))


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y