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

Tomade

Участник
  • Постов

    23
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Tomade

  • Звание
    Участник
    Участник
  1. Пришли IR3310. Методом проб и ошибок остановился на такой схеме (см. рисунок). Может, не совсем грамотно и не совсем рационально, но из имеющихся деталей, работает и IR3310 не греется с маленьким радиатором. Может, кому-то пригодится.
  2. Они в пути, почтовой посылкой. Придут - так и сделаю. ---------- А вот ещё вопрос. Движок будет потреблять десятки Ампер. Сам по себе движок работает от мостикового выпрямителя на мощных диодах (то есть без всякого сглаживающего фильтра). А как в этом случае будут себя вести IR-ки? Если их желательно питать сглаженным напряжением, то как это сделать при таких больших токах?
  3. Kotopuz и Haker Fox, спасибо за участие. Писк движка не волнует - установка будет работать в цеховых условиях, где речь-то с трудом услышишь. Частоту ШИМ, думаю, увеличивать не стоит, так как заказал в ChipInfo IR3310, частота переключения которого ограничена пятьюстами Герцами. Эта сборка коммутируют ток до 100 А (а IRF540N - только до 28 А). Не совсем понятно, для чего нужно ограничивать сначала ток, заведя обратную связь от датчика тока. Импульсный ток при ШИМе не ограничишь; он будет плавно уменьшаться по мере разгона двигателя. Так что IRF-транзистор может сгореть при первом же импульсе ШИМ, если подобран не правильно, и никакая обратная связь не поможет. Впрочем, я в этих делах ещё чайник. Как писал в начале темы, макет уже сделан и испытан на маломощном двигателе. Датчик скорости вращения сделал на оптопаре: один оборот - один импульс. Так как скорость вращения не высока, то измеряю не частоту, а период. Микроконтроллер ATMega128 взял только потому, что подарили платку с уже установленным микроконтроллером с обвязкой и разъёмами. Так что задача - согласовать это устройство с мощным движком постоянного тока. Чем и занимаюсь с вашей помощью.
  4. Любопытная информация... В первом приближении подходит: и ток 100 А (для модификации IR3310), и частота переключения до 500 Гц (а ШИМ у меня - около 100 Гц). Попробую заказать и поиграться.
  5. Для меня не важно, какое напряжение требуется для этого двигателя - 24, 27 или 36 Вольт. Да и не думаю, что мощные низковольтные ключи со схемами управления имеют такую подробную градацию: отдельно для 24 Вольт, отдельно для 27, отдельно для 36. Если найдётся управляемый выходом микроконтроллера ключ для 50-вольтового движка, то, ИМХО, им же можно будет управлять и 27-вольтовым двигателем.
  6. Единичный. Когда-то снятый отставниками с какого-то самолёта. Напряжение питания, с их слов, 24 или 36 Вольт. Дайте (кто знает), пожалуйста, ссылку на конкретную реализацию (самодельную или промышленную) связки "драйвер-мощный ключ" для низковольтного двигателя постоянного тока. Или популярную статью/литературу, изучение которой позволит самому разобраться в проблеме и самому сделать требуемое.
  7. Есть такая задача: плавно разгонять двигатель постоянного тока и при достижении заданной скорости вращения его останавливать. Управляющее устройство сделал на микроконтроллере ATMega128, выход ШИМ подключил через транзистор IRFZ24 к малогабаритному двигателю постоянного тока (ДПТ), питающее напряжение - 27 Вольт постоянного, ток - около 1 А. Это всё работает. А вот управлять надо другим ДПТ, на котором нет никаких шильдиков. Тип -неизвестен; диаметр движка - 80 мм, высота - 200 мм, два вывода, из них один - на корпусе. Правда, на фланце кто-то от руки написал "36 В". При подключении этого ДПТ к переменному наряжению 32 В через один мощный диод потребляемый ток замерить не удалось (нечем), но оценочно он заметно превышает 50 А. Опыта управления мощными ДТП (в свете рассматриваемой задачи) не имею никакого. Подскажите, пожалуйста, как согласовать ШИМ-выход МК с мощным низковольным двигателем постоянного тока.
  8. Ну вот, проблема решилась. Сделал следующее. 1.Сгенерировал начальные коды под микроконтроллер ATMega64L (было ATMega16). 2.В строке sprintf(lcd_buffer,"%u",x); вместо u поставил lu (как ранее советовал АНТОХА. Всем спасибо.
  9. Антоха: Клевета! Было маленькое L - l. Прошу прощения. Был сбой при передаче данных. :) zhevak: Читайте книжки, посещайте форумы и уточняйте, что Вам не ясно. Потому и обратился сюда. В моём окружении программистов МК нет.
  10. АНТОХА: Надо не I, а L! (от long) В вашем предыдущем письме было I. Впрочем, ставил и I, и l, и L - не помогает. В этих случаях совсем ничего не высвечивается. bloodden: Как и в CVAVR впрочем тоже. В настройках проекта. По-умолчанию там стоит до инта. В предыдущем письме сообщал, что перепробовал разные настройки. Не помогло. zhevak: Вы неправильно используете модификаторы. Я попробовал и так sprintf(s1, "%li", x); и так sprintf(s1, "%ld", x); -- работает в обоих случаях. Проблема в том, что я не программист. Можно сказать, радиолюбитель, решивший самостоятельно изучить МК (и СИ) и что-то на них собирать. Потому то, что для программиста очевидно, для меня - далеко не так. А именно: sprintf(s1, "%li", x); // Библиотечная функция - где эта функция должна находиться? Как проверить, что она есть? И если нет, то где взять и куда вставить? LCD_StringXY(0, 1, s1); // -- это моя функция, у Вас должно быть что-то свое. Если бы знать, что своё должно быть... А просто поставить, к примеру, sprintf(s1, "%li", x); - ни к чему не приводит. Короче, пойду покупать пистолет.
  11. Спасибо всем откликнувшимся. Вот что получилось (компилятор - CVAVR 1.25.2). Если в строке sprintf(lcd_buffer,"%i",x) вместо i ставить I или Iu, то в симуляторе на табло LCD вообще ничего не выводится (и для int, и для long). После игры в метод тыка оказалось, что правильно выводятся числа до 65535, если вместо i ставить просто u, причём независимо от настроек, о которых говорил zhevak в последнем письме. Другие варианты, перечисленные в справке CVAVR для (s)printf features, ни к чему не привели. Как же вывести на экран LCD число, большее 65535?
  12. Так и делал: char lcd_buffer[33]; unsigned long int x = 32760; void main(void) { lcd_init(16); while(1){ sprintf(lcd_buffer,"%i",x); lcd_clear(); lcd_puts(lcd_buffer); x++; delay_ms(20);}} - эффекта никакого.
  13. Подскажите чайнику, как переехать такую проблему. Микроконтроллер серии ATMega, нужно выводить на ЖКИ типа РС1602F (c контроллером) инкрементируемую переменную, которая может принимать значения, к примеру, от 0 до 1 000 000. Работу программы (см. вложение) симулирую на VMLAB3.12. Что получается? До значания переменной, равного 32767, всё идёт нормально. А вот следующее индицируемое число равняется -32768 (со знаком минус), и все последующие начинают декрементироваться, то есть -32767, -32766, -32765 и т.д. Почему?
  14. Заметил свою ошибку: посчитал Т2 шестнадцатиразрядным. Если в строке M2=(unsigned long int)Perepol_Timer2*65536+count_T2; вместо 65536 поставить 256, то работа частотомера становится стабильной (начиная со второго измерения). Однако частота индицируется равной 16384 Гц, а не 10000 Гц. Почему?
  15. Попробовал написать программу по методу GM, за основу взял программу Яrik_а. Микроконтроллер - ATMega 64L, тактовую частоту взял 1 мГц (просто для тренировки). Вместо нулевого таймера, который задействован у Яrik_а, взял таймер_2. Работу программы проверял в VMLABе, смоделировав там пульсовый генератор меандра частотой 10 кГц. Но ничего хорошего не получилось. Вместо ожидаемой индицируемой частоты 10 кГц на ЖК-индикаторе VMLABа в каждом цикле высвечиваются разные значения - от 2 до 30 кГц, причём бывают и отрицательные числа. Подскажите, пожалуйста, где ошибка в программе. static float Fx; unsigned long int N1, N2, N; unsigned long int M1, M2, M; unsigned int Perepol_Timer2=0, Perepol_Timer1=0; unsigned int count_T1, count_T2; // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { Perepol_Timer1++; } // Timer 1 input capture interrupt service routine interrupt [TIM1_CAPT] void timer1_capt_isr(void) { TIMSK&=0xDF; count_T2=TCNT2; count_T1=ICR1; } // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) {Perepol_Timer2++;} void main(void){ // Timer/Counter 1 initialization TCCR1A=0x00; TCCR1B=0xC1; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization TCCR2=0x07; TCNT2=0x00; OCR2=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x64; ETIMSK=0x00; #asm("sei") Perepol_Timer1=0; Perepol_Timer2=0; N1=0;M1=0; while (1) { delay_ms(1000); TIMSK|=0x20; while ((TIMSK&0x20)==0x20){} N2=(unsigned long int)(Perepol_Timer1)*65536+count_T1; M2=(unsigned long int)Perepol_Timer2*65536+count_T2; N=N2-N1; M=M2-M1; Fx=(float)1000000.0*(float)M/(float)N; //Здесь идёт вывод измеряемой частоты Fx на ЖК-индикатор N1=N2; M1=M2; }}
×
×
  • Создать...