В меге 3 таймера генерируют ШИМ - 2 канала TIMER1 и 1 канал TIMER2. Вам для 3 фаз придется задействовать все три. Модуляцию, очевидно, придется возложить на незадействованный TIMER0 - куда деваться-то?
Для оптимизации желательно было бы сделать таблицу синуса из 256 значений, тогда не надо было сравнивать и обнулять индекс... Но если удобнее 128, то, как мне кажется, оптимальнее сделать OCR1A = aSin[i & 0x7F];
Добавлено after 54 seconds: Да, кстати, у вас нет volatile для глобальных переменных, используемых в прерывании - нарветесь на проблемы.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
попытался сделать через Т0 прерывания по переполнению. Возник вопрос по поводу регулировки частоты, Есть ли еще какой нибудь способ регулировать частоту прерываний? , а то TIMER1_COMPA_vect с прерыванием без делителя и частотой кварца 8 Mhz уж очень широкими шагами регулирует частоту синуса (. и реально ли сделать шаг хотя бы 0.5 hz ?
Попробуйте менять значение во второй строке, раскомментировав её.
09.08.2017 Можно проще. Для примера, изменение с шагом 0,1Гц в диапазоне 100...5Гц
Код:
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);
Последний раз редактировалось akl Ср авг 09, 2017 04:25:48, всего редактировалось 1 раз.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
О том, как получить плавное регулирование частоты модуляции хоть с шагом в 0,0001 Гц, следует курить DDS - прямой цифровой синтез.
Если очень-очень кратко о принципе, то он следующий. Вы заводите переменную не в 8 бит для "скольжения по массиву синусов", а больше, например, 32 бита. Для того самого индексного просмотра таблицы синусов используете СТАРШИЕ биты этого счетчика. А инкрементируете этот счетчик по таймеру, причем частота инкремента постоянная, а шаг может меняться.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Походу все таки 8мега слабовата для Генерации трех фаз с регулировкой частоты 5-50 герц с шагом в 1 герц(
В итоге код пока что такой получился после РЦ цепочки синус получается со сдвигом 120 , но без нее это полный трешь там и речи походу о 120 градусов нет )
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; }
Добавлено after 1 minute 40 seconds: А кто нить побывал DDS на меге8 ,для работы 3х фаз ?
Добавлено after 19 minutes 32 seconds: Или все таки купить мегу48 у нее как раз 5 каналов ШИМ есть как думаете ?
Добавлено after 15 minutes 49 seconds: Уменьшив дискретность добился нужной регулировки частоты) Но все равно что то мне не очень нравиться форма ШИМ , или IR2130 такую скушает ?
Добавлено after 53 seconds:
Добавлено after 17 minutes 37 seconds: А должен вроде быть похож на такой:
Походу все таки 8мега слабовата для Генерации трех фаз с регулировкой частоты 5-50 герц с шагом в 1 герц
нет, не слабовата
7seg писал(а):
В итоге код пока что такой получился после РЦ цепочки синус получается со сдвигом 120 , но без нее это полный трешь там и речи походу о 120 градусов нет
это вообще как? в первой части предложения получился синус со сдвигом, во второй части - опровержение... так получился или нет? не считая совсем неоптимального кода, логически все нормально, должно работать.
рекомендую: 1. сделать таблицу синуса размером 256 байт 2. поместить таблицу синуса во flash 3. вместо трех счетчиков использовать один, прибавляя к нему в нужные моменты "смещение" для 120 градусов 4. изучить принцип DDS и соответственно скорректировать код 5. использовать "оптимальные" типы данных (почему все int, когда на самом деле хватило бы uint8_t?) 6. не забывать про volatile для переменных, используемых в прерывании одновременно с основным кодом 7. активно применять static-переменные (счетчики фазы, например, незачем выносить в глобальную область) 8. не забывать про оптимизацию при компиляции!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Осциллограмма с ног мк напрямую к оцилоскопу. походу где то в настройках ШИМа напортачил. Разобрался почему осциллограмма 1 такая неправильная )) это все шпротеус. )
имхо вот эти строки лишние: if (i1>255) i1=0; if (i2>255) i2=0; if (i3>255) i3=0; переменная 8бит не будет больше 255 (сама сбросится по переполнению). t1 не влияет на частоту, а только на нач фазу (скорость прироста всегда одинаковая) а почему по 5 добавляешь (проскакивая по 4 элемента таблицы), добавляй по 1 (но почаще) - плавнее будет или вообще по t1 — вот и регулировка частоты как вариант.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
В меге 3 таймера генерируют ШИМ - 2 канала TIMER1 и 1 канал TIMER2. Вам для 3 фаз придется задействовать все три. Модуляцию, очевидно, придется возложить на незадействованный TIMER0 - куда деваться-то?
Так ясно куда деваться, на более дешевые мк с кучей таймеров, в том числе 32-х битных с полноценными 16-ти битными пределителями, но ты же никогда в этом не признаешься, проще отправить новичка изучать DDS
Добавлено after 35 seconds: да и ее не бывае в жипеге тока GIF
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
а мой совет насчет индексирования не учли... если к uint8_t i=255 прибавить 1, то автоматически получится 0, и никаких if-ов не надо делать - в том и фишка 255-байтового массива.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения