Перейти к содержимому
Форум журнала практической электроники «Датагор»

Куча недорогих очков на все вкусы и цвета. Распродажа, конец сезона

Офигенные керамические подшипники FreeSport 608RS для скейта, роликов, самоката

Оригинал микро-ПК Raspberry Pi 3 Model B+ (Broadcom 1.4GHz quad-core 64 bit processor, Wifi, Bluetooth, USB)

Стартовый набор (23 элемента) Raspberry Pi 3 Internet Of Things

USB флэшка 16/32/64 Gb с доп.выходом на OTG под Android

Пластик PLA Joylites для 3D-принтера, 10m 1.75mm, 10 цветов

Набор инжекторов для 3D-принтера 10шт.

Офигенная миниатюрная рация на литии BaoFeng UV-5R, 5W, 5-15 км! Охота, поход, торговый центр и т.п.

Смартфон Original New Nokia 6 Android 7.0 Nougat 4GB 64GB Octo Core

High Quality 2 Channel PCM Voice Telephone Fiber Optical Media Converter With Ethernet FC Single mode 20Km

Автомобильный сканер Bluetooth Auto Scanner OBDII V2.1 для Android, Windows, Symbian

Аудио кабель джек-джек 3,5мм, 1.5 и 3 м

Двухдрайверные наушники MOOJECAL M1, 16 Ohm, 102dB, Super Bass, чехол

Гарнитура с микрофоном MOOJECAL MJ-06, 32 Ohm, 100dB

Футболки с принтами на выбор, T-Shirt

Мультиметр UNI-T UT139A, True RMS, Auto Range

Набор паяльных инструментов в чехле, паяльник 220V 60W с терморегулятором, пинцет и пр.

Паяльнник 80W с терморегулятором и LCD-дисплеем, популярные жала серии 900M
Wishmaster

Помогите модифицировать программу управления бесколлекторным двигателем постоянного тока.

Рекомендованные сообщения

Здравствуйте товарищи!

Прошу Вас помочь советом о модификации программы управления бесколлекторным двигателем постоянного тока.

Повторил следующую схему:

post-32116-0-41061500-1500409447_thumb.gif

Всё запустилось и отлично работает. Хочу теперь миниатюризировать плату и убрать лишний функционал в виде кнопки запуска и выбора стороны вращения. Опыта в программировании явно не достаёт.

Исходный код:

 

// Подключение бесколлекторного двигателя к AVR(без датчиков)

#include <avr interrupt.h="">

#include <avr io.h="">

#include <util delay.h="">

 

// Фаза U(Верхнее плечо)

#define UH_ON TCCR1A |= (1 << COM1A1);

#define UH_OFF TCCR1A &= ~(1 << COM1A1);

 

// Фаза U(Нижнее плечо)

#define UL_ON PORTB |= (1 << PB5);

#define UL_OFF PORTB &= ~(1 << PB5);

 

// Фаза V(Верхнее плечо)

#define VH_ON TCCR2 |= (1 << COM21);

#define VH_OFF TCCR2 &= ~(1 << COM21);

 

// Фаза V(Нижнее плечо)

#define VL_ON PORTB |= (1 << PB0);

#define VL_OFF PORTB &= ~(1 << PB0);

 

// Фаза W(Верхнее плечо)

#define WH_ON TCCR1A |= (1 << COM1B1);

#define WH_OFF TCCR1A &= ~(1 << COM1B1);

 

// Фаза W(Нижнее плечо)

#define WL_ON PORTB |= (1 << PB4);

#define WL_OFF PORTB &= ~(1 << PB4);

 

#define PHASE_ALL_OFF UH_OFF;UL_OFF;VH_OFF;VL_OFF;WH_OFF;WL_OFF;

 

#define SENSE_U ADMUX = 0; // Вход обратной ЭДС фазы U

#define SENSE_V ADMUX = 1; // Вход обратной ЭДС фазы V

#define SENSE_W ADMUX = 2; // Вход обратной ЭДС фазы W

 

#define SENSE_UVW (ACSR&(1 << ACO)) // Выход компаратора

 

#define START_PWM 10 // Минимальный ШИМ при запуске

#define WORK_PWM 100 // Рабочий уровень ШИМ

 

unsigned char start_stop = 0;

volatile unsigned char motor_pwm = WORK_PWM;

volatile unsigned char commutation_step = 0;

