用电位器读取角度,通过小车的加速度来控制下面摆杆
单片机源程序如下:
- #include "stm32f10x.h"
- #include "sys.h"
- #include "usart.h"
- #include "adc.h"
- #include "Ultrasonic.h"
- #include "control.h"
- //u32 Distance1,Distance2;
- float Set_Angle;
- //角速度和角度向左为正,向右为负
- extern u32 TIM1_CH1_Time; //CH1测量方波1的高电平时间,用于计算占空比
- extern u32 TIM1_CH4_Time; //CH4测量方波2的两个上升沿间隔时间,用于计算周期
- extern u16 TIM1CH1_CAPTURE_STA ; //通道1输入捕获标志,15位做捕获标志,低15位做溢出标志
- extern u16 TIM1CH1_CAPTURE_UPVAL,TIM1CH1_CAPTURE_DOWNVAL;
- extern u16 TIM1CH4_CAPTURE_STA; //通道1输入捕获标志,15位做捕获标志,低15位做溢出标志
- extern u16 TIM1CH4_CAPTURE_UPVAL,TIM1CH4_CAPTURE_DOWNVAL;
- int KEY1_Num,KEY2_Num,KEY3_Num,KEY4_Num;
- int m;
- int n=0;
- int a=0;
- float Place;
- float Angle;
- float Speed_Left,Speed_Right;
- float angle1; //角度传感器所得角度
- float temp;
- u8 dir=1;
- u8 d[15];
- int main(void)
- {
- vu8 key=0;
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- LED_Init();
- OLED_Init();
- KEY_Init();
- // uart_init(9600);
- PWM_Init(7199,0); //10KHZ
- Ultrasonic_Init();
- TIM3_Cap_Init(0XFFFF,72-1); //=====超声波初始化
- TIM5_Time_Init(4999,7199);
- Adc_Init();
- BEEP_Init();
- while(1)
- {
- angle1=Get_angle1_Average(4,5);
- Ultrasonic_Dis_Turn();
- Ultrasonic_Trig();
- // Place=Dis_FIR.FRONT;
- // Place=Dis_FIR.FRONT;
- // Angle1_PID(angle1,2000);
- // SetSpeed=Place_PID(Place);
- OLED_ShowString(0,0,"Dis_FIR");
- OLED_ShowNum(60,0,Dis_FIR.FRONT,5,12);
- OLED_ShowString(0,1,"Dis_BACK");
- OLED_ShowNum(60,1,Dis_FIR.BACK,5,12);
- OLED_ShowString(0,2,"angle1");
- OLED_ShowNum(60,2,angle1,5,12);
- OLED_ShowString(0,3,"PWMA");
- OLED_Float(60,3,PWMA,1);
- OLED_ShowString(0,4,"PWMB");
- OLED_Float(60,4,PWMB,1);
- Angle1_PID(angle1,2235);
- Angle_PWM=Angle1_PID(angle1,2190);
- Set_Pwm(Angle_PWM,Angle_PWM);
- // Angle1_PID(angle1,2235);
- // Angle_PWM=Angle1_PID(angle1,2235);
- // Set_Pwm(Angle_PWM,Angle_PWM);
- delay_ms(10);
- key=KEY_Scan(0); //得到键值
- if(key)
- {
- switch(key)
- {
- case KEY0_PRES: //控制LED0翻转
- Set_Pwm(1500,1500);
- break;
- case KEY1_PRES: //控制LED0翻转
- // Angle1_PID(angle1,2235);
- // Angle_PWM=Angle1_PID(angle1,2235);
- // Set_Pwm(Angle_PWM,Angle_PWM);
- delay_ms(10);
- break;
- case KEY2_PRES: //控制LED0翻转
- Turn_Off();
- break;
- // case KEY3_PRES: //控制LED1翻转
- // LED1=!LED1;
-
- }
- }
- }
- }
- // key=KEY_Scan(0); //得到键值
- // if(key)
- // {
- // switch(key)
- // {
- // case KEY1_PRES: //控制LED0翻转
- // Turn_Off();
- // break;
- // case KEY2_PRES: //控制LED0翻转
- // LED1=!LED1;
- // break;
- // case KEY3_PRES: //控制LED1翻转
- // LED1=!LED1;
- // break;
- // case KEY0_PRES: //同时控制LED0,LED1翻转
- // LED2=!LED2;
- // LED1=!LED1;
- // break;
复制代码
所有资料51hei提供下载:
F1小车.rar
(317.32 KB, 下载次数: 7)
|