• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ШИМ

porex

New member
Не могу разобраться с ШИМ. Взял пример webserver'a от pvvx, добавил настройку ШИМа
Код:
struct pwm_param pwmcfg;
   pwmcfg.freq=1000;
   pwmcfg.duty[0]=100;
   pwm_init(pwmcfg.freq,pwmcfg.duty);
   /*pwm_set_freq(100);
   pwm_set_duty(100,0);*/
   pwm_start();
покапался немного в драйвере pwm.c, но чуда не призошло, ШИМ на ножке GPIO2 не появился. Плата ESP-01.
Может у кого есть рабочий пример с ШИМ?
 

pvvx

Активный участник сообщества
У меня нет программного ШИМ от Espressif, использующего прерывания таймера и программно переключающего ножки с большим джиттером и очень низкочастотного. Это в примере IoT, pwm.c.
У меня дан пример аппаратного ШИМ, встроенного в чип, на 312kHz в Web_base\app\driver\sigma_delta.c.
http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-12#post-1823
И всё работает - http://192.168.4.1/web.cgi?gpio2.sgs=0x80 (0x80 - скважность 1:1 - меандр)
Получаем на GPIO2 312kHz:
gpio2sgs.gif
Изменить скважность http://192.168.4.1/web.cgi?gpio2.sgn=x, где x от 0 до 255 (в HEX или DEC). Отключить и вернуть вывод GPIO2 в стандартное для SDK состояние = http://192.168.4.1/web.cgi?gpio2.sgс=x, где x любое число.
Управление gpio2.sg_ может быть вставлено в текст HTML или cookie, или Java, или POST... вообщем в любую стандартную передачу параметров для HTTP.
Пример на CИ писать грешно :) т.к. всё управление описано Web_base\app\include\driver\sigma_delta.h
Код:
void sigma_delta_setup(uint32 GPIO_NUM);
void sigma_delta_close(uint32 GPIO_NUM);
void set_sigma_duty_312KHz(uint8 duty);
 
Последнее редактирование:

porex

New member
Спасибо за подсказку, не знал о существовании аппаратного ШИМ. Судя по описанию регистров он одноканальный?
Разбираюсь с вашим драйвером и не могу понять зависимость частоты ШИМа, от заполнения и предделителя. Формула, приведенная в функции set_sigma_duty_312KHz, справедлива только для заполнения кратному степени двойки. Если вводится произвольное заполнение, то частота получается отличной от 312,5kHz плюс импульсы идут пачками.
 

pvvx

Активный участник сообщества
Спасибо за подсказку, не знал о существовании аппаратного ШИМ. Судя по описанию регистров он одноканальный?
С каналами там никак - один источник и любые GPIOx. Описание в gpio_reg.xlsx http://esp8266.ru/forum/attachments/esp8266_reg-xlsx-zip.167/
Разбираюсь с вашим драйвером и не могу понять зависимость частоты ШИМа, от заполнения и предделителя. Формула, приведенная в функции set_sigma_duty_312KHz, справедлива только для заполнения кратному степени двойки. Если вводится произвольное заполнение, то частота получается отличной от 312,5kHz плюс импульсы идут пачками.
А это не совсем моё. Я только адаптировал инициализацию и другие мелочи :)
Сложности с установками GPIO по причине "жалко памяти RAM". Иначе все таблицы линкуются в RAM и отжирают и так малую память... А методой в исходнике всё находится в flash и не использует RAM :)

Частота нарушается при крайних значениях...

Про начальный исходник http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-12#post-1810
 
Последнее редактирование:

porex

New member
Регистры gpio уже видел, спасибо.
У меня осциллограф показывает стабильную частоту 312,5 kHz, только с заполнением кратным 2. При любом другом частота прыгает, но похоже это связано из-за того что импульсы идут пачками. У вас такое не наблюдается?
Во вложении ШИМ с заполнением 0x66
IMG_20150313_160453_.jpg
Кстати reference manual'а для чипа нет никакого?
 

pvvx

