Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: частотник на stm32f4

Пн май 13, 2024 22:10:39

Oleg.normalniy писал(а):канал 0,1,2 это ключи на шине 310 вольт , каналы 3,4,5 это ключи на земле
Ну значит правильно между 2 и 3 каналом сквозняк? :shock:
СпойлерИзображение
Oleg.normalniy писал(а): где кино ?
Так я уже выкладывал че спамить то? :dont_know:

Re: частотник на stm32f4

Пн май 13, 2024 22:29:19

Oleg.normalniy писал(а):канал 0,1,2 это ключи на шине 310 вольт , каналы 3,4,5 это ключи на земле
Ну значит правильно между 2 и 3 каналом сквозняк? :shock:
СпойлерИзображение
Oleg.normalniy писал(а): где кино ?
Так я уже выкладывал че спамить то? :dont_know:

где ? вы случаем с восьмикрутовской мафии ? я насчитал 6 точек на синус , и ШИМ сдвинут каряво , вот вам косяки восьмикрута
https://www.youtube.com/watch?v=bSZCp-c ... PQsQ%3D%3D

Re: частотник на stm32f4

Пн май 13, 2024 22:33:50

Рисовал проект на stm8. Думаю особого труда переписать код под stm32 не будет, главное чтобы контроллер был с 6 канальным шимом. Правда только схема у меня качует по рисункам))
Спойлер

Re: частотник на stm32f4

Ср май 15, 2024 15:11:50

Бубоник писал(а):Думаю особого труда переписать код под stm32 не будет, главное чтобы контроллер был с 6 канальным шимом.

На stm32 ещё не собирали?
Интересна настройка таймера, на самом низком уровне, особенно настройка прерывания и предзагрузки значений.

Re: частотник на stm32f4

Ср май 15, 2024 20:22:22

asvhmao писал(а):На stm32 ещё не собирали?
Ну изначально я код писал под stm32 потому как stm8 не было под рукой 6 канальных. Писал на микроСях, потом узнал что компилятор там кака, и теперь там проект пылится. Кривой правда но рабочий. Инициализацию регистрами выполнял без либ.

Добавлено after 9 minutes 35 seconds:
В дальнейшем попробую среду разработки IAR под stm32 поставить, а то без дела 32-ые валяются. В прошлый раз не получилось голая установилась без стандартных либ под контроллеры.

Re: частотник на stm32f4

Пн май 20, 2024 21:31:44

Поковырялся на выходных с IAR-ом. Переписал рабочий код с рабочего проекта от STM8 под STM32. Это основной код генерации трехфазного шима, так сказать костяк частотного преобразователя. Далее можно манипулировать амплитудой, ревесом, частотой сдвигать фазы больше 120° или в меньшую сторону, относительно друг друга. Задавать любую частоту шим. Менять амплитуду каждой фазы отдельно(предположительно необходимо для однофазных двигателей) Максимальная частота генерации синуса около 2,8 КГц при условии если амплитуда равна 1. При амплитуде меньше 1 уже будет около 450 Герц. Если найдется как переделать на большую производительность буду весьма благодарен за помощь :roll:
Спойлер
Код:
#include <stm32f0xx.h>



char ugol_a=0,ugol_b=60,ugol_c=30,revers=0,faza_a,faza_b,faza_c;
float amplitude=1;//управляет амплитудой синуса. Меньше единицы частота падает до 450 герц
//без возможности управления
signed char sinus[90]={0,3,7,10,14,17,20,23,26,29,32,35,37,39,41,43,45,46,
48,49,49,50,50,50,50,49,49,48,46,45,43,41,39,37,35,32,29,26,23,20,17,14,10,7,3,
0,-3,-7,-10,-14,-17,-20,-23,-26,-29,-32,-35,-37,-39,-41,-43,-45,-46,-48,-49,-49,
-50,-50,-50,-50,-49,-49,-48,-46,-45,-43,-41,-39,-37,-35,-32,-29,-26,-23,-20,-17,
-14,-10,-7,-3};
int j;


void TIM3_IRQHandler (void)
{
  if ((TIM3->SR & TIM_SR_UIF) == TIM_SR_UIF)
  {
    ugol_a++;
    ugol_b++;
    ugol_c++;
    if(ugol_a>=90)ugol_a=0;
    if(ugol_b>=90)ugol_b=0;
    if(ugol_c>=90)ugol_c=0;
    if(revers)
    {
      if(amplitude<1)
      {
        TIM1->CCR1=50-sinus[ugol_a]*amplitude;
        TIM1->CCR2=50-sinus[ugol_b]*amplitude;
        TIM1->CCR3=50-sinus[ugol_c]*amplitude;
      }
      else
      {       
        TIM1->CCR1=50-sinus[ugol_a];
        TIM1->CCR2=50-sinus[ugol_b];
        TIM1->CCR3=50-sinus[ugol_c]; 
      }
     
    }
    else
    {
      if(amplitude<1)
      {
        TIM1->CCR1=50-sinus[ugol_a]*amplitude;
        TIM1->CCR3=50-sinus[ugol_b]*amplitude;
        TIM1->CCR2=50-sinus[ugol_c]*amplitude;
      }
      else
      {       
        TIM1->CCR1=50-sinus[ugol_a];
        TIM1->CCR3=50-sinus[ugol_b];
        TIM1->CCR2=50-sinus[ugol_c]; 
      }     
    }

    TIM3->SR &= ~TIM_SR_UIF;                   /* (2) */
   
  }
}

int main()
{
  RCC->CFGR = 0x00280002;
  while(!RCC_CR_PLLRDY);
  RCC->CR = 0x01004C83;

  RCC->AHBENR=0x00060014;
GPIOA->MODER=0x282A8010; //20000;2A8000
GPIOA->AFR[1]=546;
GPIOA->AFR[0]=0x20000000;
GPIOB->MODER= 0x0000000A; //20000;2A8000
GPIOB->AFR[0]=0X00000022;

  RCC->APB2ENR |= RCC_APB2ENR_TIM1EN ;
  TIM1->PSC = 9;
  TIM1->ARR = 99;
  TIM1->CCMR1 = 0x7070;
  TIM1->CCMR2 = 0x70;
  TIM1->CCR1 = 50;
  TIM1->CCR2 = 50;
  TIM1->CCR3 = 50;
  TIM1->CCER = 0x555;
  TIM1->BDTR = 0x8060;
  TIM1->CR1 = 0x21;
 
  RCC->APB1ENR |= RCC_APB1ENR_TIM3EN ;
  TIM3->PSC = 2;///Меньше ставить не желательно основная программа может повиснуть
  TIM3->ARR = 65000;///Меньше 400 ставить не желательно основная программа может повиснуть
  TIM3->DIER = 1;//При amplitude<1
  TIM3->CR1 = 0x01;
  NVIC_EnableIRQ(TIM3_IRQn); /* (9) */
  __enable_irq();
while(1)
{
  j++;
  if(j & 1)
  {
   GPIOA->ODR = 0x004;///Показывает когда работает основная программа
  }
  else
 
  GPIOA->ODR = 0x000;///Показывает когда работает основная программа

  //if(j>100)j=0;
}
}


Добавлено after 5 minutes 1 second:
И еще кое что. Проверял в железе на камне STM32F030C8T6. Пробовал менять таблицу синуса в переменную Float, частота поднималась до 652 Герц, но появлялся косяк, контроллер вываливался в ошибку. HardFault Сейчас попробую с другими 32 битными переменными поиграться может прокатит.

Добавлено after 16 minutes 10 seconds:
Херня не работает. Этот код не советую использовать. Контроллер на максимальной частоте виснет хоть ты тресни. С 8-кой таких проблем не было. Буду изучать косяк дальше.

Добавлено after 1 hour 2 minutes 49 seconds:
Нашел косяк. PLL Задрал до 96 МГц. Вот то он и охренел :)) .Чуть не внимательно даташник прочитал регистр PLLNODIV. Понизить частоту надо до 48 МГц RCC->CFGR = 0x00100002;

Re: частотник на stm32f4

Пн май 20, 2024 22:56:10

Для меня си, с плюсами и без, как китайская грамата, но посмотрел код и несколько вопросов появилось. Курил правда пока стм32ф103, во многом ещё путаюсь. Да и уровень начальный абдуриновский только.

Для чего там таймер_3 в прерывании?
Регистр CR1, бит ARPE, что он делает? Его не надо включить, что бы автоматически закидывать значения в буфер? Или в данном примере он не нужен?
Регистр DIER, первого таймера, биты UDE, UIE, что они делают и надо ли их подключать?
Регистр SR, бит UIF, его мониторить надо?
Регистр CCMR1, бит OC1PE тоже непонятен.

Синусы, косинусы. Зачем их каждый раз вычислять? Один раз нарисовать три таблицы и закидывать в ÇCRx по прерыванию. Камню так легче наверное будет. :dont_know:
Можно ещё одну или две таблицы, предделителя частоты регистр Tim_1_PSC и длительность периода одного значения из синусоиды Tim_1_ARR рисовать (увеличиваем при снижении частоты). А при работе с двигателями разной мощности, добавит умножение на поправочные коэффициенты. Частоту ведь не так часто надо менять.

Re: частотник на stm32f4

Пн май 20, 2024 23:38:25

Если найдется как переделать на большую производительность буду весьма благодарен за помощь :roll:
Прочитать за Q-формат: https://en.wikipedia.org/wiki/Q_(number_format)
И переделать всё на fixed-point. О float - забыть.
Таблицу синуса сделать нормального уровня, а не то недоразумение что сейчас.

Добавлено after 8 minutes 47 seconds:
Синусы, косинусы. Зачем их каждый раз вычислять? Один раз нарисовать три таблицы
Хотя бы затем, чтобы быстрее генерить синусоиду. На серьёзных ARM-ах (от Cortex-M3 и старше) генерить её быстрее, чем читать из флеши. И генерить можно произвольную частоту, а не прибитую гвоздями в таблице.

Re: частотник на stm32f4

Вт май 21, 2024 02:24:11

В стм есть аппаратный калькулятор для вычисления синуса? Или программно вычисляется быстрее чем копирует и вставляет?

Re: частотник на stm32f4

Вт май 21, 2024 20:33:23

народ , да нахрена вам синус сдался , я уже устал вам доказывать что самое главное это градусы , вот вам кино где ширину шим-а можно регулировать


и кино где нет синуса а только градусы на 96 вольтах



вот книга про градусы , 120 град это скаляр , 180 град. это вектор , но это вчерашний день , есть другое кино , что при 80 вольт с низов тащит нагрузку не перемотанный асинхронный движок
Вложения
TOSCHIBA ru.pdf
(3.04 MiB) Скачиваний: 52

Re: частотник на stm32f4

Вт май 21, 2024 20:56:21

asvhmao писал(а):Для чего там таймер_3 в прерывании?
Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.
asvhmao писал(а):Регистр CR1, бит ARPE, что он делает?
Включает теневой регистр ARR. При включении значения вступают в силу после обновления таймера.
asvhmao писал(а):Регистр DIER, первого таймера, биты UDE, UIE, что они делают и надо ли их подключать?
Регистр SR, бит UIF, его мониторить надо?
Это все связано с прерыванием. Установка прерывания флаги события. В первом таймере они не нужны.
asvhmao писал(а):Регистр CCMR1, бит OC1PE тоже непонятен.
Включает первый канал на ножке контроллера.
asvhmao писал(а):Один раз нарисовать три таблицы и закидывать в ÇCRx по прерыванию.
Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.
asvhmao писал(а):Можно ещё одну или две таблицы, предделителя частоты регистр Tim_1_PSC и длительность периода одного значения из синусоиды Tim_1_ARR рисовать (увеличиваем при снижении частоты).
Таймер 1 работает как источник опорной частоты шим. Если будем менять регистры Tim_1_PSC и Tim_1_ARR то будет плыть частота шим с частотой синусойды и что в итоге получится хз. Я бы на такое не рискнул.
jcxz писал(а):Таблицу синуса сделать нормального уровня
А что вам не нравиться в моей таблице?
jcxz писал(а):чем читать из флеши
Поправлю не из флеши, а из рам.

Добавлено after 2 minutes 55 seconds:
Oleg.normalniy писал(а):да нахрена вам синус сдался , я уже устал вам доказывать что самое главное это градусы
У него сквозняк дует по ключам и хочет чтобы мы это схавали.

Re: частотник на stm32f4

Вт май 21, 2024 21:10:44

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

Re: частотник на stm32f4

Вт май 21, 2024 21:39:30

Бубоник писал(а):Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.

Может в сях и так, в абдурине нормально всё работает, на этом этапе. Первый таймер сам себе в прерывании кидает значения, во время периода, следующий период уже выполняет то что ему дали скушать, закидывая свежие значения и так по кругу. :dont_know:
Главное частоту и период в ноль не уводить. Поставить 0,5Гц, или 0,1Гц, в момент запуска таймера, при значении крутилки 0 Гц.

Изображение

Бубоник писал(а):Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.

Вот аж под сомнением сейчас, после того как jcxz, раскритиковал таблицу прибитую гвоздями. Если я правильно понял, он хотел рассказать про FPU, вычисление с плавающей точкой. Там, вроде как таблицы вообще не нужны. Но он молчит уже почти сутки, а я с этим методом ещё не знаком.
У меня сейчас таблица, посчитанная в столбик в экселе.

Бубоник писал(а): и что в итоге получится хз. Я бы на такое не рискнул.

А я по игрался. Опуская частоту и увеличивая период, тем самым как бы при снижении частоты синусоиды уменьшаем и напряжение. А так как зависимость U/f почти линейная, то достаточно знать верхнии и нижние эти значения, а с остальными провести линейку, хоть таблицей, хоть формулой.

Изображение Изображение
Последний раз редактировалось asvhmao Ср май 22, 2024 00:28:34, всего редактировалось 3 раз(а).

Re: частотник на stm32f4

Вт май 21, 2024 22:00:49

Бубоник писал(а):Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.

Может в сях и так, в абдурине нормально всё работает, на этом этапе. Первый таймер сам себе в прерывании кидает значения, во время периода, следующий период уже выполняет то что ему дали скушать. :dont_know:

Изображение

Бубоник писал(а):Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.

Вот аж под сомнением сейчас, после того как jcxz, раскритиковал таблицу прибитую гвоздями. Если я правильно понял, он хотел рассказать про FPU, вычисление с плавающей точкой. Там, вроде как таблицы вообще не нужны. Но он молчит уже почти сутки, а я с этим методом ещё не знаком.
У меня сейчас таблица, посчитанная в столбик в экселе.

Бубоник писал(а): и что в итоге получится хз. Я бы на такое не рискнул.


я поигрался с ШИМ две стороны , одни минусы , нагрев ключей сразу катит , и при нагреве сквозняк пролетает , вот я и отказался от ШИМ-а две стороны
А я по игрался. Опуская частоту и увеличивая период, тем самым как бы при снижении частоты синусоиды уменьшаем и напряжение. А так как зависимость почти линейная, то достаточно знать верхнии и нижние эти значения, а с остальными провести линейку, хоть таблицей, хоть формулой.

Изображение Изображение


Добавлено after 5 minutes 44 seconds:
и скажу так , шим одна сторона и шим две стороны на малых оборотах полная хрень , гибрид это мощь
Вложения
гибрид.png
(72.51 KiB) Скачиваний: 54
Последний раз редактировалось Oleg.normalniy Вт май 21, 2024 22:07:36, всего редактировалось 1 раз.

Re: частотник на stm32f4

Вт май 21, 2024 22:02:51

asvhmao писал(а):раскритиковал таблицу прибитую гвоздями
Модифицировал таблицу синуса под каждую фазу теперь 3 фазы синус за 700 герц нарезает с регулировкой амплитуды :kill: Моща 8) Кстати было дело рисовал генерацию синусойды. Без формулы sin(x). Производительность так себе.

Re: частотник на stm32f4

Вт май 21, 2024 22:14:39

Бубоник писал(а):Моща

У меня глюки начались когда подключил энкодер (резистор) и экранчик 1602.
Иногда теряет момент прерывания, но это ладно, при изменении частоты бывает что-то таймер подвешивает. Без экрана всё нормально.

Изображение

Re: частотник на stm32f4

Вт май 21, 2024 22:19:52

народ , все самодельщики колхозят таблицу синуса , но не в моём случае , нет у меня таблицы всё просчитывается на лету , в моём случае алгоритм просчитывает ваши хотелки по опции U и L , и просчитывает ШИМ , но если вам не хватает силы то есть переменная Е ( гибрид ) супер сила

Вложения
гибрид.png
(72.51 KiB) Скачиваний: 43

Re: частотник на stm32f4

Вт май 21, 2024 22:34:49

asvhmao писал(а):У меня глюки начались когда подключил энкодер
Контроллер к силе подключен? LCD 1602 очень капризная вещь на каждый шелест реагирует.
А так для моего камня производительности за глаза. 800 герц нигде мне не попадались использовать. Слышал что там вот...., надо 800 герц. Только на практике я нигде это не видел. 400 есть, 200 есть. В дальнейшем буду собирать силу. Погляжу как на другом камне работать будет.

Re: частотник на stm32f4

Вт май 21, 2024 23:01:54

Нет, питание от юсби компьютерного. До силы может и не дойдёт дело, просто играюсь пока.
Там библиотека на экранчик закрытая и он шпарит обновления, как сумасшедший. Где-то были темы с другими библиотеками, пока из виду их потерял, надо будет снова поискать. Питание по пяти вольтам 5,4V, на камне 3,29V. Разберусь. Экранчик с лентяйкой на чипе HD44780. Камень на плате синей таблетки абдуриновской. (Надо посмотреть, может по питанию ёмкостями дополнительно обвешать)
Там, в МК, ещё есть настройки, при отключении таймера, выводы задрать вверх - вниз и если не ошибаюсь, в нейтральное положение. Вывод B12 аварийная остановка. Их настраивали?

Re: частотник на stm32f4

Ср май 22, 2024 15:46:04

я уже устал вам доказывать что самое главное это градусы
Точно! И главное чтобы их было 40! :beer:

Добавлено after 16 minutes 44 seconds:
Вот аж под сомнением сейчас, после того как jcxz, раскритиковал таблицу прибитую гвоздями. Если я правильно понял, он хотел рассказать про FPU, вычисление с плавающей точкой. Там, вроде как таблицы вообще не нужны.
Я говорил как раз, что для вычисления значений синусоиды FPU вообще не нужен. Как и плавающая точка вообще. Всё считается в фиксированной точке целочисленными командами. Да и таблицы тоже не нужны. Проще и намного быстрее всё считать на лету. И для нормальной суносоиды разрядность должна быть в несколько раз больше, чем у ТС.
Считать что-то в плавучке на CPU, в котором даже FPU нет, да ещё в реальном времени - это вообще пробой днища. :facepalm:
Ответить