Цитата(Anton_NN @ Jul 29 2009, 18:04)

В принципе так. Что означает "погрешность ускорения" ? Ведь в софте задается двоичный код, а не значение скорости или ускорения в м/с.
Soft - это вторично сначала физическая задача. Т.е. если Вы можете игнорировать динамические свойства двигателя и динамические свойства нагрузки на этот двигатель (
т.е. работать с объектом управления без обратных связей !), то задача существенно упрощается. (пока что я встречался только с такими система управления, в которых игнорирование динамических свойств приводов/нагрузки - преступно). Ну если Вы можете позволить себе это проигнорировать, тогда пожалуйста, вот Вам несложное решение:
1. Делаете машину состояния, которая имеет всего 2 основных состояния: поддержание постоянной скорости и ускорение.
2. В состоянии "поддержание постоянной скорости" Вы либо ничего не делаете (записываете в управляемый делитель из раза в раз один и тот же код), либо как-то по измеренному иглу поворота компенсируете неточности задания скорости (как например работают ФАПЧ: подстраивают частоту измеряя фазу).
3. Для работы с состоянии "ускорение", Вам понадобится задавать 3 величины: период изменения коэффициентов для делителя частоты, "шаг изменения скорости" и количество периодов изменения коэффициентов для делителя частоты.
4. Работа в состоянии "ускорение":
a] записать в регистр DIV_K_LOAD коэффициент, который будет некоторое время загружаться, как стартовой для управляемого делителя частоты.
b] начать отсчет периода изменения скорости.
c] пока идет периода изменения скорости, Вам необходимо подготовить новое значение коэффициента для регистра DIV_K_LOAD.
d] по прошествии заданного количества периодов изменения коэффициентов для делителя частоты (периодов ускорения), перейти в состояние поддержание постоянной скорости (возможно с записью не вычисленного, а заранее заданного коэффициента для делителя частоты - так, возможно, будет точнее).
Теперь поподробнее о вычислении коэффициента для делителя:
У Вас система ооочень медленная, как и большинство систем управления - предельная частота всего-то 15кГц... Даже если учесть, что Ваш делитель управляемый частоты должен давать частоту в 3-6 раз большую, чем выходные 3 фазные импульсы, то всё равно получается очень большой период (по меркам ПЛИС), за который Вам необходимо вычислить новый коэффициент. Поэтому можно пользоваться компактным барабанным делителем.
Ваш искомый коэффициент (назовём его
DIV_K, разрядности
n), можно достаточно просто найти:
DIV_K = (2^n) - Alfa / (Cur_Freq + Delta_Freq)
Delta_Freq - "щаг изменения скорости".
Cur_Freq - текушая "скорость".
Alfa - конструктивная константа Вашей системы.
Если Ваш загружаемый счетчик во время загрузки не инкрементирует входные данные, то: DIV_K = (2^n - 1) - Alfa / (Cur_Freq + Delta_Freq)
Это если Вам надо быстро и в первом приближении заставить двигатель шевелиться. А если всё делать надежно, то необходимо работать с обратными связями и использовать наработки Теории Автоматического Управления, для создания регуляторов. Можно воспользоваться и синергетической теорией управления – тогда результаты могут получиться лучше.