Активный участник сообщества
Кстати reference manual'а для чипа нет никакого?
Неа - всё "методом тыка".
С аппаратным ШИМ много неясностей - никто его не исследовал и никаких записей в инет не найдено, кроме того, что нашел у себя в компе тот исходник :). Где-то прочитал его, когда только пришли первые модули и пытался беспорядочно собрать по чипу инфу (накачал несколько гегов всего что попадалось с названием ESP8266 :) - теперь это никчемный хлам). Счас его что-то не найти в google и т.д. :(
Вот такой cигнал при http://192.168.4.1/web.cgi?gpio15.sgs=0x81
pwm_0x81.gif
При 0x66:
pwm_0x66.gif
При 0x01 и 0xFF импульсы 12.5 нс, период 3.2us
Надо разобраться с prescale и duty... WEB умеет писать в регистры... в hexdamp...
Можно и запустить через Web произвольную call с тремя параметрами (в новее версии, если надо сменю web-помойку ) :)
 
Последнее редактирование:

porex

New member
Я уже подредактировал по свои нужды код)) Есть кое-какие мысли по поводу зависимости, надо проверить, но что-то последнее время модуль отказывается выдавать хоть какие-нибудь импульсы. При подключении пина к сигма-дельта, напряжение на нем падает до 1.6 В и тишина. Причем на 0 и 2 пине картина одинаковая. ШИМ сломался?)))
 

porex

New member
Пациент оказался жив, осциллограф погоду показывал))
Провел небольшое исследование. Включил ШИМ /web.cgi?gpio2.sgs=0x80, осциллограф показал частоту 312.5 кГц, далее добавил функцию аналогичную set_sigma_duty_312KHz, но изменяющую только заполнение(duty). Заметил такую закономерность, что при любом значении duty, ширина импульса остается постоянной и равна 1600 ns, при изменении duty меняется только период импульсов. Такое ощущение, что duty и prescaler перепутаны местами, надо бы проверить. Из этого исследования получилась формула расчета часты ШИМ: f(pwm)=80 MHz/2(возможно внутренний делитель)/(prescaler+1)/128(максимальное значение duty)*duty(текущее значение). Надо еще попробовать задать duty больше 128.
Правда пока не могу объяснить следование импульсов пачками.
 

porex

New member
Мы здесь с аппаратным ШИМом воюем), но спасибо за наводку, посмотрим чего они там натворили.
 

pvvx

Активный участник сообщества
Там очень низкочастотный программный ШИМ и не годиться для массы применений. Для него нужен фильтр в секунды...

Правда пока не могу объяснить следование импульсов пачками.
Кратности делителя и прешкалера наверно. По этому надо оперировать обоими и тогда ещё расширяется "битность" отфильтрованного аналогового сигнала. От биений необходимо избавиться - они пролезут через фильтр. Частота биений у меня была 5кГц - это значит что нужен герцовый фильтр, что убивает сразу аппаратный ШИМ. Но главное - ШИМ дает наводку на приемник при плохой разводке проводов с модуля...
 

izhadapter

New member
Никаких - брак чипа. От биений не избавится и глушит приемник WiFi...
Единственная возможность на ESP8266 реализовывать ШИМ на I2S.
Есть ли где-то уже примеры с гибкой его регулировкой по частоте и скважности? По этой шине.
 

pvvx

Активный участник сообщества
Есть ли где-то уже примеры с гибкой его регулировкой по частоте и скважности? По этой шине.
С 2017 года детям этого не потребовалось. Их устраивает программный ШИМ на низкой частоте путем "ногодрыга" по нестабильному прерыванию.
 

izhadapter

New member
С 2017 года детям этого не потребовалось. Их устраивает программный ШИМ на низкой частоте путем "ногодрыга" по нестабильному прерыванию.
Ты просто слишком быстр и бежишь впереди всех.
Так всегда бывает с передовыми технологиями и передовиками,, поэтому они всегда твопят в одиночестве. Но потом остальные подтянутся, это нормально.
 

pvvx

Активный участник сообщества
Ты просто слишком быстр и бежишь впереди всех.
Так всегда бывает с передовыми технологиями и передовиками,, поэтому они всегда твопят в одиночестве. Но потом остальные подтянутся, это нормально.
Моя практика, начатая с начала появления микросхем на полупроводниках, показывает что никогда не "подтянутся". Обычно популярным в народе становится самое худшее решение или реализация. И причины такого положения давно можно разложить по полочкам, но нафига это тут надо.
"твопят в одиночестве" - "таков путь" и желательно не попасть в популисты и прочие горячо любимые личности народом (это убивает творчество на корню), а другим другое :p
 
Сверху Снизу