int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ LCD_Init(2, 20); LCD_PrintString(0, 0, "Damogran Labs"); Encoder_Init(&encoder1, ENC1_A_GPIO_Port, ENC1_A_Pin, ENC1_B_GPIO_Port, ENC1_B_Pin); Encoder_Init(&encoder2, ENC2_A_GPIO_Port, ENC2_A_Pin, ENC2_B_GPIO_Port, ENC2_B_Pin); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ LCD_PrintNumber(1, 0, encoder1.abs_rot); LCD_PrintNumber(1, 6, encoder2.abs_rot); while (1) { if(Encoder_GetState(&encoder1)){ LCD_PrintString(1, 0, " "); LCD_PrintNumber(1, 0, encoder1.abs_rot); } if(Encoder_GetState(&encoder2)){ LCD_PrintString(1, 6, " "); LCD_PrintNumber(1, 6, encoder2.abs_rot); } if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET){ Encoder_SetAbsToZero(&encoder1); Encoder_SetAbsToZero(&encoder2); } HAL_Delay(100); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
void HardwareInit() { IntMasterDisable(); // Set the system clock to run at 50MHz from the PLL. // PLL=400MHz // sysc2000000lk = 400MHz/2/4 = 50MHz //SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // Set the system clock to run at 20MHz from the PLL. // PLL=100MHz // sysc2000000lk = 100MHz/2/4 = 20MHz //SysCtlClockSet(SYSCTL_SYSDIV_10| SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); ulSysClock = ROM_SysCtlClockGet(); if (InitUART(UART0_BASE,SysCtlClockGet(),19200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)) == -1) while (1); // hang if (InitUART(UART1_BASE,SysCtlClockGet(),9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)) == -1) while (1); // hang SysTickInit(1000); // 1msec counter TimerInit(1); // 100ms counter BBLedInit(); DEBUG_LED1(1); DEBUG_LED1(0); DEBUG_LED2(1); DEBUG_LED2(0); MasterI2C0Init(SysCtlClockGet() >= 40000000L); // Need 40MHz for 400K A3906Init(); RMBD01Init(); Encoder_Init(QEI0_BASE); // J6 PITCH Encoder Encoder_Init(QEI1_BASE); // J8 ROLL Encoder EncoderLinesSet(QEI0_BASE,64); EncoderLinesSet(QEI1_BASE,64); //HBridgeInit(); //GPIOPinInit('E',4,false,false); /*TP5 */ //GPIOPinInit('E',5,false,false); /*TP6 */ IntMasterEnable(); }
int main(){ int muxpin[4] = {19,18,17,16}; Uart_Init(57600); Uart_Print("Uart Inited\n\r"); SPI_InitMaster(16); Mux_Init(&MBMux,20,muxpin); Encoder_Init(&MBMux); Uart_Print("SPI Encoder Inited\n\r"); Joystick_Init(); GPIO_Init(31,OUTPUT); Timer_Init(0,100,Timer_Rountine); return 0; }
int main(void) { // uint32_t loop=0xFFFFFF; // while(loop) // { // loop--; // } SystemInit(); Power_Detector_Init(); Watchdog_Init(); Encoder_Init(); Proto_Init(PROTO_FIRST_INIT); vTaskStartScheduler(); while(1); }
/** Configures the board hardware and chip peripherals for the demo's functionality. */ void HidApp_Init(void) { /* LUFA: Disable watchdog if enabled by bootloader fuses */ MCUSR &= ~(1 << WDRF); wdt_disable(); /* LUFA: Disable clock division */ clock_prescale_set(clock_div_1); /* Hardware Initialization */ USB_Init(); BoardConfig_Init(); Encoder_Init( EVENT_EncoderButtonDown, EVENT_EncoderButtonUp, EVENT_Encoder_CC, EVENT_Encoder_CCW); Leds_Init(); }
void ENC_L_INIT_STATE(void) { /* s_el 码盘正反转初始化状态时的状态标志 0--初始化还未开始 1--校准正传系数 2--校准反正系数 3--告知主控陀螺仪标定完成 */ static uint8_t s_el = 0; switch(s_el) { case 0: s_el = 1; Encoder_Clear(0); Encoder_Clear(1); break; case 1: s_el = 2; Encoder_InitXY(0); break; case 2: s_el = 3; Encoder_Clear(0); Encoder_Clear(1); break; case 3: s_el = 0; Encoder_InitXY(1); Encoder_Init(); Data_Save(); SS_H = 0; //复位状态标志 break; default : s_el = 1; Encoder_Clear(0); Encoder_Clear(1); break; } }
void ENCODER(void){ unsigned char Error =0; int Encoder_L_Counter =0; int Encoder_R_Counter =0; unsigned char Encoder_Watchdog_Flag =0; Encoder_Init(); EnableInterrupts; // get interrupt point for (;;){ // PASS ENCODER VARS TO MAIN DisableInterrupts; Encoder_L_Counter = L_Counter; Encoder_R_Counter = R_Counter; Encoder_Watchdog_Flag = WATCH_DOG_FLAG; EnableInterrupts; if(Encoder_Watchdog_Flag ==1){ printf("R %d", Encoder_R_Counter); printf("L %d", Encoder_L_Counter); // RESET COUNTERS AND FLAGS DisableInterrupts; WATCH_DOG_FLAG =0; L_Counter =0; R_Counter =0; EnableInterrupts; } // PASS VARS TO WATCHDOG DisableInterrupts; WATCH_L_COUNTER = Encoder_L_Counter; WATCH_R_COUNTER = Encoder_R_Counter; EnableInterrupts; } }
int main(void) { LockoutProtection(); InitializeMCU(); //init uart SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioInit(0); LED_Init(); Jumper_Init(); ADC_Init(); Sonar_Init(); usemotors = Jumper_Value & 0x8; if ((Jumper_Value & 0x7) == 0x1) { if (usemotors) { Motor_Init(false,true); Motor_Set(127,127); } avoid_sonar(0); avoid_ir(filtered_ir); for (;;); } if ((Jumper_Value & 0x7) == 0x2) { Travel_Init(usemotors); Travel_Go(FULL_SPEED); for (;;); } if ((Jumper_Value & 0x7) == 0x3) { if (usemotors) { Motor_Init(false,true); Motor_Set(127,127); } for (;;); } //if no jumpers are set, enter debug mode Encoder_Init(true,false); for (;;c++) { ADC_Background_Read(0); Sonar_Background_Read(0); Encoder_Background_Read(0); Jumper_Read(); UARTprintf("ADC[%3d %3d %3d %3d %3d %3d %3d %3d] S[%7d] E[%3d %3d] J[%1x] c:%d\n", ADC_Values[0],ADC_Values[1],ADC_Values[2],ADC_Values[3],ADC_Values[4],ADC_Values[5],ADC_Values[6],ADC_Values[7], Sonar_Value, Encoder_Values[0],Encoder_Values[1], Jumper_Value, c ); LED_Set(LED_0,c); LED_Set(LED_1,c+64); LED_Set(LED_2,c+128); LED_Set(LED_3,c+192); WaitUS(20000); } }
int main() { USART3_Config(); USART2_Config(); Encoder_Init(); //while(1); Motor_Init(); SysTick_Init(72); Car_Run_Speed(0); while(!Start_Due) { Car_Turn_Speed(2000); //Z向输出标定 } Car_Turn_Angle(0); while(1) { //USART1_printf(USART2,"angle=%d cnt=%d\r\n", (int)Car_Angle,TIM2->CNT); //USART_SendData(USART2,USART_ReceiveData(USART2)); cmd_speed_pre = speed; cmd_angle_pre = turn; sscanf(Cmd_Ble, "#%d-%d*", &speed, &turn); if (turn > 180) { turn = turn % 180; } else if (turn <= -180) { turn = turn % -180; } #ifdef BOTTOMIMPROVE // //转向优化 // if (is_close(Car_Angle,turn)) // turn = turn; // else // turn = turn + 180; // speed = -speed; // if (turn > 180) // { // turn = turn % 180; // } // else if (turn <= -180) // { // turn = -((-turn) % 180); // } // Car_Turn_Angle(turn); // Car_Run(speed); if (abs(speed) > 0) //速度为零时不要优化,便于调零 { src_1 = Car_Angle; if (Car_Angle > 0) { src_2 = -180 + Car_Angle; } else { src_2 = 180 + Car_Angle; } //calc the angle distance diff_4 = abs(turn - src_1); //normal diff_5 = abs(turn - src_2); //reverse if (diff_4 > 180) { diff_4 = 360 - diff_4; } if (diff_5 > 180) { diff_5 = 360 - diff_5; } if (diff_5 >= diff_4) { //normal turn } else { if (turn >=0) { turn = -180 + turn; } else { turn = 180 + turn; } speed = -speed; //reverse turn } } #endif //解决170 -> -170反转的问题,原理:以170->-170为例,未过180前,turn为190,但是对于calcpid而言,仍然能够正常输出。过了180后, //turn就变回-170了,从而恢复正常。 diff_1 = abs(turn - Car_Angle); diff_2 = abs(360 + turn - Car_Angle); diff_3 = abs(turn - 360 - Car_Angle); if (diff_2 < diff_1) //+360较小,即170 -> -170 { turn = 360 + turn; } else if (diff_3 < diff_1) //-360较小,即-170 -> 170 { turn = turn - 360; } else { turn = turn; } //#ifndef BOTTOMIMPROVE if(abs(turn - cmd_angle_pre) != 0) //cmd_angle_pre 在读取新值之前被赋值,接下来被赋值的turn又会被更改,因此没有问题 { Car_Turn_Angle(turn); } if(abs(speed - cmd_speed_pre) != 0) { Car_Run(speed); } stop_protect_val = (130 - abs(speed)) > 60?60:(130-abs(speed)); //Car_Turn(1); //#endif } }
void main(void) { unsigned int i =0; unsigned char Error =0; struct LCD_Geometry *pointCurrent= &Current; unsigned int Local_Process =0; unsigned int Local_counter =0; unsigned char Local_Error_Flag_Number =0; Error_Flag_Number =0; Timer_INIT(); /// ENABLE TIMERS FIRST ALL THINGS DEPEND ON THIS THAT USE DELAYS !!! F**K ILI9327_INIT();// init lcd //ENCODER(); DCM_INIT(); RC_SERVO_INIT(); STMOTOR_INIT(); STMOTOR_FIND_HOME(); Accelerometer_INIT(); // init accel // read from input Encoder_Init(); /// FOREVER LOOP RS232_TEST(); //WORKS GREAT // RC_SERVO_INIT(); // DO ENCODER SHIT HERE // Encoder_menu(); // STMOTOR_TEST(); // ENCODER(); // init sd // write hello world // // SD_INIT_FAT(); // DCMOTOR WORKS// SET SPEED USING SET SPEED PERCENTAGE // /// WORKS GREAT /* DCM_INIT(); DC_1_REVERSE_DIRECTION; DC_2_FORWARD_DIRECTION ; DC_R_SETSPEED_PERCENTAGE(40); DC_L_SETSPEED_PERCENTAGE(100); */ // ENCODER WORKS /* interrupt 10 void TC1handler(void) // INPUT R interrupt 9 void TC2handler(void) // INPUT L interrupt 12 void TC4handler(void) // WATCHDOG */ // Encoder_menu(); // ENCODER(); // STEPPER MOTOR WORKS // //STMOTOR_TEST(); // GETS ACCEL VALUES // WORKS GREAT /* interrupt 14 void TC6handler // TIMER WATCHDOG */ // Accelerometer_Menu(); // //Accelerometer_Test_2(); // NEEDS MORE WORK // WORKS FINE BUT NEEDS To BE RUN IN THE BACKGROUND // USING TIMERS //Touch_Test(); // RS232_INIT(); // printf("waitforever"); while(1){ asm("NOP"); continue; } // WORKS GREAT WITH INPUT FROM SERIAL // // SHOULD CHANGE // RS232_INIT(); /*extern unsigned char RS232_Termination_String[4] = { // 0xDE, 0xAD, 0xBE, 0xEF 'a','b', 'c','d' }; extern unsigned char RS232_Transmission_String[4] = { // 0xFE, 0xED, 0xDE, 0xAD 'q','w','e','r' }; */ // Analog_Init(ANALOG_10BIT); //Touch_Test(); //MAX5513_Test(); //Accelerometer_Test(); }