Пн май 13, 2024 22:10:39
Ну значит правильно между 2 и 3 каналом сквозняк?Oleg.normalniy писал(а):канал 0,1,2 это ключи на шине 310 вольт , каналы 3,4,5 это ключи на земле
Так я уже выкладывал че спамить то?Oleg.normalniy писал(а): где кино ?
Пн май 13, 2024 22:29:19
Ну значит правильно между 2 и 3 каналом сквозняк?Oleg.normalniy писал(а):канал 0,1,2 это ключи на шине 310 вольт , каналы 3,4,5 это ключи на земле
Так я уже выкладывал че спамить то?Oleg.normalniy писал(а): где кино ?
Пн май 13, 2024 22:33:50
Ср май 15, 2024 15:11:50
Бубоник писал(а):Думаю особого труда переписать код под stm32 не будет, главное чтобы контроллер был с 6 канальным шимом.
Ср май 15, 2024 20:22:22
Ну изначально я код писал под stm32 потому как stm8 не было под рукой 6 канальных. Писал на микроСях, потом узнал что компилятор там кака, и теперь там проект пылится. Кривой правда но рабочий. Инициализацию регистрами выполнял без либ.asvhmao писал(а):На stm32 ещё не собирали?
Пн май 20, 2024 21:31:44
#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;
}
}
Пн май 20, 2024 22:56:10
Пн май 20, 2024 23:38:25
Вт май 21, 2024 02:24:11
Вт май 21, 2024 20:33:23
Вт май 21, 2024 20:56:21
Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.asvhmao писал(а):Для чего там таймер_3 в прерывании?
Включает теневой регистр ARR. При включении значения вступают в силу после обновления таймера.asvhmao писал(а):Регистр CR1, бит ARPE, что он делает?
Это все связано с прерыванием. Установка прерывания флаги события. В первом таймере они не нужны.asvhmao писал(а):Регистр DIER, первого таймера, биты UDE, UIE, что они делают и надо ли их подключать?
Регистр SR, бит UIF, его мониторить надо?
Включает первый канал на ножке контроллера.asvhmao писал(а):Регистр CCMR1, бит OC1PE тоже непонятен.
Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.asvhmao писал(а):Один раз нарисовать три таблицы и закидывать в ÇCRx по прерыванию.
Таймер 1 работает как источник опорной частоты шим. Если будем менять регистры Tim_1_PSC и Tim_1_ARR то будет плыть частота шим с частотой синусойды и что в итоге получится хз. Я бы на такое не рискнул.asvhmao писал(а):Можно ещё одну или две таблицы, предделителя частоты регистр Tim_1_PSC и длительность периода одного значения из синусоиды Tim_1_ARR рисовать (увеличиваем при снижении частоты).
А что вам не нравиться в моей таблице?jcxz писал(а):Таблицу синуса сделать нормального уровня
Поправлю не из флеши, а из рам.jcxz писал(а):чем читать из флеши
У него сквозняк дует по ключам и хочет чтобы мы это схавали.Oleg.normalniy писал(а):да нахрена вам синус сдался , я уже устал вам доказывать что самое главное это градусы
Вт май 21, 2024 21:10:44
Вт май 21, 2024 21:39:30
Бубоник писал(а):Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.
Бубоник писал(а):Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.
Бубоник писал(а): и что в итоге получится хз. Я бы на такое не рискнул.
Вт май 21, 2024 22:00:49
Бубоник писал(а):Он обновляет значения регистров CCR в таймере 1 с одинаковым промежутком по времени. Без этого получится рваная синусойда.
Бубоник писал(а):Возьму на заметку. Изначально рассчитывал чуть оптимизация памяти чуть математики.
Бубоник писал(а): и что в итоге получится хз. Я бы на такое не рискнул.
Вт май 21, 2024 22:02:51
Модифицировал таблицу синуса под каждую фазу теперь 3 фазы синус за 700 герц нарезает с регулировкой амплитудыasvhmao писал(а):раскритиковал таблицу прибитую гвоздями
Вт май 21, 2024 22:14:39
Вт май 21, 2024 22:19:52
Вт май 21, 2024 22:34:49
Контроллер к силе подключен? LCD 1602 очень капризная вещь на каждый шелест реагирует.asvhmao писал(а):У меня глюки начались когда подключил энкодер
Вт май 21, 2024 23:01:54
Ср май 22, 2024 15:46:04