// Останов всех сервоприводов
{i;
for(i=0;i<fxPWM_CH_NUM;i++) = currAng;
}
//----------------------------------------------------------
//
//----------------------------------------------------------main(void)
{addr, MY_ADDR, U1, U2, a1, a2;char num, angle;i;_485Init();();_CH_NUM = 6;
USART_Init(BR57600);
// Установить в начальное положение
SetStartPos();
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,200 kHz
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected=0x00;A=0x00;B=0x07;=0x00;A=0x00;B=0x00;
// Timer/Counter 2 Interrupt(s) initialization=0x01;
// Global enable interrupts
// Определяем собственный адрес=ReadByteADC(6); a1=U1>100;=ReadByteADC(7);=U2>100;_ADDR=a1+a2*2;(MY_ADDR); // Инициализация регистров = AStepDefault; = (signed char)0xff; = 0x00; = 0x00; //-------------------------------------------------------- // Основной цикл //--------------------------------------------------------CTL = U485READ;(1) { //------------------------------------------------------ // Считываю байты с портов for(i=0;i<8;i++) = ReadByteADC(i); //------------------------------------------------------ // Управление сервомашинками //------------------------------------------------------(i=0;i<fxPWM_CH_NUM;i++) {(needrotate) {(i, currAng); needrotate = 0; } } //------------------------------------------------------ // Проверяем условие прерывания операции CMD_SET_INT //------------------------------------------------------(i=0;i<8;i++) {= (INT_MASK & (1<<i));(num) {(ADCVAL>=INT_VALUE) // Блокируем движение {();_MASK = 0;; } } }(UWasChar1()) addr = ReadCommand(); else continue;(addr!=MY_ADDR) continue;CTL = U485WRITE;_us(DELAY_TIME);(MRcmd) {CMD_GET_REG:(HEADER_BYTE);(MRfrom);(MY_ADDR);(CMD_SENS_COND);(MAX_REGIST);(i=0;i<MAX_REGIST;i++)(REGIST);;CMD_READ_SENS: // Отправляем значения АЦП(HEADER_BYTE);(MRfrom);(MY_ADDR);(CMD_SENS_COND);(8);(i=0;i<8;i++)(ADCVAL);;CMD_SENS_COND: // Пропускаю командуCMD_ACK:;CMD_PIP: // Пищалка();;CMD_STARTPOS: // Исходное положение();;CMD_SET_FAST:CMD_SET_SLOW:= MRDATA;= MRDATA;(num<0 || num>=fxPWM_CH_NUM) break;(angle>MaxAng) angle = MaxAng;(angle<MinAng) angle = MinAng;(MRcmd==CMD_SET_FAST) // Быстрый поворот { = goalAng = angle;((int)num, (int)angle); }// Медленный поворот = angle;;CMD_SET_VECT_SLOW:CMD_SET_VECT_FAST:(MRlen>fxPWM_CH_NUM) MRlen = fxPWM_CH_NUM;(i=0;i<MRlen;i++) {= MRDATA;(angle>MaxAng) angle = MaxAng;(angle<MinAng) angle = MinAng;(MRcmd==CMD_SET_VECT_FAST) // Быстрый поворот { = goalAng = angle;(i, (int)angle); }// Медленный поворот=angle; };CMD_SET_REG: // Установить значение регистра= MRDATA;(num<0 || num>=MAX_REGIST) break; = MRDATA;; //---------------------------------------------------- // Для версии SlaveXPod //----------------------------------------------------CMD_STOP: // Останов всех сервоприводов();;CMD_SET_INT: // Прервать выполнение операции по состоянию датчика. Аргументы: <маска датчиков> <значение>_MASK = MRDATA;_VALUE = MRDATA;; Перейти на страницу: 8 9 10 11 12 13 14 15 16 17 Изучение объекта и синтеза регулятора систем управления Теория автоматического управления (ТАУ) - одна из наиболее важных общетехнических дисциплин. В ее рамках предлагаются универсальные подходы, которые можно применять при создании систем управления объектами различной природы. В состав любой системы автоматического управления (САУ) - системы, работающей без участия человека, обяза ... Популярное: