Вт авг 08, 2017 09:06:03
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int aSin[128]={
127,134,140,146,152,158,164,170,176,182,187,193,198,203,208,213,217,222,226,230,233,
236,240,242,245,247,249,251,252,253,254,254,254,254,254,253,252,251,249,247,245,242,
240,236,233,230,226,222,217,213,208,203,198,193,187,182,176,170,164,158,152,146,140,
134,127,121,115,109,103,97,91,85,79,73,68,62,57,52,47,42,38,33,29,25,22,19,15,13,10,
8,6,4,3,2,1,1,0,1,1,2,3,4,6,8,10,13,15,19,22,25,29,33,38,42,47,52,57,62,68,73,79,85,
91,97,103,109,115,121
};
int i;
ISR(TIMER1_COMPA_vect)
{
OCR2=aSin[i];
i++;
if (i>127) i=0;
}
int main(void)
{
PORTB=0x00;
DDRB = (1<<PB1) |(1<<PB2)| (1<<PB3);
TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
OCR1A=512;
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(0<<CS21)|(1<<CS20);
TIMSK=(1<<OCIE1A);
sei();
for (;;)
{
}
return 0;
}
Вт авг 08, 2017 10:43:01
Вт авг 08, 2017 11:05:44
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int aSin[128]={
127,134,140,146,152,158,164,170,176,182,187,193,198,203,208,213,217,222,226,230,233,
236,240,242,245,247,249,251,252,253,254,254,254,254,254,253,252,251,249,247,245,242,
240,236,233,230,226,222,217,213,208,203,198,193,187,182,176,170,164,158,152,146,140,
134,127,121,115,109,103,97,91,85,79,73,68,62,57,52,47,42,38,33,29,25,22,19,15,13,10,
8,6,4,3,2,1,1,0,1,1,2,3,4,6,8,10,13,15,19,22,25,29,33,38,42,47,52,57,62,68,73,79,85,
91,97,103,109,115,121
};
int i;
/*
ISR(TIMER1_COMPA_vect)
{
OCR2=aSin[i];
i++;
if (i>127) i=0;
}
*/
int t1;
ISR(TIMER0_OVF_vect)
{
if (t1==21)
{
OCR2=aSin[i];
i++;
if (i>127) i=0;
}
t1++;
if (t1>21)
{
t1=0;
}
}
int main(void)
{
PORTB=0x00;
DDRB = (1<<PB1) |(1<<PB2)| (1<<PB3);
//TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
//OCR1A=512;
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(0<<CS21)|(1<<CS20);
TIMSK=(0<<OCIE1A)|(1<<TOIE0);
TCCR0=(1<<CS00);
sei();
for (;;)
{
}
return 0;
}
Вт авг 08, 2017 12:08:14
OCR1A=10*F_CPU/64/(1000-0)/2-1
//OCR1A=10*F_CPU/64/(1000-5)/2-1
TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(0<<CS21)|(1<<CS20);
TIMSK=(1<<OCIE1A)|(1<<TOIE0);
TCCR0=(1<<CS00);
OCR1A=10*F_CPU/128/(1000-n)-1 ; при изменении n в диапазоне 0...950, частота
TCCR1B = (1<<WGM12)|(1<<CS10);
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(0<<CS21)|(1<<CS20);
TIMSK=(1<<OCIE1A)|(1<<TOIE0);
TCCR0=(1<<CS00);
Вт авг 08, 2017 12:30:14
Ср авг 09, 2017 05:58:02
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int aSin[128]={
127,134,140,146,152,158,164,170,176,182,187,193,198,203,208,213,217,222,226,230,233,
236,240,242,245,247,249,251,252,253,254,254,254,254,254,253,252,251,249,247,245,242,
240,236,233,230,226,222,217,213,208,203,198,193,187,182,176,170,164,158,152,146,140,
134,127,121,115,109,103,97,91,85,79,73,68,62,57,52,47,42,38,33,29,25,22,19,15,13,10,
8,6,4,3,2,1,1,0,1,1,2,3,4,6,8,10,13,15,19,22,25,29,33,38,42,47,52,57,62,68,73,79,85,
91,97,103,109,115,121
};
int i1=0; //Переменная для подсчета элемента массива
int i2=43; //Переменная для подсчета элемента массива
int i3=85; //Переменная для подсчета элемента массива
int t1=0; // переменная для изменения частоты синуса (скорость прохода по массиву aSin )
ISR(TIMER0_OVF_vect)
{
t1++;
if (t1==6)
{
//PORTB^=(1<<PB0); // Отладочный сигнал.
OCR1A=aSin[i1];
OCR1B=aSin[i2];
OCR2=aSin[i3];
i1++;
i2++;
i3++;
if (i1>127) i1=0;
if (i2>127) i2=0;
if (i3>127) i3=0;
}
if (t1>6) t1=0;
}
int main(void)
{
PORTB=0x00;
DDRB = (1<<PB0) |(1<<PB1) |(1<<PB2)| (1<<PB3);
TCCR0=(0<<CS02)|(0<<CS01)|(1<<CS00);
TCCR1A=(1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(0<<WGM11)|(1<<WGM10);
TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10);
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(1<<CS21)|(0<<CS20);
TIMSK=(0<<OCIE2)|(0<<TOIE2)|(0<<OCIE1A)|(0<<OCIE1B)|(0<<TOIE1)|(1<<TOIE0);
sei();
for (;;)
{
}
return 0;
}
Ср авг 09, 2017 06:47:46
нет, не слабовата7seg писал(а):Походу все таки 8мега слабовата для Генерации трех фаз с регулировкой частоты 5-50 герц с шагом в 1 герц
это вообще как? в первой части предложения получился синус со сдвигом, во второй части - опровержение... так получился или нет? не считая совсем неоптимального кода, логически все нормально, должно работать.7seg писал(а):В итоге код пока что такой получился после РЦ цепочки синус получается со сдвигом 120 , но без нее это полный трешь там и речи походу о 120 градусов нет
Ср авг 09, 2017 07:39:01
Ср авг 09, 2017 07:52:22
Ср авг 09, 2017 09:05:10
const unsigned char aSin[256]PROGMEM = {
0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8,
9, 10, 12, 13, 15, 16, 18, 19, 21, 23, 25, 27, 29, 31, 33, 35,
37, 39, 42, 44, 46, 49, 51, 54, 56, 59, 62, 64, 67, 70, 73, 76,
79, 81, 84, 87, 90, 93, 96, 99, 103,106,109,112,115,118,121,124,
128,131,134,137,140,143,146,149,152,156,159,162,165,168,171,174,
176,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216,
218,220,222,224,226,228,230,232,234,236,237,239,240,242,243,245,
246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255,
255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,
246,245,243,242,240,239,237,236,234,232,230,228,226,224,222,220,
218,216,213,211,209,206,204,201,199,196,193,191,188,185,182,179,
176,174,171,168,165,162,159,156,152,149,146,143,140,137,134,131,
128,124,121,118,115,112,109,106,103,99, 96, 93, 90, 87, 84, 81,
79, 76, 73, 70, 67, 64, 62, 59, 56, 54, 51, 49, 46, 44, 42, 39,
37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 18, 16, 15, 13, 12, 10,
9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0
};
uint8_t i1=0; //Переменная для подсчета элемента массива
uint8_t i2=43; //Переменная для подсчета элемента массива
uint8_t i3=85; //Переменная для подсчета элемента массива
uint8_t t1=0; // переменная для изменения частоты синуса (скорость прохода по массиву aSin )
ISR(TIMER0_OVF_vect)
{
t1++;
if (t1==5)
{
OCR1A=pgm_read_byte(&(aSin[i1]));
OCR1B=pgm_read_byte(&(aSin[i2]));
OCR2=pgm_read_byte(&(aSin[i3]));
i1+=5;
i2+=5;
i3+=5;
if (i1>255) i1=0;
if (i2>255) i2=0;
if (i3>255) i3=0;
}
if (t1>5) t1=0;
}
int main(void)
{
PORTB=0x00;
DDRB = (1<<PB0) |(1<<PB1) |(1<<PB2)| (1<<PB3);
TCCR0=(0<<CS02)|(0<<CS01)|(1<<CS00);
TCCR1A=(1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(0<<WGM11)|(1<<WGM10);
TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10);
TCCR2=(1<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(1<<CS21)|(0<<CS20);
TIMSK=(0<<OCIE2)|(0<<TOIE2)|(0<<OCIE1A)|(0<<OCIE1B)|(0<<TOIE1)|(1<<TOIE0);
sei();
for (;;)
{
}
return 0;
}
Ср авг 09, 2017 10:02:13
Ср авг 09, 2017 10:19:38
Ср авг 09, 2017 10:24:14
Ср авг 09, 2017 11:07:41
Ср авг 09, 2017 11:10:03
Ср авг 09, 2017 11:13:53
Ср авг 09, 2017 11:32:19
ISR(TIMER0_OVF_vect)
{
t1++;
if (t1==5)
{
OCR1A=pgm_read_byte(&(aSin[i1]));
OCR1B=pgm_read_byte(&(aSin[i2]));
OCR2=pgm_read_byte(&(aSin[i3]));
i1+=5;
i2+=5;
i3+=5;
if (i1>255) i1=0;
if (i2>255) i2=0;
if (i3>255) i3=0;
}
if (t1>5) t1=0;
}
Ср авг 09, 2017 11:50:54
ISR(TIMER0_OVF_vect)
{
OCR1A=pgm_read_byte(&(aSin[i1]));
OCR1B=pgm_read_byte(&(aSin[i2]));
OCR2=pgm_read_byte(&(aSin[i3]));
i1+=t1;
i2+=t1;
i3+=t1;
}
Чт авг 10, 2017 03:39:21
Чт авг 10, 2017 06:36:06
Верно, не ошибаетесь. Правда для разных типов нагрузки на двигатель по разным законам, но во всех случаях с увеличением частоты растёт и напряжение.7seg писал(а):А вроде для управления АД, должно быть наоборот или я ошибаюсь ?