CTPAHNK Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 (изменено) компаратор сейчас по вешаю, есть наработки с моторчика от сидирома, по поводу ардуина или нет, тут конечно согласен что лучше пилить это на чистом контроллере в нормальной среде разработки, но для начала я уверен, что этого должно хватить. Видел много статей и роликов на ютубе как это работает с ардуины, и все плавно и красиво, не так как у меня. Можно еще будет поиграться с библиотекой CyberLib которую тут рекомендовали в других ветках для ускорения. Скоро вернусь с результатами... Изменено 11 января, 2017 пользователем CTPAHNK 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Сергей_Харьков Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 (изменено) Поздравляю, с успешным этапом работы. Мотор запустился. Задержки в кодах работы регулятора - это нормально , в промышленных точно есть. И обзываються как тайминги, от них зависит работоспособность мотора, его КПД и максимальная мощность, степень нагрева. Тут мизер об этом, но прочтите http://forum.rcdesign.ru/f20/thread83190.html На Вашем месте не стал бы трогать электронику, а поискал бы рабочие примеры алгоритмов регуляторов. Поменял бы в программе задержки, при которых двигатель устойчиво работает и меньше греется. Ну и чтобы мотор плавно пускался, и вообще была возможность регулировать обороты нужно предусматривать это в алгоритме. Полезно почитать пример AVR492: Brushless DC Motor Control using AT90PWM3/3B (есть в интернете ) http://www.avislab.com/blog/wp-content/uploads/2014/05/AVR492.pdf На русском языке http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR492.htm P.S. Без изменения прошивки плавного старта не будет (ну если только мотор будет под удачно подобранной нагрузкой), ну и как без ручки газа P.P.S. Интересный проект, заслуживает участия в конкурсе статьей на этом сайте. Изменено 11 января, 2017 пользователем Сергей_Харьков 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
CTPAHNK Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 Спасибо за ссылки, обязательно их покопаю! Проект надо довести до ума, так как надо два трайка собирать для обоих детишек, ну и может свой буду делать не на ДВС а на электротяге, так-что, это еще все впереди . Как только проект будет доведен до логического завершения, конечно оформлю его в виде статьи со всеми исходниками схемами и прочим - народное достояние должно быть общим, проект то мы все вместе уже тут делаем . 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
CTPAHNK Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 10 часов назад, Mishany сказал: датчики положения необходимо вешать на аналоговый компоратор с активацией прерывания от него. ммм, поковырялся с компаратором, но остановился, почему мне надо пропускать датчики через компаратор? Я использую SS41 подключенный по данной схеме на выходе получаю не слабые колебания, а конкретный 0 либо 1, зачем тут еще компаратор? В датчиках холла от мотора сидирома, да, там прилетают слабые колебания которые надо было преобразовать в логический нуль или единицу. Можете растолковать пожалуйста необходимость его использования с SS41? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 (изменено) Я имел ввиду аналоговый компаратор в МК, т.к. он генерирует прерывание по сработке сенсора, что дает мгновенную реакцию в коде на это событие, а не тупой перебор состояний ног в бесконечном цикле... еще можно завести их через диодную развязку на INT0 и в его прерывании смотреть по какой ноге сработало прерывание... та же отправка по уарту может сбить синхронизацию... а если еще что добавится в основной цикл? тайминги не должны быть фиксированы во всем диапазоне скорости вращения мотора, а меняться в зависимости от частоты вращения мотора Изменено 11 января, 2017 пользователем Mishany 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 11 января, 2017 Поделиться Опубликовано 11 января, 2017 Хм, это пока для меня будет новым приключением в изучении микроконтроллеров, почитаю на данную тему, спасибо! Пытался запустить код с этого видео сегодня мотор как дурной прыгает туда сюда, но нет того плавного старта как у оппонента. Ковыряюсь дальше... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 12 января, 2017 Поделиться Опубликовано 12 января, 2017 кину до кучи http://www.avislab.com/blog/brushless08/ 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 14 января, 2017 Поделиться Опубликовано 14 января, 2017 Приветствую! позвольте продолжить Почитав разные темы, а также ваши ссылки, пока все-же решил остаться в зоне ардуины и выжать все что возможно, перед тем как лезть напрямую к контроллеру. Начал я с ШИМа, подключил библиотеку чтобы повысить частоту, и тут обнаружил проблему, почему-то неведомо мне пока почему, я получаю на своих трех выходах разного вида шим, на первом все хорошо как и ожидается, на втором частоту меньше и duty cycle до 50% примерно потом сразу скачек в 100%, а на третьем выходе, частота меньше чем во втором и там 2 градации duty cycle, 0, что-то около 50% и 100%, все скачками. Кто-то может описать природу данного эффекта? выход А выход В выход С как получить стабильный шим на всех трех ногах контроллера, я это наблюдал и ранее, но не придал этому значение, но после прочтения разного по двигателю, все же это надо поправить. действующий скетч на данный момент таков Скрытый текст #include <PWM.h> //throttle const int analogInPin1 = 22; //hall input int hall_sensor_a = 2; int hall_sensor_b = 4; int hall_sensor_c = 7; //Motor setup const int a_motor_lout = 3; const int a_motor_pwm_hout = 9; const int b_motor_lout = 6; const int b_motor_pwm_hout = 11; const int c_motor_lout = 10; const int c_motor_pwm_hout = 5; void setup(){ Serial.begin(9600); InitTimersSafe(); SetPinFrequency(a_motor_pwm_hout, 16000); SetPinFrequency(b_motor_pwm_hout, 16000); SetPinFrequency(c_motor_pwm_hout, 16000); pinMode(a_motor_lout, OUTPUT); pinMode(a_motor_pwm_hout, OUTPUT); pinMode(b_motor_lout, OUTPUT); pinMode(b_motor_pwm_hout, OUTPUT); pinMode(c_motor_lout, OUTPUT); pinMode(c_motor_pwm_hout, OUTPUT); pinMode(hall_sensor_a, INPUT); pinMode(hall_sensor_b, INPUT); pinMode(hall_sensor_c, INPUT); } void loop(){ int A; A = 11111; while(1){ int val = analogRead(analogInPin1); val = constrain(val, 211, 830); int gas = map(val, 211, 830, 0, 255); if ( gas >= 5){ if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==1){ digitalWrite(a_motor_lout,0);digitalWrite(c_motor_lout,0);pwmWrite(c_motor_pwm_hout,0); pwmWrite(b_motor_pwm_hout,0);digitalWrite(b_motor_lout,1);pwmWrite(a_motor_pwm_hout,gas); } else { if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==0){ digitalWrite(a_motor_lout,0);pwmWrite(c_motor_pwm_hout,0);digitalWrite(b_motor_lout,0); pwmWrite(b_motor_pwm_hout,0);pwmWrite(a_motor_pwm_hout,gas);digitalWrite(c_motor_lout,1); } else { if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==0){ pwmWrite(c_motor_pwm_hout,0);digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,0); pwmWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,1);pwmWrite(b_motor_pwm_hout,gas); } else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==0){ pwmWrite(a_motor_pwm_hout,0);pwmWrite(c_motor_pwm_hout,0);digitalWrite(c_motor_lout,0); digitalWrite(b_motor_lout,0);pwmWrite(b_motor_pwm_hout,gas);digitalWrite(a_motor_lout,1); } else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==1){ pwmWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,0);pwmWrite(b_motor_pwm_hout,0); digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,1);pwmWrite(c_motor_pwm_hout,gas); } else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==1){ pwmWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,0);pwmWrite(b_motor_pwm_hout,0); digitalWrite(a_motor_lout,0);pwmWrite(c_motor_pwm_hout,gas);digitalWrite(b_motor_lout,1); }}}}}}} else{ digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,0);digitalWrite(b_motor_pwm_hout,0); digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,0);digitalWrite(c_motor_pwm_hout,0); Serial.println(digitalRead(2)); Serial.println(digitalRead(4)); Serial.println(digitalRead(7)); Serial.println(A); delay(50); }}} что характерно, если меняю InitTimersSafe(); в InitTimers(); то картина улучшается но не на долго, так как на одной из "перегазовок" контроллер виснет :(. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 15 января, 2017 Поделиться Опубликовано 15 января, 2017 Пора включать свои мозги, а не надеяться на дуиновские библиотеки. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 15 января, 2017 Поделиться Опубликовано 15 января, 2017 та вот уже сижу еще раз перечитываю http://www.avislab.com/blog/wp-content/uploads/2014/05/AVR492.pdf и http://www.avislab.com/blog/brushless08/ скоро вернусь 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 15 января, 2017 Поделиться Опубликовано 15 января, 2017 (изменено) Вот еще Пример использования трех каналов ШИМ, но сделан на базе ссылки выше И еще Готовые примеры на СИ И на последок контрольный в голову Тыц (тушите свечи....) Изменено 15 января, 2017 пользователем Mishany 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 15 января, 2017 Поделиться Опубликовано 15 января, 2017 нашел горсточку sn74ls08n, щас почищу код от всего ненужного и будем пробовать :), ну не злитесь на меня да? я еще немножко ардуину помучаю 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 15 января, 2017 Поделиться Опубликовано 15 января, 2017 Инфы теперь достаточно, теперь думаю сами выберете для себя лучшее и правильное направление 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 20 января, 2017 Поделиться Опубликовано 20 января, 2017 Привет всем, маленькое обновление, я не потерялся и добью это дело... просто жду некоторых компонентов скоро вернусь, экспресс обычно пару дней идет 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 21 января, 2017 Поделиться Опубликовано 21 января, 2017 Ардуиной значит наигрались, перешли на взрослую игрушку))) теперь то все получится. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 9 февраля, 2017 Поделиться Опубликовано 9 февраля, 2017 Приветствую всех! Ну что, две "блохи" приехало(очень быстро, доставка со штатов до дверей заняла менее двух суток ), сначала кинулся разводить плату, а потом остановился, какая то апатия была, так как код от атмел, что в примере шел для меня был только на %30 понятен и пихать без понятия оного в железо байты и биты я не хотел, остановился на том что сначала поиграюсь с миганием светодиода и прочими мелкими составляющими задачами, чтобы понять полностью код тот что там, и уже через пару дней стало понятно, что все что я писал в ардуине, имеет право на жизнь, только вот где-то закрался баг... Потом было много работы и не доходили руки до хобби, а в прошлую пятницу меня залихорадило и я заболел гриппом который по сей день меня мучает, но уже стало по малу отпускать, и чтобы время не терять я вернулся к моим "железкам", да, баг... он закрался все же в железо... Помните с видео где мы вроде завели железо и мотор уноситься в максимальные обороты, так вот, это не верная работа этого драйвера, а также для работы с шим он подразумевает другое включение. Исправить это было очень просто, простым замыканием проводов, двигатель начал вести себя по нормальному, плавно стартовал, и плавно останавливался все, как велела ему ручка потенциометра, если резко дернуть, то он также реагировал, только вот незадача, код написан чтобы он крутился по часовой стрелке, а он крутится против, да еще и издает постоянный гул. Я поигрался с разной частотой шима, он тут не причем, гул постоянен, нагрев мосфетов тоже, и так когда хотел заснять видео работы, установив лабораторник в 36 вольт и 10А, плавный старт, хорошо, максимальные обороты, хорошо, но страшно, двигатель дает сильную вибрацию, видимо этот гул следствие неверной работы и того что он не туда крутится, но да ладно, для теста было достаточно, и вот плавно тормозим.... все хорошо. Опять старт, опять остановка, и на этом все... где-то в цепи здох или здохли мосфеты :(. Устал я уже от этого на первый взгляд простого драйвера, оставлю его пока лежать в стороночке, а то уже 4 месфета в урной, а воз как бы не далеко уехал. Покопавшись в закромах нашел три IR2103s, рисую сейчас плату, буду травить, и продолжу эксперименты. Для размышления от драйвере, вопросы остались открытыми на будущее: 1. Потенциометр в нуле, на входе ничего нет в драйвере, мотор стоит как вкопанный и его очень тяжело проворачивать, то есть идет утечка питания или он специально открывает мосфеты, что приводит к их нагреву. 2. При коде который крутит мотор по часовой стрелке, драйвер крутит против и на каждый электрический оборот спотыкается тем самым принося вибрацию, и как я полагаю дополнительную нагрузку на мосфеты. На полной скорости, при 36в мотор потреблял 7.8А. Продолжение следует, скоро 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 9 февраля, 2017 Поделиться Опубликовано 9 февраля, 2017 (изменено) направление вращения меняется перекидыванием 2-х фаз. А что за драйвер на картинке? как можно управлять им по 3-ем проводам, вроде 6 должно быть для управления BLDC получается что на каждой фазе постоянно открыт один ключ Изменено 9 февраля, 2017 пользователем Mishany 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 9 февраля, 2017 Поделиться Опубликовано 9 февраля, 2017 На картинке драйвер интерсиловский HIP4086 http://www.intersil.com/content/dam/Intersil/documents/hip4/hip4086-a.pdf Принципиальная схема рисовалась на основе данных с их демоборды http://www.intersil.com/content/dam/Intersil/documents/an18/an1829.pdf и рекомендаций к применению http://www.intersil.com/content/dam/Intersil/documents/an96/an9642.pdf в итоге получилась она такой: для того чтобы драйвер и микроконтроллер не колбасило при тестах, везде подано отдельное питание, общая только земля. Так вот в данном варианте классической коммутации, когда нижний ключ открывается полностью а верхний шимом, оно не работает :(, точнее срабатывает но как было видно из видео, мотор уноситься в максимум оборотов. После замыкания входов как показано на схеме выше, схема начала работать, только теперь мне остается не ясным те два пункта которые описал постом ранее. Уже закралось желание, для этого драйвера потом, убрать контроллер от сюда вообще, поставить управляющую микруху с сидирома типа BA6664FM и в путь, там как раз все в куче на борту одного чипа... Скоро вернусь 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 9 февраля, 2017 Поделиться Опубликовано 9 февраля, 2017 Есть понимание работы драйвера по управлению N-ch в плюсовом плече? Так вот открывание верхнего ключа происходит накопленным зарядом на С1(2,3), а конденсатор может зарядиться только если в точках А (B,C) будет минус, а он там может быть только в двух случаях открытие нижнего ключа либо не индукционная нагрузка на выходе... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
CTPAHNK Опубликовано 9 февраля, 2017 Поделиться Опубликовано 9 февраля, 2017 Понимание работы есть, только вот тут не понял на что вы хотите мне указать? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 7 октября, 2017 Поделиться Опубликовано 7 октября, 2017 на чем все закончилось? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Дмитрий Стешенко Опубликовано 21 июня, 2018 Поделиться Опубликовано 21 июня, 2018 case 5: AH_ON; AL_ON; BH_OFF; BL_OFF; CH_OFF; CL_ON; break;//A+ B- 010 5 case 1: AH_ON; AL_ON; BH_OFF; BL_ON; CH_OFF; CL_OFF; break;//A+ C- 011 1 case 3: AH_OFF; AL_ON; BH_ON; BL_ON; CH_OFF; CL_OFF; break;//B+ C- 001 3 case 2: AH_OFF; AL_OFF; BH_ON; BL_ON; CH_OFF; CL_ON; break;//A- B+ 101 2 case 6: AH_OFF; AL_OFF; BH_OFF; BL_ON; CH_ON; CL_ON; break;//A- C+ 100 6 case 4: AH_OFF; AL_ON; BH_OFF; BL_OFF; CH_ON; CL_ON; break;//B- C+ 110 4 вот в таком духе мотор от гироскутера крутит но это если у мост отдельное питание а масса общая 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Дмитрий Стешенко Опубликовано 21 июня, 2018 Поделиться Опубликовано 21 июня, 2018 В 09.02.2017 в 22:26, CTPAHNK сказал: Понимание работы есть, только вот тут не понял на что вы хотите мне указать? // Фаза A(Верхнее плечо) #define AH_ON TCCR0A |= (1 << COM0A1);//D6 pin #define AH_OFF TCCR0A &= ~(1 << COM0A1);//D6 pin // Фаза A(Нижнее плечо) #define AL_ON TCCR0A |= (1 << COM1A1);//D9 pin #define AL_OFF TCCR0A &= ~(1 << COM1A1);//D9 pin // Фаза B(Верхнее плечо) #define BH_ON TCCR0A |= (1 << COM0B1);//D5 pin #define BH_OFF TCCR0A &= ~(1 << COM0B1);//D5 pin // Фаза B(Нижнее плечо) #define BL_ON TCCR1A |= (1 << COM1B1);//D10 pin #define BL_OFF TCCR1A &= ~(1 << COM1B1);//D10 pin // Фаза C(Верхнее плечо) #define CH_ON TCCR2A |= (1 << COM2B1);//D3 pin #define CH_OFF TCCR2A &= ~(1 << COM2B1);//D3 pin // Фаза C(Нижнее плечо) #define CL_ON TCCR1C |= (1 << COM2A1);//D11 pin #define CL_OFF TCCR1C &= ~(1 << COM2A1);//D11 pin 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Дмитрий Стешенко Опубликовано 21 июня, 2018 Поделиться Опубликовано 21 июня, 2018 (изменено) // Подключение бесколлекторного двигателя к AVR(с датчиками Холла) #include <avr/io.h> #include <avr/interrupt.h> // Фаза A(Верхнее плечо) #define AH_ON TCCR0A |= (1 << COM0A1);//D6 pin #define AH_OFF TCCR0A &= ~(1 << COM0A1);//D6 pin // Фаза A(Нижнее плечо) #define AL_ON TCCR0A |= (1 << COM1A1);//D9 pin #define AL_OFF TCCR0A &= ~(1 << COM1A1);//D9 pin // Фаза B(Верхнее плечо) #define BH_ON TCCR0A |= (1 << COM0B1);//D5 pin #define BH_OFF TCCR0A &= ~(1 << COM0B1);//D5 pin // Фаза B(Нижнее плечо) #define BL_ON TCCR1A |= (1 << COM1B1);//D10 pin #define BL_OFF TCCR1A &= ~(1 << COM1B1);//D10 pin // Фаза C(Верхнее плечо) #define CH_ON TCCR2A |= (1 << COM2B1);//D3 pin #define CH_OFF TCCR2A &= ~(1 << COM2B1);//D3 pin // Фаза C(Нижнее плечо) #define CL_ON TCCR1C |= (1 << COM2A1);//D11 pin #define CL_OFF TCCR1C &= ~(1 << COM2A1);//D11 pin unsigned char speed; // Обработчик внешнего прерывания ISR(PCINT0_vect) { unsigned char position; // Считываем значения датчиков position = (PINB & ((1 << PB2)|(1 << PB1)|(1 << PB0)));//D8, D9, D10 switch(position) // Переключаем обмотки { /*case 5: AH_ON; AL_ON; BH_OFF; BL_OFF; CH_OFF; CL_ON; break;//A+ B- 010 5 case 1: AH_ON; AL_ON; BH_OFF; BL_ON; CH_OFF; CL_OFF; break;//A+ C- 011 1 case 3: AH_OFF; AL_ON; BH_ON; BL_ON; CH_OFF; CL_OFF; break;//B+ C- 001 3 case 2: AH_OFF; AL_OFF; BH_ON; BL_ON; CH_OFF; CL_ON; break;//A- B+ 101 2 case 6: AH_OFF; AL_OFF; BH_OFF; BL_ON; CH_ON; CL_ON; break;//A- C+ 100 6 case 4: AH_OFF; AL_ON; BH_OFF; BL_OFF; CH_ON; CL_ON; break;//B- C+ 110 4*/ case 5: AH_ON; AL_OFF; BH_OFF; BL_ON; CH_OFF; CL_OFF; break;//A+ B- 010 5 case 1: AH_ON; AL_OFF; BH_OFF; BL_OFF; CH_OFF; CL_ON; break;//A+ C- 011 1 case 3: AH_OFF; AL_OFF; BH_ON; BL_OFF; CH_OFF; CL_ON; break;//B+ C- 001 3 case 2: AH_OFF; AL_ON; BH_ON; BL_OFF; CH_OFF; CL_OFF; break;//A- B+ 101 2 case 6: AH_OFF; AL_ON; BH_OFF; BL_OFF; CH_ON; CL_OFF; break;//A- C+ 100 6 case 4: AH_OFF; AL_OFF; BH_OFF; BL_ON; CH_ON; CL_OFF; break;//B- C+ 110 4 } PORTC = position; } // Функция изменения скорости static void set_speed(unsigned char speed) { TIFR0 = TIFR0; // Очищаем флаг прерывания TC0 while( !(TIFR0 & (1<<TOV0))); // Ждем переполнения таймера cli(); OCR0A = speed; // Изменяем ШИМ OCR0B = speed; OCR2B = speed; sei(); } int main( void ) { TCCR0A |= (1 << COM0A1)|(0 << COM0A0)| // Сброс вывода OC0A при совпадении (1 << COM0B1)|(0 << COM0B0)| // Сброс вывода OC0B при совпадении (1 << WGM01)|(1 << WGM00); // Режим Fast PWM TCCR0B |= (1 << CS00); // Предделитель CLK/1 TCCR2A |= (1 << COM2B1)|(0 << COM2B0)| // Сброс вывода OC2B при совпадении (1 << WGM01)|(1 << WGM00); // Режим Fast PWM TCCR2B |= (1 << CS20); // // Предделитель CLK/1 PCMSK0 |= (1 << PCINT2)|(1 << PCINT1)|(1 << PCINT0); // Активируем входы внешних прерываний PCICR |= (1 << PCIE0); // Разрешаем прерывание по изменению состояния порта B ADMUX |= (1 << MUX1)|(1 << MUX0); // Вход ADC3 A3 ADCSRA |= (1 << ADEN) | (1 << ADPS1); // Разрешаем АЦП, предделитель на 4 DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // Порт С - выход(светодиоды) PORTC &= ~(1 << PC2)|(1 << PC1)|(1 << PC0); DDRB |= (1 << PB5)|(1 << PB4)|(1 << PB0); // Кратковреммено подаем лог.1 на входы датчиков PORTB |= (1 << PB5)|(1 << PB4)|(1 << PB0); // для первоначального запуска двигателя PORTB &= ~(1 << PB5)|(1 << PB4)|(1 << PB0); DDRB = 0x00; // Порт B - вход sei(); // Глобально разрешаем прерывания DDRD = 0xFF; // Порт D - выход while(1) { ADCSRA |= (1 << ADSC); // Запускаем преобразование АЦП while ( ADCSRA & (1 << ADSC) ); // Ждем окончания преобразования speed = ADC/4; // Считываем АЦП set_speed(speed); // Изменяем скорость } } Изменено 21 июня, 2018 пользователем Дмитрий Стешенко ошибка 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Mishany Опубликовано 24 июня, 2018 Поделиться Опубликовано 24 июня, 2018 я недавно собрал 2 контроллера на STM32, платы заказывал в китае. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.