сформировать сигнал ШИМ частотой 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? От нуля до 100? Непонятно...Когда значение value = 0,0, рабочий цикл равен 0%, а когда значение value = ± scale, рабочий цикл составляет ± 100%. (С учетом ограничений min-dc и max-dc.)
Ясно, что для получения скважности в 1 нужно, чтобы значение value и значение scale совпали. Но при чём тут рабочий цикл в 100%?
Вход pwmgen.<N>.scale - float in/out
Вместе с параметром pwmgen.<N>.offset обеспечивают масштаб и смещение от вывода значения до фактического рабочего цикла. Рабочий цикл рассчитывается по формуле dc = (value/scale) + offset, где 1.0 означает 100%. Т.е. если pwmgen.<N>.offset равен нулю, то при value/scale=1 получаем 100% (вроде правильно предполагал).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>.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
И, самое главное, не забыть прописать две функции!!!:
Код: Выделить всё
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 - не предлагать!)