Jump to content
Ivan Rusev

stm32f ADC >PWM

Recommended Posts

 

Цитата

 

Как мне сделать так что бы ацп управляло шим?

отдельно работают а вместе не хотят.На avr я так делал на stm не получается?

Поделитесь инфой?

Share this post


Link to post
Share on other sites

PWM_data = ADC_data;

//Скопировать прочитанные данные с АЦП в регистр ШИМ 


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

всё верно но на практике не получается  я  беру   таймер 2 может взять другой .Принцып я понимаю   adc_data = ADC1->DR; TIM2->CCR1= adc_data;

а на atmega32 всё чётко.И в прерываниях тоже.

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

7 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений

Подробнее

Ну так иногда нужно масштабировать АЦП , чтобы поместить данные в регистр ШИМ . Например , если АЦП 12бит , а ШИМ используется 16бит.


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
                     

Измеряем мощность в режиме реального времени с помощью ИС регистратора потребляемой мощности

Одной из важнейших функций обеспечения работы системы управления питанием является измерение среднего значения потребляемой мощности критичных участков цепи питания в режиме реального времени. Микросхемы регистраторов производства Maxim Integrated имеют встроенную функцию накопления измеренных значений мощности и предоставляют на выходе данные, пригодные для вычисления ее среднего значения. В статье рассматриваются различные примеры использования регистраторов для проведения критичных измерений мощности в режиме реального времени.

Подробнее

Сколько бит АЦП и сколько бит ШИМ будет? И как вывод в ШИМ должен работать?


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

АЦП умножить на 16 . И если нужно инвертировано выводить в ШИМ , то :

PWM_data=65535-ADC_data*16;

PWM_data=ADC_data*16; // без инверсии


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Да , так будет работать . Переменная одна только. Читаем с АЦП в переменную , потом с нее копируем в ШИМ предварительно промасштабировав полученные значения с АЦП .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

не работает  таймере  2 вот кусок кода    ADC1->CR2 |= ADC_CR2_SWSTART;
                    while (!(ADC1->SR & ADC_SR_EOC)); //ждем пока первое преобразование завершится
                        ADC1->SR &= ~ADC_SR_EOC;
                  
                        adc_data = ADC1->DR;
                      
                      TIM2->CCR1=adc_data*16;

Share this post


Link to post
Share on other sites

Что именно не работает ? Как себя ведёт? И где копирование выполняешь в регистр ШИМ ?

Как ШИМ настроен?


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

 в основном цикле.настраиваю  через куб.Среда atolic truestudo  ШИМ работает  до запуска преобразования ADC1->CR2 |= ADC_CR2_SWSTART; 

Share this post


Link to post
Share on other sites

Так как ШИМ настроен ?


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

шим не работает с ацп.?

 

static void MX_TIM2_Init(void)
{

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

  LL_TIM_InitTypeDef TIM_InitStruct = {0};
  LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  TIM_InitStruct.Prescaler = 0;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 65535;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  LL_TIM_Init(TIM2, &TIM_InitStruct);
  LL_TIM_DisableARRPreload(TIM2);
  LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);
  LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH1);
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = 0;
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
  LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
  LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH1);
  LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH2);
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);
  LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH2);
  LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH3);
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH3, &TIM_OC_InitStruct);
  LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH3);
  LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH4);
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH4, &TIM_OC_InitStruct);
  LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH4);
  LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET);
  LL_TIM_DisableMasterSlaveMode(TIM2);
  /* USER CODE BEGIN TIM2_Init 2 */

  /* USER CODE END TIM2_Init 2 */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
  /**TIM2 GPIO Configuration  
  PB10   ------> TIM2_CH3
  PB11   ------> TIM2_CH4
  PA15   ------> TIM2_CH1
  PB3   ------> TIM2_CH2 
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_10|LL_GPIO_PIN_11|LL_GPIO_PIN_3;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  LL_GPIO_AF_EnableRemap_TIM2();

}

вот его настройка

на cmsis шим настроить не получается.

Share this post


Link to post
Share on other sites

Если по отдельности работает и то и другое , то должно и так работать .

Может ещё быть из-за типов данных. Приведи явно к uint32_t. Вот так:

 TIM2->CCR1=(uint32_t)adc_data*16;


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Посмотри отладчиком . Или подними уарт, пропиши отладочный вывод , и посмотри что там творится .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Куб  версия нынешняя  Ацп не включается регистрово.

 

Вот и вся причина.

Я любитель работаю через куб.правда перехожу на cmsis

 

Share this post


Link to post
Share on other sites

Ты ж писал по отдельности работает! Есть такой ютуб канал NarodStream начни хоть с него. Так у тебя Atollic или CubeIDE, а то как то несовместимо с утверждением "нынешняя версия"

Edited by MasterElectric

Share this post


Link to post
Share on other sites

Если код на ацп и шим брался из примеров, то я сталкивался с тем, что шим менялся только через его инициализацию. Т.е. пример шим для данного применения непригоден.


Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Если не в ручную а через Куб .То раньше в студии можно было спокойно команды писать на cmsis в регистрах а сейчас не всё проходит.

АЦП  например.

И дело не в отладчике а в кубе.

Share this post


Link to post
Share on other sites

У меня в кубе всё получилось а вот напрямую cmsis шим не получаетя.

 


    RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;

    RCC-> APB1ENR     |=RCC_APB1ENR_TIM2EN;
       RCC->APB2ENR|=RCC_APB2ENR_AFIOEN;
       GPIOA->CRH&=~GPIO_CRH_CNF15_1;
       GPIOA->CRH|=GPIO_CRH_CNF15_1;

           GPIOA->CRH&=~GPIO_CRH_MODE15;
           GPIOA->CRH|=GPIO_CRH_MODE15;
     
            TIM2->PSC = 0; // Настраиваем делитель что таймер тикал 1000 раз в секунду
              TIM2->ARR = 65535 ;
         
             //TIM2->EGR |= TIM_EGR_UG ;
              TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
            
              TIM2->CCER&=~TIM_CCER_CC1P;
              TIM2->CR1&=~TIM_CR1_DIR;
            
              TIM2->CCR1=0;
    

              TIM2->CR1|=   TIM_CR1_CEN;
           
}

вот кусок настроек что не так?

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...