Перейти к содержанию

"Велосипедный" контроллер на ардуино


Гость CTPAHNK

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

компаратор сейчас по вешаю, есть наработки с моторчика от сидирома, по поводу ардуина или нет, тут конечно согласен что лучше пилить это на чистом контроллере в нормальной среде разработки, но для начала я уверен, что этого должно хватить. Видел много статей и роликов на ютубе как это работает с ардуины, и все плавно и красиво, не так как у меня. Можно еще будет поиграться с библиотекой CyberLib которую тут рекомендовали в других ветках для ускорения. Скоро вернусь с результатами...

Изменено пользователем CTPAHNK
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Поздравляю, с успешным этапом работы. Мотор запустился.

Задержки в кодах работы регулятора - это нормально , в промышленных точно есть.

И обзываються как тайминги, от них зависит работоспособность мотора, его КПД и максимальная мощность, степень нагрева.

Тут мизер об этом, но прочтите

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. Интересный проект, заслуживает участия в конкурсе статьей на  этом сайте.

Изменено пользователем Сергей_Харьков
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Спасибо за ссылки, обязательно их покопаю! Проект надо довести до ума, так как надо два трайка собирать для обоих детишек, ну и может свой буду делать не на ДВС а на электротяге, так-что, это еще все впереди B).

Как только проект будет доведен до логического завершения, конечно оформлю его в виде статьи со всеми исходниками схемами и прочим - народное достояние должно быть общим, проект то мы все вместе уже тут делаем :rolleyes:.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

10 часов назад, Mishany сказал:

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

ммм, поковырялся с компаратором, но остановился, почему мне надо пропускать датчики через компаратор? Я использую SS41 подключенный по данной схеме

us1881-400x295.png

на выходе получаю не слабые колебания, а конкретный 0 либо 1, зачем тут еще компаратор? В датчиках холла от мотора сидирома, да, там прилетают слабые колебания которые надо было преобразовать в логический нуль или единицу. Можете растолковать пожалуйста необходимость его использования с SS41?

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

Я имел ввиду аналоговый компаратор в МК, т.к. он генерирует прерывание по сработке сенсора, что дает мгновенную реакцию в коде на это событие, а не тупой перебор состояний ног в бесконечном цикле... еще можно завести их через диодную развязку на INT0 и в его прерывании смотреть по какой ноге сработало прерывание...

та же отправка по уарту может сбить синхронизацию... а если еще что добавится в основной цикл?

тайминги не должны быть фиксированы во всем диапазоне скорости вращения мотора, а меняться в зависимости от частоты вращения мотора  

Изменено пользователем Mishany
Ссылка на комментарий
Поделиться на другие сайты

Хм, это пока для меня будет новым приключением в изучении микроконтроллеров, почитаю на данную тему, спасибо!

Пытался запустить код с этого видео сегодня

мотор как дурной прыгает туда сюда, но нет того плавного старта как у оппонента. Ковыряюсь дальше...

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

Приветствую! позвольте продолжить :)

Почитав разные темы, а также ваши ссылки, пока все-же решил остаться в зоне ардуины и выжать все что возможно, перед тем как лезть напрямую к контроллеру.

Начал я с ШИМа, подключил библиотеку чтобы повысить частоту, и тут обнаружил проблему, почему-то неведомо мне пока почему, я получаю на своих трех выходах разного вида шим, на первом все хорошо как и ожидается, на втором частоту меньше и duty cycle до 50% примерно потом сразу скачек в 100%, а на третьем выходе, частота меньше чем во втором и там 2 градации duty cycle, 0, что-то около 50% и 100%, все скачками. Кто-то может описать природу данного эффекта?

выход А

Newfile2b.jpeg

выход В

Newfile2gi.jpeg

выход С

Newfile2ilpq.jpeg

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

действующий скетч на данный момент таков

Скрытый текст

#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(); то картина улучшается но не на долго, так как на одной из "перегазовок" контроллер виснет :(.

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

Вот еще  Пример использования трех каналов ШИМ, но сделан на базе ссылки выше

И еще Готовые примеры на СИ 

И на последок контрольный в голову Тыц (тушите свечи....)

Изменено пользователем Mishany
Ссылка на комментарий
Поделиться на другие сайты

Привет всем, маленькое обновление, я не потерялся и добью это дело... просто жду некоторых компонентов B)

bffe6b57cab74ee69c813efdba14d63f.png

скоро вернусь, экспресс обычно пару дней идет :)

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

  • 3 недели спустя...

