Технический форум по робототехнике.
neptun19 » 17 дек 2020, 14:18
Всем добра! На "народе" есть статья, "Трехфазный генератор регулируемой частоты" Автор приводит схему, исходник на ассемблере и скомпилированную программу. Но... в исходнике где то ошибка, как и в первой статье автора "Формирователь синусоидального сигнала для питания двигателя переменного тока с регулировкой частоты". Первую я доделал и изготовил в железе. Прекрасно работает,
не выключаясь на протяжении нескольких лет. Теперь возникла необходимость в 3х фазах. Адрес исходной программы -
http://www.yysup.narod.ru/schem/3fase.html Прикрепленный архив скопирован с "народа".
Помогите, программа не подает признаков жизни. Возможно напутано что то с инициализацией. Как и в первой его программе.
- Вложения
-
- 3fas_g.rar
- (3.98 КиБ) Скачиваний: 0
Radist » 02 янв 2021, 21:03
Ковыряться в чужой программе - наверное это никто не любит, проще и быстрее самому написать, надо только суть уловить. Задача (насколько я после праздников понял) - иметь три синусоиды для трехфазного движка. Сдвиг фаз постоянен, 120 градусов, а вот частоту желательно менять, так скорость можно регулировать. Так вот, к идее. Простой способ DDS, прямой цифровой синтез, в интернете есть статья Ридико Лелнида Ивановича, там все разжевано. Сделать из одного генератора три - элементарно.
Foton-4n » 23 янв 2021, 00:31
Да мне надо собирать драйвер асинхронника так что это про меня. Но надо МК с 2-мя 16 бит таймерами желательно там и напряжение еще надо менять в зависимости от частоты.
Так что ты не можешь уже в отлаженную программу добавить 3 фазы со сдвигом? В чём проблема?
Seggio » 31 июл 2021, 07:04
PIC24.ru автору осрв напиши
Seggio » 01 авг 2021, 08:41
- Код: Выделить всё • Развернуть
void TASK_ADC(void)
{for(;;);
{aden=1;
ADSC=1;
OS_COND_WAIT(!ADSC);
m_cSpeed=ADCH;
OS_Delay(100mS);}}
Seggio » 03 авг 2021, 08:31
void Task_F(void){
for(;;){ const char A[15]={125,200,255,200,125,55,0,55,125,200,255,200,125,55};
int i;
for(i;i<9;i++){k=0;
while(k<3){
if(k=0) portd=A[i];
if(k=1) portd=A[i+4];
if(k=2) A[i+6];
portb=pow(2,k);
OS_Delay(m_cSpeed);
k++;}}}
Seggio » 05 авг 2021, 14:28
Ошибка.Надо PORTD=A[I+6];,а на выход три ЦАП
Добавлено спустя 3 часа 48 минут 8 секунд:- Код: Выделить всё • Развернуть
void Init(void){
TOIEO=1;
CS00=1;
CS02=1;
DDRB=0X07;
DDRD=0XFF;
DDRC=0X00;
ADMUX=0;
}
void interrupt isr(void){
if(TOV0) {
OS_Timer();
TOV0=0;
}//1ms-Fosc=10mhz
Добавлено спустя 1 час 25 минут 23 секунды:- Код: Выделить всё • Развернуть
#include<osa.h>
#include<math.h>
#define ms 1
char m_cSpeed=2;
//здесь 4 подпрограммы;
void main(void){
Init();
OS_Init();
OS_Task_Create(0,Task_ADC);
OS_Task_Create(0,Task_F);
OS_EI();
OS_RUN();
} END
ЦАП на 555ир23, B0-C1,B1-C2
Добавлено спустя 8 минут 41 секунду:Загрузи с pic24.ru ОСРВ для avr. Установи AVRStudio, winavr. Исправив ошибки откомпилируй, шим немного сложнее, а тут получилось всё на скорую руку