PWMGEN - генератор ШИМа и не только

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

PWMGEN - генератор ШИМа и не только

Сообщение Ворон226 »

Задача:
сформировать сигнал ШИМ частотой 50 Гц и скважностью от 0,05 до 0,2 (длительность импульса от 1мсек до 3мсек) с плавной регулировкой и стабильностью.

А почему бы не использовать pwmgen, тем более, что о нём всё известно...
А что о нём известно?

Например вход pwmgen.<N>.value - float in
Commanded value. When value = 0.0, duty cycle is 0%, and when value = ±scale, duty cycle is ± 100%. (Subject to min-dc and max-dc limitations.)
, что я смог перевести так:
Когда значение value = 0,0, рабочий цикл равен 0%, а когда значение value = ± scale, рабочий цикл составляет ± 100%. (С учетом ограничений min-dc и max-dc.)
Но в каком диапазоне предпочтительнее размещать значение value? От нуля до 100? Непонятно...
Ясно, что для получения скважности в 1 нужно, чтобы значение value и значение scale совпали. Но при чём тут рабочий цикл в 100%?

Вход pwmgen.<N>.scale - float in/out
These parameters provide a scale and offset from the value pin to the actual duty cycle. The duty cycle is calculated according to dc = (value/scale) + offset, with 1.0 meaning 100%.
Вместе с параметром pwmgen.<N>.offset обеспечивают масштаб и смещение от вывода значения до фактического рабочего цикла. Рабочий цикл рассчитывается по формуле dc = (value/scale) + offset, где 1.0 означает 100%. Т.е. если pwmgen.<N>.offset равен нулю, то при value/scale=1 получаем 100% (вроде правильно предполагал).

Вход pwmgen.<N>.pwm-freq - ну всё понятно. Число равно частоте на выходе в Гц.

Вход pwmgen.<N>.enable - вообще все понятно.
Вход pwmgen.<N>.max-dc - до 1,0 (что соответствует 100% - это мы помним!)
Вход pwmgen.<N>.min-dc - тоже ясно

Остался выход pwmgen.<N>.pwm - с него-то и буду брать ШИМ.

Осталось загрузить компонент в HAL:

Код: Выделить всё

loadrt pwmgen output_type=0
Для ШИМа нужно прописать именно ноль. Если нужно несколько генераторов, то в загрузке прописать через запятую нужное количество генераторов, например: loadrt pwmgen output_type=0,0,1,2

И, самое главное, не забыть прописать две функции!!!:

Код: Выделить всё

addf  pwmgen.make-pulses  servo-thread
addf  pwmgen.update  base-thread
Без них ничего не заработает...

Прописываю этот компонент в конфигурации, выход пускаю на 8 пин LPT-порта и подключаю осцилограф...
И вижу, что длительность импульса на выходе меняется кратно 1мсек!
А мне-то нужно от 1мсек до 3мсек плавно изменять...
Крутил-крутил - никак!!! И это на частоте 50Гц. Не на 20кГц (вроде как предельная или околопредельная частота для компонента).

Вопрос: где про это прописано? Где вообще прописано подробно как работает этот компонент?
(ссылку - http://linuxcnc.org/docs/html/man/man9/pwmgen.9.html - не предлагать!)
Хочешь быть счастливым? Будь им!
romanetz
Кандидат
Сообщения: 90
Зарегистрирован: 10 окт 2021, 08:13
Репутация: 77
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение romanetz »

Ворон226 писал(а): addf pwmgen.make-pulses base-thread
addf pwmgen.update servo-thread
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение Ворон226 »

romanetz писал(а): 22 дек 2021, 22:14 addf pwmgen.make-pulses base-thread
addf pwmgen.update servo-thread
Вот где собака порылась!
Завтра проверю...
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ev3658
Новичок
Сообщения: 35
Зарегистрирован: 13 фев 2017, 16:08
Репутация: 29
Настоящее имя: Евгений
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение Ev3658 »

Может проще через простой интерфейс и самодельное устройство?
Аватара пользователя
Ворон226
Мастер
Сообщения: 1922
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение Ворон226 »

Ev3658 писал(а): 25 дек 2021, 04:01 Может проще через простой интерфейс и самодельное устройство?
Конечно можно.
Берём плату материнскую мини-ATX, ставим на неё ПО Linux + LinuxCNC, плату развязки LPT-порта, драйвера ШД, плату расширения входов через СОМ-порт и...
Ардуинку для формирования ШИМ-а...
Это как к зубоврачебному кабинету зубную нить для особых случаев...
А ведь всё потому, что не умеем приручить инструмент.
(а сделать элемент формирования ШИМ-а на Ардуино мне уже вторую неделю предлагают. Но в этом случае может ВСЁ на Ардуино сделать?)
Хочешь быть счастливым? Будь им!
AAN
Мастер
Сообщения: 284
Зарегистрирован: 14 апр 2015, 10:28
Репутация: 35
Настоящее имя: Антон
Откуда: Томск
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение AAN »

Ворон226 писал(а): 26 дек 2021, 22:17
Ev3658 писал(а): 25 дек 2021, 04:01 Может проще через простой интерфейс и самодельное устройство?
Конечно можно.
Берём плату материнскую мини-ATX, ставим на неё ПО Linux + LinuxCNC, плату развязки LPT-порта, драйвера ШД, плату расширения входов через СОМ-порт и...
Ардуинку для формирования ШИМ-а...
Это как к зубоврачебному кабинету зубную нить для особых случаев...
А ведь всё потому, что не умеем приручить инструмент.
(а сделать элемент формирования ШИМ-а на Ардуино мне уже вторую неделю предлагают. Но в этом случае может ВСЁ на Ардуино сделать?)
Аватара пользователя
Ev3658
Новичок
Сообщения: 35
Зарегистрирован: 13 фев 2017, 16:08
Репутация: 29
Настоящее имя: Евгений
Контактная информация:

Re: PWMGEN - генератор ШИМа и не только

Сообщение Ev3658 »

Я не использую Arduino.
Микроконтроллеры AVR серии Xmega имеют потрясающие ШИМ возможности и даже аппаратную квадратурную дешифрацию.
Чей ЛУТ, Bascom AVR очень практичные и доступные технологии.
Ответить

Вернуться в «LinuxCNC»