Приветствую всех! Ну что, две "блохи" приехало(очень быстро, доставка со штатов до дверей заняла менее двух суток :lol:), сначала кинулся разводить плату, а потом остановился, какая то апатия была, так как код от атмел, что в примере шел для меня был только на %30 понятен и пихать без понятия оного в железо байты и биты я не хотел, остановился на том что сначала поиграюсь с миганием светодиода и прочими мелкими составляющими задачами, чтобы понять полностью код тот что там, и уже через пару дней стало понятно, что все что я писал в ардуине, имеет право на жизнь, только вот где-то закрался баг... Потом было много работы и не доходили руки до хобби, а в прошлую пятницу меня залихорадило и я заболел гриппом который по сей день меня мучает, но уже стало по малу отпускать, и чтобы время не терять я вернулся к моим "железкам", да, баг...  он закрался все же в железо... Помните с видео где мы вроде завели железо и мотор уноситься в максимальные обороты, так вот, это не верная работа этого драйвера, а также для работы с шим он подразумевает другое включение.

8191e25a2d9c4021b1be495bf14baa34.png

Исправить это было очень просто, простым замыканием проводов, двигатель начал вести себя по нормальному, плавно стартовал, и плавно останавливался все, как велела ему ручка потенциометра, если резко дернуть, то он также реагировал, только вот незадача, код написан чтобы он крутился по часовой стрелке, а он крутится против, да еще и издает постоянный гул. Я поигрался с разной частотой шима, он тут не причем, гул постоянен, нагрев мосфетов тоже, и так когда хотел заснять видео работы, установив лабораторник в 36 вольт и 10А, плавный старт, хорошо, максимальные обороты, хорошо, но страшно, двигатель дает сильную вибрацию, видимо этот гул следствие неверной работы и того что он не туда крутится, но да ладно, для теста было достаточно, и вот плавно тормозим.... все хорошо. Опять старт, опять остановка, и на этом все... где-то в цепи здох или здохли мосфеты :(.  Устал я уже от этого на первый взгляд простого драйвера, оставлю его пока лежать в стороночке, а то уже 4 месфета в урной, а воз как бы не далеко уехал. Покопавшись в закромах нашел три IR2103s, рисую сейчас плату, буду травить, и продолжу эксперименты.

Для размышления от драйвере, вопросы остались открытыми на будущее:

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

2. При коде который крутит мотор по часовой стрелке, драйвер крутит против и на каждый электрический оборот спотыкается тем самым принося вибрацию, и как я полагаю дополнительную нагрузку на мосфеты. На полной скорости, при 36в мотор потреблял 7.8А.

Продолжение следует, скоро :)

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

направление вращения меняется перекидыванием 2-х фаз.

А что за драйвер на картинке? как можно управлять им по 3-ем проводам, вроде 6 должно быть для управления BLDC

получается что на каждой фазе постоянно открыт один ключ

Изменено пользователем Mishany
Ссылка на комментарий
Поделиться на другие сайты

На картинке драйвер интерсиловский 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

в итоге получилась она такой:

bd0621a4ab734fab861ae20a7b2fd6c7.png

для того чтобы драйвер и микроконтроллер не колбасило при тестах, везде подано отдельное питание, общая только земля. Так вот в данном варианте классической коммутации, когда нижний ключ открывается полностью а верхний шимом, оно не работает :(, точнее срабатывает но как было видно из видео, мотор уноситься в максимум оборотов. После замыкания входов как показано на схеме выше, схема начала работать, только теперь мне остается не ясным те два пункта которые описал постом ранее.

Уже закралось желание, для этого драйвера потом, убрать контроллер от сюда вообще, поставить управляющую микруху с сидирома типа BA6664FM и в путь, там как раз все в куче на борту одного чипа...

Скоро вернусь :)

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

Есть понимание работы драйвера по управлению N-ch в плюсовом плече? Так вот открывание верхнего ключа происходит накопленным зарядом на С1(2,3), а конденсатор может зарядиться только если в точках А (B,C) будет минус, а он там может быть только в двух случаях открытие нижнего ключа либо не индукционная нагрузка на выходе...

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

  • 7 месяцев спустя...
  • 8 месяцев спустя...

  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

вот в таком духе мотор от гироскутера крутит но это если у мост отдельное питание а масса общая

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

В 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

 

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

// Подключение бесколлекторного двигателя к 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); // Изменяем скорость
}
}

Изменено пользователем Дмитрий Стешенко
ошибка
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
  • Похожий контент

×
×
  • Создать...