volatile unsigned char rotor_run = 0; // Счетчик импульсов обратной ЭДС

 

// Крутим по часовой стрелке

void commutation(unsigned char startup)

{

switch (commutation_step)

{

case (0):

if(!SENSE_UVW || startup)

{

UH_ON; // На фазе U - ШИМ

WH_OFF; // Фаза W отключена

SENSE_W; // Активируем вход фазы W

commutation_step = 1; // Следующий шаг

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

 

case (1):

if(SENSE_UVW || startup)

{

VL_OFF; // На фазе V - лог. 0

WL_ON; // На Фазе W - лог. 1

SENSE_V; // Активируем вход фазы V

commutation_step = 2;

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

 

case (2):

if(!SENSE_UVW || startup)

{

UH_OFF; // Фаза U отключена

VH_ON; // На фазе V - ШИМ

SENSE_U; // Активируем вход фазы U

commutation_step = 3;

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

 

case (3):

if(SENSE_UVW || startup)

{

UL_ON; // На фазе U - лог. 1

WL_OFF; // На Фаза W - лог. 0

SENSE_W; // Активируем вход фазы W

commutation_step = 4;

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

 

case (4):

if(!SENSE_UVW || startup)

{

VH_OFF; // Фаза V отключена

WH_ON; // На фазе W - ШИМ

SENSE_V; // Активируем вход фазы V

commutation_step = 5;

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

 

case (5):

if(SENSE_UVW || startup)

{

UL_OFF; // На фазе U - лог. 0

VL_ON; // На Фазе V - лог. 1

SENSE_U; // Активируем вход фазы U

commutation_step = 0;

TCNT0 = 0; // Обнуляем счетчик T0

}

break;

}

}

// Обработчик прерывания по компаратору. Детектор обратной ЭДС

ISR(ANA_COMP_vect)

{

rotor_run++; // инкрементируем импульсы

if(rotor_run > 200) rotor_run = 200;

if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную

commutation(0);

}

// Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС

ISR(TIMER0_OVF_vect)

{

commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС

rotor_run = 0; // Сбрасываем счетчик импульсов

OCR1A = START_PWM; // ШИМ минимум

OCR1B = START_PWM;

OCR2 = START_PWM;

}

// Обработчик внешнего прерывания INT0. Энкодер

ISR(INT0_vect){

_delay_us(100);

if ((PIND & ( 1 << PD2)) == 0){

_delay_us(100);

// Крутим против часовой стрелки

if ((PIND & ( 1 << PD1)) == 0)

{

if(motor_pwm != START_PWM) motor_pwm -= 5; // Уменьшаем ШИМ

}

// Крутим по часовой стрелке

else

{

if(motor_pwm != 255) motor_pwm += 5; // Увеличиваем ШИМ

}

}

GIFR = (1 << INTF0); // Сбрасываем флаг внешнего прерывания

return;

}

 

int main (void)

{

// Порты ввода/вывода

DDRB = 0xFF;

PORTB = 0x00;

DDRD &= ~(1 << PD6)|(1 << PD2)|(1 << PD1)|(1 << PD0);

PORTD |= (1 << PD2)|(1 << PD1)|(1 << PD0);

PORTD &= ~(1 << PD6);

 

// T0 - для старта и работы двигателя без сигналов обратной ЭДС

TCCR0 |= (1 << CS02)|(1 << CS00); // Предделитель на 1024

TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению T0

// T1 и T2 ШИМ

TCCR1A |= (1 << COM1A1)|(1 << COM1B1)| // Clear OC1A/OC1B, set OC1A/OC1B at BOTTOM

(1 << WGM10); // Режим Fast PWM, 8-bit

TCCR1B |= (1 << CS10)|(1 << WGM12); // Без предделителя

TCCR2 |= (1 << COM21)| // Clear OC2, set OC2 at BOTTOM

(1 << WGM21)|(1 << WGM20)| // Режим Fast PWM

(1 << CS20); // Без предделителя

 

PHASE_ALL_OFF; // Выключаем все фазы

 

// Аналаговый компаратор

ADCSRA &= ~(1 << ADEN); // Выключаем АЦП

SFIOR |= (1 << ACME); // Отрицательный вход компаратора подключаем к выходу мультиплексора АЦП

ACSR |= (1 << ACIE); // Разрешаем прерывания от компаратора

 

// Внешнее прерывание(Энкодер)

MCUCR |= (1 << ISC01); // Прерывание по заднему фронту INT0(по спаду импульса)

GIFR |= (1 << INTF0); // Очищаем флаг внешнего прерывания

GICR |= (1 << INT0); // Разрешаем внешние прерывания INT0

 

sei(); // Глобально разрешаем прерывания

 

while(1)

{

if((PIND&(1 << PD0)) == 0) // Старт/Стоп

{

_delay_ms(20);

start_stop ^= 1; // Переключаем состояние

while((PIND&(1 << PD0)) == 0){}

}

 

if(start_stop)

{

ACSR |= (1 << ACIE); // Разрешаем прерывание от компаратора

TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению T0

GICR |= (1 << INT0); // Разрешаем внешние прерывания INT0

 

if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ

{

OCR1A = motor_pwm;

OCR1B = motor_pwm;

OCR2 = motor_pwm;

}

}

else

{

PHASE_ALL_OFF; // Все фазы выключены

ACSR &= ~(1 << ACIE); // Запрещаем прерывание от компаратора

TIMSK &= ~(1 << TOIE0); // Запрещаем прерывание по переполнению T0

GICR &= ~(1 << INT0); // Запрещаем внешние прерывания INT0

}

 

}

}

 

 

Хочу, чтобы при подачи питания движок вращался сразу по часовой стрелке, без внешнего прерывания от кнопки. И даже примерно понимаю, что нужно изменить код где-то в этом блоке:

 

 

// Обработчик внешнего прерывания INT0. Энкодер

ISR(INT0_vect){

_delay_us(100);

if ((PIND & ( 1 << PD2)) == 0){

_delay_us(100);

// Крутим против часовой стрелки

if ((PIND & ( 1 << PD1)) == 0)

{

if(motor_pwm != START_PWM) motor_pwm -= 5; // Уменьшаем ШИМ

}

// Крутим по часовой стрелке

else

{

if(motor_pwm != 255) motor_pwm += 5; // Увеличиваем ШИМ

}

}

GIFR = (1 << INTF0); // Сбрасываем флаг внешнего прерывания

return;

}

 

 

 

Но, что именно и как понять не могу.

Изменено пользователем Wishmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день, Дмитрий.

 

Попробуйте из этого куска

 

if((PIND&(1 << PD0)) == 0) // Старт/Стоп

{

_delay_ms(20);

start_stop ^= 1; // Переключаем состояние

while((PIND&(1 << PD0)) == 0){}

}

 

оставить только

 

start_stop = 1;

Изменено пользователем erbol

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

+

... Хочу, чтобы при подачи питания движок вращался сразу по часовой стрелке, без внешнего прерывания от кнопки. ...

 if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ
 {
 OCR1A = motor_pwm;
 OCR1B = motor_pwm;
 OCR2 = motor_pwm;
 }

Если вам не нужна регулировка вращения, то в регистры PWM нужно будет забить какое то конкретное значение, в зависимости от необходимой скорости.

Изменено пользователем Sergiy_83

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответы. Завтра опробую Ваши вариаты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте товарищи!

Прошу Вас помочь советом о модификации программы управления бесколлекторным двигателем постоянного тока.

 

 

Дмитрий, добрый день!

А можно попросить ссылку на первоисточник данной схемы. интересно посмотреть для каких целей и с какими движками она там применялась.

Для своих целей попробовать использовать.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно вот оно:

_http://radioparty.ru/prog-avr/program-c/611-lesson-bldc-sensorless

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

  • Форум законсервирован 💬

    Я законсервировал форум. Дальше общаемся в обычном режиме на основном сайте Журнала. Новая тема = новая статья, посты = комментарии.

    Игорь

  • Сообщения

    • Спасибо за инфо.  Собрал некоторые комплектующие.   В выходние хотел начать делать для себя станок для намотки выходных трансформаторов моего лампового проекта.    Не могли бы выложить на этот форум печатную плату. Хотел сделать через технологию  ЛУТ.
    • А я вот нашёл в полученном наборе для творчества - EF86, ECC83, ECC808, ECH81. tunsgram-ы. Где бы теперь корпусок взять?
    • На стабилизаторе был перекос 0,3В, быстро убрал его и фона больше нет. Что это было?, - ток компенсации? В любом случае, спасибо за совет.
    • общее для них  -  стабилизатор  +/--31 при включении попытаться успеть измерить эти  +/--31
    • Спасибо за ответы! Проверю - отпишусь.
    • Это я к тому клоню, что усилитель может быть неисправным, раз динамики сгорели. Можно и новые так же спалить. Желательно проверить работоспособность усилителя. Сначала без нагрузки. Померить, нет ли постоянного напряжения на выходе. А потом нагрузить резистором, или лампочкой. Или последовательно с новыми динамиками включить резистор на 50-100 ом для ограничения тока.
    • Фон 50Гц(100Гц) даже при максимальном ослаблении регулятора громкости и сразу в обоих каналах. Включение регулятора тембров, фильтра 9 кГц, режима "Моно" не влияет на процесс. Могу сделать вывод, что причина в предусилителе, но тогда не понятно почему через минуту всё резко прекращается, ведь основные переходные процессы идут в усилителях мощности (термостабилизация, смещение и т.д). Заземление так же не вносит изменений. 
    • Дмитрий, посмотрел в своих закромах родины. Нашел пару штук динамиков от аналогичных Микролабовских колонок. Динамики из ЗИПа (приходили с представительства Микролаба для ремонта гарантиных колонок). На динамиках написано 4 Ома 16W. Размер 78мм те самые 3дюйма. Если интересует в личку давай адрес. С тебя только за пересылку.
    • я сначала тоже так думал, долго проверял плату, потом подсоединил сабвуфер на место колонок (если недолго и негромко должно быть без последствий) и звук был. Ставил динамики на место буфер - звука нету.   динамики разобрал до "самих динамиков" т. е. вынул из корпуса, и соответственно проверил. Проверял тестером прозвонкой - нет контакта. Проверял батарейкой, при замыкании, мембрана дёргаться должна. На сабвуфере всё звонится, дергается и как уже говорил - поёт (басами). Сами динамики вынутые из деревянного корпуса внимательно осмотрел, доступные провода проверил, прозвонил видимого обрыва нету.   Как еще проверять? Думаю тут уже все понятно с усилителем. Или нет?
    • Что-то не верится, что плата цела, а сателлиты сгорели. Чаще сгорает усилитель, или то и другое одновременно. Точно в самих динамиках обрыв? Может быть, в подводящих проводах?  
    • нет инфы мало , фон понятие у всех разное, у меня это 50гц (100гц) в обоих каналах или в одном? в каких положениях органов управления?  нужно искать источник этого явления например полностью отключить пред а вообще похоже на непропай или возбуд гадать можно долго, неисправность  мерзкая, на поиск дается одна минута 🙂
    • Заметил одну очень интересную вещь - когда усилитель прогревается в колонках слышен фон, через примерно 1 минуту он резко исчезает. Я понимаю, что это переходные процессы, но так должно быть? Токи покоя и ноль при этом у меня выставлены.
    • Что по мощности, сопротивлению динамиков?   И я так понял важен частотный диапазон. Но с этим чувствуется будет сложно, учитывая что даже на родных динамиках ватты, оммы не написаны...     Цена за 2 шт.   Динамики ydn78-1 нашёл за 100 руб. но они 5 Вт думаю маловато будет, не выдержат. + доставка дороже самих динамиков... пустая трата времени, денег...      
    • 1000 рублей за динамик? Не дороговато ли будет для таких колонок. К тому же я не уверен что эти динамики отыграют по высоким частотам до 20кГц. На вид это типичные НЧ/СЧ с диапазоном в пределах 100Гц - 8-10кГц. Поищи в Гугле динамики с маркировкой ydn78-1 - они практически аналогичны по виду и размеру тем, которые продаются на Али, но при этом в 10 раз дешевле. Если не понравятся по звуку, то не жалко будет потраченных денег.    
    • Здравствуйте.   Сразу скажу я в радиотехнике новичок, но любопытный и даже упорный 😀.   В данном случае нужны рекомендации.   Есть акустика Sven MS-915. Характеристики. http://all-specs.net/model/7931/ После долгих разбирательств выяснилось что неисправны сами 2 динамика (болтиков нету, не сразу понял как их разобрать). Сабвуфер цел, плата цела. Нужно найти динамики на замену. Заявленная мощность 2x8+10 Вт, т.е. динамики по 8 Вт. Размер динамиков по диагонали 78 мм. Динамики 8 Вт 8 Ом 78 мм я нигде не нашёл. Самое близкое это 10 Вт 4 Ом 78 мм здесь. https://ru.aliexpress.com/item/2pcs-3inch-4ohm-10W-78mm-gold-foam-edge-black-magnetic-multimedia-speaker/32581348021.html И, кроме того я не уверен 8 Ом, 4 Ом или можно оба варианта. Подскажите пожалуйста где правильный ориентир?  
    • Вопрос снимается, я разобрался в чём дело - тот, кто чинил этот аппарат до меня, перепутал местами транзисторы VT8 и VT9. Всё оказалось крайне банально. Когда проверял транзисторы на целостность, даже мысли не было, что можно их перепутать.
    • Немного тему перепутал, нужно было в "Ремонте усилителей" создавать.
    • Падение напряжения на R17 - 0,83В. Прикрепляю картинку с напряжениями. На базах выходных транзистров напряжение просажено до +0,29 -0,22  
    • ну очень похоже на https://forum.datagor.ru/topic/11644-remont-usilitelya-elektronika-50u-017s/?tab=comments#comment-162309 поэтому и совет тот же, измерить падение напряжения на R17 - должно быть 0,7в если напряжение в норме, то выложите напряжения на базах (всех шести) транзисторов выходного каскада  
    • Здравствуйте. Достался мне усилитель Амфитон-У-002, как оказалось, после неудачной и неумелой починки. Провёл профилактику - почистил, заменил ёмкости, обновил термопасту на радиаторах.  Отстроил плечи +31В и -31В для предварительного усилителя и блока тембров. Запустил блок защиты.  Один канал усилителя работает отлично, а со вторым беда. Транзисторы VT4, VT6, VT7, VT11 и VT13 - были пробиты. Резисторы R8 и R18 почернели. Заменил неисправную элементную базу и уже второй день кручусь вокруг проблемы ограничения верхней полуволны на низких частотах при положении регулятора начиная от - 10dB  в точке указанной на фото (от неё и дальше по цепи). Питающие напряжения в полном порядке. Все резисторы и ёмкости проверены. Подобрал дифкаскад VT2, VT4 по коэффициенту усиления, толку не дало.   Проследите пожалуйста за мною моё понимание работы схемы: VT2, VT4 - дифкаскад, R5 - установка нуля. VT3 - источник тока. VT1 - включен как диод, C3 - гасит ВЧ пульсации. С коллектора VT2 сигнал поступает на эмиттерный повторитель на VT5. Далее на базу VT7 с обратной связью по току. Положительная полуволна усиливается VT10, VT12, VT3, а отрицательная VT11, VT13, VT4. С усилительной частью всё, остаётся термостабилизация на VT1(315Г) и защиа от перегрузки на VT8, VT9. VT14, VT15 - запирают транзистор в цепи реле на плате защиты.   Верно ли я понимаю принцип работы схемы? Не понятно для чего цепочка, собранная на VT6?   Меня смущают несколько заниженные напряжения на транзисторах (красным на схеме).  У транзистора VT3 коэффициент усиления всего 19 (как показал китайский тестор).  Мои мысли в данном случае только отпаять выходные транзисторы и посмотреть изменится ли выход дифкаскада (в чём я очень сомневаюсь).  Больше мыслей нет. Прошу Вас подсказать в каком направлении двигаться.   P.S. Коэффициенты усиления пар транзисторов VT5 VT7 - VT11 VT13 - VT10 12 как и оконечников не подбирал.
    • Идиотизм !!!  Не верьте маркетологам..., наша 6Н2П  (а если с ЕП) вполне приличная лампа (обычная, какой и должна быть...), всё остальное - БРЕД СУМАСШЕДШЕГО !!! Для дураков...
    • На Али вообще не нашел ни ЕСС808, ни 6КХ8.
    • Ну, что тут скажешь  "За неимением гербовой пишут и на простой".  Это уже перебор,  цена AEX- 650 в районе 100.  
    • Я как-то держал в руках ECC808, купленную на AliExpress. Помню на удивление блестящий анод, явно не подвергавшийся отжигу в водороде, и отсутствие даже намёка на бариевый поглотитель на стекле колбы. Ставилась на замену старенькой, с сгоревшим накалом, ECC808 производства то ли TUNGSRAM, то ли TELEFUNKEN, точно не помню, у которой эти внешние половые признаки присутствовали. Лампа тогда заработала, но дальнейшую её судьбу не знаю.
    • Да, цены кусаются, наверное весь металл в адаптере "платина" и собран по "новым технологиям" (что же там такое внутри)  
︽ Наверх страницы ︽
×