Владимир, у вас описание (РЭ) всего того, что вы сделали для программирования PRU есть ?
Владимир, у вас описание (РЭ) всего того, что вы сделали для программирования PRU есть ?
Посмотрел как ведёт себя ПЛК при обращении с регистром "счётчика команд" -- врагу не пожелаешь.
В точности воспроизвести в эмуляторе пока не смог, но приближаюсь.
Доработанный эмулятор стал показывать, что при уставке 500 кГц на выходе 495050 (т.е. похоже на то, что наблюдалось на реальном ПЛК -- там было 495126).
Поправил программу -- теперь частота уж совсем хорошая должна быть.
Кстати, по поводу генерации частоты: сейчас длина каждого импульса одинаковая. Т.е. на высоких частотах (напр. 200кГц) длина периода это где-то 1000 тактов. 1001 такт это уже 199800Гц. Возможно, на больших частотах стоит какого-нибудь брезенхема прикрутить, чтобы длины тактов немного варьировались, а в среднем получалось нужное значение.
pru_stepper_v12.zip
Работают два привода, на разных каналах со своими частотами.
Смотри фото по частотам: 1000Hz_0,2ms_дел.jpg,100kHz_5mks_дел.jpg, 300kHz_1mks_дел.jpg, 500kHz_1mks_дел.jpg.
Осциллограф С1-118А (какой есть).
При QUANTITY отличном от 0 и MAX_SPEAD=0, при подаче команды ENABLE выдается один импульс, см. SPEAD_0.jpg.
Количество выдаваемых импульсов плавает и зависит от частоты и от заданного количества импульсов:
• MAX_SPEAD = 148500 Гц ± 3…30 имп.
• MAX_SPEAD > 148500 Гц - 3…300 имп.
• MAX_SPEAD < 148500 Гц + 3…30 имп.
Хотя PULSES_GENERATED= заданное значение.
Последний раз редактировалось dima64; 03.10.2016 в 11:36.
ACC 0 0 0
DEC 0 0 0
MIN_S 0 0 0
MAX_S 200000 100000 10000
QUANTITY 300000 300000 30000
ФАКТ QUANTITY 297685 300044 30000
ФАКТ QUANTITY 297434 300045 30010
ФАКТ QUANTITY 297488 300040 30012
Насколько точно можно судить по картинке?.....
Последний раз редактировалось dima64; 03.10.2016 в 12:33.
Это показания с дисплея сервопривода, да и визуально вал двигателя останавливается в разных местах.
Тогда о каких потерях импульсов вообще речь?
электронщик до мозга костей и не только
ФБ из-за ошибки в коде может неправильно отсчитывать заданное количество импульсов, но это поправимо.
ШД может делать пропуск импульсов при разгоне и торможении. Чтобы этого не было надо делать разгон и торможения ШД по определенной траектории. Сформировать правильную траекторию достаточно сложно.
Последний раз редактировалось Вольд; 03.10.2016 в 13:38.
Похоже глючит серво. Провел эксперимент. Делал по 5 шагов для ШД и СЕРВО (ШАГ: MIN_SPEED:=200, MAX_SPEED:=1000, ACCEL_RAMP:=DECEL_RAMP:=0, QUANTITY:=20000).
ШД приехал метка в метку. Серво на каждом шаге прибавлял 8-10 имп.