Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора
Среда программирования CodeComposerStudio (CCS) предназначена для создания программного обеспечения, запускаемого на DSP-процессорах фирмы Texas Instruments. CCS содержит все необходимые инструменты для набора и редактирования программ, конфигурирования ядра реального времени DSP|BIOS, получения машинного кода с использованием компилятора языка С, загрузки машинного кода в процессор, запуска и отладки программ, в том числе и в режиме реального времени. CCS позволяет работать как с реальным устройством, так и его моделью в режиме симулятора. Симулятор позволяет заниматься отладкой программного обеспечения без наличия реального процессора, но при этом не поддерживает периферийные устройства на борту процессора и осуществляет вычисления со скоростью, отличной от скорости реального процессора. Таким образом, при работе с симулятором скорость выполнения программы будет в несколько раз меньше (поскольку компьютеру приходится моделировать работу всех системных устройств архитектуры ядра процессора), входные сигналы возможно только смоделировать, выходные сигналы не могут быть физически переданы во внешний мир и могут наблюдаться только по значениям переменных, невозможно смоделировать многозадачность. Однако для отработки логики работы расчетных процедур и некоторых других случаев симулятор оказывается доступным инструментом. Изначально необходимо с помощью утилиты CodeComposerStudioSetup ввести в CCS применяемые устройства. На рисунке 1 (слева) показано, что CCS может работать с отладочной платой eZdsp и симулятором процессора F2812.
Рис.1
После запуска CCS в появившемся окне Parallel Debug Manager необходимо выбрать устройство, с которым будет происходить работа (в нашем случае это F2812 Device Simulator, см.рис.2). Примечание. Для установки драйвера платы eZdsp необходимо воспользоваться диском, поставляемым с платой. Драйвер с диска устанавливается поверх установленной версии CCS. После запуска основного окна CCS необходимо создать проект, создать текст программы, подключить его к проекту, оттранслировать, загрузить его в память, запустить на исполнение, убедиться в правильности выполнения программы.
Рис.2
Ниже приведены инструкции по созданию простейшего приложения, позволяющего продемонстрировать работу простейшего цифрового фильтра. 1. Создать проект Project-New… В появившемся окне указать имя проекта, зафиксировать каталог проекта. 2. Создать текстовый файл File-New и ввести в него следующий код программы:
//для использования чисел с плавающей запятой #include <float.h> #include <math.h> //объявление переменных программы float t=0, //время u, //входной сигнал filtr=0, //отфильтрованный сигнал k0=0.1, // коэффициент фильтра k0 k1=0.9; // коэффициент фильтра k1 void main() { while(1)// организация безусловных циклов вычислений { // начало цикла t=t+0.1; // имитация времени u=50*sin(t)+15*sin(100*t);// входной сигнал filtr=k0*u+k1*filtr;// отфильтрованный сигнал } // конец цикла } 3. Сохранить данный файл под именем sim_1, в качетсве типа файла выбрать из предложенного C/C++ Source file (*.c). Сохранение должно быть выполнено в каталог проекта. 4. Добавить только что сохраненный файл исходного текста программы в проект с помощью меню Project-Add files to project. 5. Добавить в проект аналогичным образом файл библиотеки rts2800.lib 6. Открыть окно настроек CCS через Option-Customize и на закладке Program|Project Load установить галочку для свойства Load Program After Build. 7. Выполнить трансляцию проекта через нажатие F7 или Project-Build. В случае успешного завершения трансляции и компоновки в появившемся окне сообщений будет показано: ----------------------------- sim_1.pjt - Debug ---------------------- Build Complete, 0 Errors, 0 Warnings, 0 Remarks
После чего произойдет загрузка программы в память модели процессора. 8. Если программа содержит ошибки, их необходимо исправить и повторить трансляцию. 9. Для наблюдения за программой необходимо вывести окно WatchWindow, на нем открыть закладку Watch1, в клетки окна ввести переменные u и t. 10. Для наблюдения за формой изменения сигналов необходимо открыть графическое окно через View-Graph-TimeFrequency, в окне настроек сделать изменения согласно приведенному ниже окну (свойства Display Type – Dual Time, Start address – upper display - &u, Start address – lower display - &filtr, Acquisition Buffer Size – 1, DSP Data type – 32-bit floating points, см.рис.3). 11. Для отладки кода необходимо установить точку зондирования. Для этого необходимо щелкнуть левой клавишей мыши по строчке программы «t=t+0.1», затем правой клавишей и в появившемся контекстном меню выбрать Toggle Software Probe Point. Зелено-голубая точка появится слева от строчки, показывая место установки точки зондирования (при выполнении данной строчки будет происходить обновление показаний привязанных к данной точке окон). 12. Для привязки данной точки зондирования к окнам отображения графиков и переменных (WatchWindow) необходимо вызвать окно привязки через Debug-ProbePoints, в появившемся окне щелкнуть мышью по слову NoConnection (для автоматической установки поля Location), после этого в поле Connect To выбрать Watch Window, нажать на окне кнопку Add. Аналогичным образом добавить вывод на графический дисплей. Нажать Ок.
Рис.3
13. Для перезагрузки программы выполнить Project-Build. 14. Запустить программу клавишей F5 или через Debug-Run. Результатом работы программы должно быть окно, показанное ниже(графический экран и WatchWindow показывают изменения переменных), см. рис.4: Рис.4 Далее показан более сложный пример использования симулятора. В примере показана система позицирования между двумя конечными положениями (лифт на 2 этажа), созданная на основе модели двигателя постоянного тока, ПИ-регулятора скорости, контура положения на базе П-регулятора и логической системы управления. В примере создается зацикленный расчет работы системы. Происходит моделирование времени, работы двигателя постоянного тока, далее происходит расчет регуляторов скорости и положения, в завершение – система логического управления на основе смены состояний режимов работы в зависимости от координат системы и команд. Пример показывает возможность отладки программного обеспечения без наличия реальной системы управления, при этом затрагиваются основные моменты разработки процедур управления. Нижнее положение соответствует значению «0» в переменной pos, верхнее – «10». Срабатывание кнопок происходит при вводе в соответствующие переменные значения «1».
#include <float.h>// в файле используются расчеты // с плавающей запятой // декларирование используемых переменных float t=0,dt=0.001; float w=0,i=0,u=0,R=3.6,L=0.034,Mc=1,Me=0,c=1.82,J=0.038,Mload; float k0=2+0.001/0.01,k1=2,input=0,input_prev=0,output=0,w_error=0; float w_set=0; float pos_set=0,pos=0,pos_error; int down_button=0,stop_button=0,up_button=0,mode=0; int up_lamp=0,down_lamp=0,down_move_lamp=0,up_move_lamp=0; void main()// процедура расчета { m1: // начало цикла // модель времени //-------------------------------------------------------------------- t=t+dt; // модель двигателя постоянного тока //-------------------------------------------------------------------- i=i+(u-R*i-c*w)/L*dt; // вычисление тока Me=i*c;// вычисление крутящего момента w=w+(Me-Mload)/J*dt;//вычисление скорости pos=pos+w*0.1;//вычисление положения // модель реактивной нагрузки (лифт с противовесом) //-------------------------------------------------------------------- if (w<0) Mload=-Mc;else if (w>0) Mload=Mc;else Mload=0; // регулятор скорости //-------------------------------------------------------------------- w_error=w_set-w;// расчет ошибки input=w_error;// передача сигнала ошибки на вход регулятора output=output+k0*input-k1*input_prev;// расчет регулятора input_prev=input;//запоминание текущего значения как // предыдущего // для следующего цикла расчета if (output>220) output=220; // ограничение // максимального значения if (output<-220) output=-220; u=output; //соединение сигнала регулятора // и напряжение якоря двигателя // регулятор положения //-------------------------------------------------------------------- pos_error=pos_set-pos;// расчет ошибки w_set=pos_error*0.25;// расчет положения // и передача задания на // регулятор скорости // управление сигнализацией положения //-------------------------------------------------------------------- if (pos<1) down_lamp=1;else down_lamp=0;// лампа //нижнего положения if (pos>9) up_lamp=1;else up_lamp=0; // лампа //верхнего положения // режим работы «остановлен» //-------------------------------------------------------------------- if (mode==0) { pos_set=pos_set; u=0;//обесточиваем двигатель w_set=0;//останавливаем регулятор скорости down_move_lamp=0; // выключили лампы // движения вниз up_move_lamp=0; // выключили лампы //движения вверх if (up_button==1) mode=1; //реакция на //нажатие //кнопки up if (down_button==1) mode=2; //реакция //на нажатие //кнопки down if (stop_button==1) mode=0; // реакция // на нажатие // кнопки stop } // режим подъема //-------------------------------------------------------------------- if (mode==1) { up_move_lamp=1; // включили лампы //движения вверх down_move_lamp=0; // выключили лампы //движения вниз pos_set=10;// задание целевого положения if (up_button==1) mode=1; //реакция // на нажатие // кнопки up if (down_button==1) mode=0; //реакция //на нажатие // кнопки down if (stop_button==1) mode=0; // реакция // на нажатие // кнопки stop if (pos>pos_set) mode=0;// требуемое //положение достигнуто } // режим опускания //-------------------------------------------------------------------- if (mode==2) { up_move_lamp=0; // выключили //лампы движения вверх down_move_lamp=1; // включили //лампы движения вниз pos_set=0; // задание целевого положения if (up_button==1) mode=0; //реакция // на нажатие кнопки up if (down_button==1) mode=2; //реакция // на нажатие кнопки down if (stop_button==1) mode=0; // реакция // на нажатие кнопки stop if (pos<pos_set) mode=0;//требуемое //положение достигнуто } goto m1;//конец цикла } При запуске программы и имитации включения кнопок возможно отслеживание отработки положения и срабатывания ламп сигнализации через окно WatchWindow. На графике, приведенном на рисунке 5, выводятся осциллограммы тока якоря и скорости.
Рис.5 Внимание!В представленной системе содержатся ошибки различного характера (как минимум 3), которые не позволяют применить разработанную систему для управления реальным лифтом с гарантией обеспечения безопасности доставки груза. В качестве задания для самостоятельной работы предлагается выявить эти ошибки и предложить способы по их устранению, а также установить в данную систему ПИ-регулятор тока
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ![]() ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1383)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |