ШИМ с 16кГц управляемый кнопками

Тема в разделе "Глядите, что я сделал", создана пользователем woow, 28 ноя 2013.

  1. woow

    woow Гик

    так точно давим дребезг. Учёл ваши предложения. Но это на вряд ли что то изменит, не существенно, ведь уровень напряжения вписывается в диапазон определяемой кнопки.
    Так управляется, но очень странно. Всё происходит так: включаем 0=стоит, от 10 до 300 крутится обороты к концу этого диапазона резко падают; от 300 до 520 стоит, от 520 до 800 крутится обороты к концу этого диапазона резко падают; от 800 до 1023 стоит:
     
    Последнее редактирование: 12 дек 2013
  2. fr0ster

    fr0ster Гик

    Пишите в сериал порт значения считываемые с кнопочной ноги.
    И еще, что за движок вы крутите?
    И почему нужно 16кГц ШИМ?
     
  3. woow

    woow Гик

    Извините не понял (я ж дилетант :( ) "Пишите в сериал порт значения считываемые с кнопочной ноги."
    настоящий момент это вентилятор 12в от компа. Как справлюсь со всеми проблемами буду подключать к мосту на IBGT для управления однофазным вентилятором. 16кГц потомų что автор схемы указал именно эту частоту, правда на другом чипе.
     
  4. fr0ster

    fr0ster Гик

    А схему можете показать?
    А писать в сериал порт это использовать библиотеку Serial для вывода ссобщений в ком-порт, потом в ардуино иде например можно через монитор смотрть что ардуино пишет.
    Так можно увидеть что происходит и какие значения считываются.
     
  5. woow

    woow Гик

    на да так и подумал про сериал, только не понял за чем :) извиняюсь
    А схему которую моста? или как ардуину вентилятор подключены?
    Убрал эту строчку
    //TCCR1B = 25;// 00011001
    ситуация улучилась, только надо как то ограничить обороты что бы мотор раньше останавливался по ка у него есть мощности, чтобы не спалить его.
     

    Вложения:

    • reg_1_IGBT.JPG
      reg_1_IGBT.JPG
      Размер файла:
      41 КБ
      Просмотров:
      1.223
  6. fr0ster

    fr0ster Гик

    Схему подключения вентилятора к ардуине.
    Насчет регулирования оборотов то методик две, одна это управление прерыванием, вторая управлением тока обмоток. У вас видимо просто двигатель постоянного тока. Спалить движок вы не спалите, если напряжение на нем не превысите.
     
  7. woow

    woow Гик

    Я думаю про будущее. Когда двигатель будет на 220в и если он станет или будет крутится на очень маленьких оборотах то не будет обдува и есть риск что он может перегреться. Прикладываю экспериментную схему, но она только для регуляции кода, LED практически горит постоянной яркостью, а вот вентилятор изменяет обороты.
    Сделал несколько изменений но тут опят для меня непонятности, что то программно заклинивает, где знаю но чем заменить ума не хватает. Ввёл такие приблуды, что бы двигатель останавливался когда pwm<=300, то есть его приравниваем 1023 полный стоп, при значении 300 единиц он легко крутится и у него есть крутящий момент позволят запускаться после останова. И другое значение когда pwm=0 то pwm тоже 0 максимальные обороты.
    Но тут происходит для меня непонятности. При запуске программы на дисплее 0, мотор стоит, давим кнопку DOWN значение прыгает сразу на 4 (очень вяло реагирует клавиатура с запозданием) тогда запускается двигатель. Можем менять значение UP/DOWN всё работает, вверх до максимума т.э. 0 (и тут двигатель не останавливается как при запуске программы, но когда понижаешь обороты и доходишь до stop . Тут уже кнопки не реагирует на нажатие, вернее они реагирует, но ихние команды не воспринимаются. Тут спасает только Reset.

     

    Вложения:

    • dYAa5.JPG
      dYAa5.JPG
      Размер файла:
      7 КБ
      Просмотров:
      826
  8. fr0ster

    fr0ster Гик

    Движком на 220 скорее всего нужно будет иначе управлять чем движком на 12, разные моторы, на 220 может быть асинхронный к примеру.
    Насчет LED, особенность человеческого зрения, для плавного изменения яркости скважность ШИМ надо примерно в 2 раза изменять.
    И попробуйте на экран выводить значения pwm_value
    И еще, как кнопки подключены?
     
  9. woow

    woow Гик

    Человеческий глаз и скважность... понимаю имеет место в жизни и в теории, но если в место кнопок потенцик 10ком ставишь, регистры не меняешь всё как по маслу диапазон димирования с 0 до 1023, как LED так и мотора.
    Двигатель будет однофазный асинхронный, схема выше "стандартная" унифицированная оптопара для управления IGBT транзами, она же может использоваться и для трёхфазного движка (с тройной добавкой конечно).
    Схема клавиры тут http://www.dfrobot.com/image/data/DFR0009/LCDKeypad Shield V1.0 SCH.pdf стандартная..
    Вот тут беда:
    if(pwm_value>300)
    pwm_value=1023;
    тут я сотворил не кому не нужен цикл, если превышаешь значение 300, он постоянно удерживает (сбрасывает) на 1023. Как тут с логикой ума не хватает.
    Мне вот только интересно куда подевались те которые не давно б этой теме писали о ШИМ и регистрах много умных слов, но увы их не стало, когда речь пошла о конкретных делах. Всего 5 строчек AVR PWM
    TCCR1A = B11110010;
    TCCR1B = B00011001;//B00010001
    //TCCR1B = 25;// 00011001 // тут не понимаю за чем он нужен, когда убрал - не стало промежуточных спадов оборотов
    ICR1 = 1023 ;
    OCR1A = 1023;
     
  10. fr0ster

    fr0ster Гик

    Не знаю как в теории, а в практике все как сказал насчет LED.
    Вы когда в схему потенциометр втыкаете код меняется? Или с тем же кодом все как по маслу?

    Про ШИМ и регистры говорилось в контексте 16кГц.
    В ардуине ШИМ настроен на точность в ущерб производительности, грубо говоря.
    Я вообще то тоже много умных, надеюсь, слов про ШИМ и регистры сказал.
    В даташите на ATMega328P поясняется значение битов в регистре.
    Если с английским не очень, можно книги Евстифеева почитать, у него даташит по русски.
    Если в личку укажешь куда, могу архив выслать.
    TCCR1A и TCCR1B управляющие регистры первого таймера.
    TCCR1A = B11110010;
    взведены биты 1,4-7
    Биты 7 и 6 означают вывод ШИМ на выводы COM1A1 и COM1A0, то есть на пин PB1.
    У Ардуино эти пины выведены на контакты 9.
    Взведены оба бита, то низкий уровень на пине будет на обратном счете таймера.
    Биты 5 и 4 означают вывод ШИМ на выводы COM1B1 и COM1B0, то есть на пин PB2.
    У Ардуино эти пины выведены на контакты 10.
    Взведены оба бита, то низкий уровень на пине будет на обратном счете таймера.
    Бит 1, для расшифровки смысла битов 1-0 надо учесть состояние битов 4-3 из регистра, см ниже.
    TCCR1B = B00011001;
    Взведены биты 4-3 и 0.
    Биты 4 и 3, учетом бита 1 из TCCR1A значат настройку первого таймера на режим Fast PWM
    Бит 0 значит частота таймера установлена на 16МГц без предделителя.
    ICR1 = 1023 ;
    В выбранном режиме бесполезное присвоение. ICR1 используется если настроен захват таймера, в некоторый момент дергается пин ICP и срдержимое счетного регистра таймера копируется в ICR1.
    OCR1A = 1023;
    Для ШИМ счетчик счикает от 0 до максимума и обратно. Так как таймер настроен на взведение пина при обратном счете, то при счете от 0 до 1023 пин будет установлен в 0, потом от 1024 до максимума и обратно от максимума до 1024 в 1, при достижении 1023 снова в 0.

    Теперь пара мыслей по поводу. Для 16МГц, имхо было достаточно взвести бит 0 в TCCR1B.
    Что бы взвести один бит достаточно строки типа
    TCCR1B |= _BV(CS10);
    Вы не используете ШИМ сигнал или прерывания, вы все равно пользуетесь analogWrite и прочими ардуиновскими функциями, потому скрестив ужа и ежа, два подхода, вы получите непредсказуемый, ИМХО, результат.

    И ICR1 совершенно тут не нужен.

    Я, тоже не крупный специалист по МК, потому все что сказал это мои выводы из "грызения" даташитов.

    ЗЫ Поправил ошибку насчет битов COM1A1/COM1B1 COM1A0/COM1B0 в FastPWM и Compare Match
     
    Последнее редактирование: 14 дек 2013
  11. fr0ster

    fr0ster Гик

    Вы когда убрали
    Код (Text):
    if(pwm_value>300) // vot tut nam nuzhny tormoza
    pwm_value=1023; // a posle jetogo vsjo zaklinivaet :(
    заработало как хотели то?
     
  12. woow

    woow Гик

    Пробовал из компа сделать осциллограф, не очень что получилось, тогда купил логер у китайца за 6 американцев. Подключил - красота есть 15,6кГц. С кнопками регулируется. Остаться теперь всё это интегрировать в основную программу через меню.
     
  13. woow

    woow Гик

    Привет. Лето кончилось, сх работы почти завершены возвращаюсь к не законченному проекту. По скольку с этой схемой http://www.freescale.com/files/microcontrollers/doc/ref_manual/DRM039.pdfпока что искры и дым, с программой тоже по ка топчусь на месте ШИМ 16кГц работает только теоретический (по ка только терморегулятор работает). Нашёл такую схему [​IMG] http://radiokot.ru/circuit/power/converter/14/01.gif там крутилка и мультивибратор от 50-200Гц управляет это гораздо медленнее, частота чем 16кГц. Идея заменить мультивибратор и управлять частотой вращения Ардуином. Через лето успел уже и так слабые навыки подзабыть. Наверное подойдёт тот самый скеч только вот с регистрами не подскажите :)