标题:
基于STM32F103的简易倒立摆KEIL5工程下载
[打印本页]
作者:
yymbyc
时间:
2018-6-26 11:40
标题:
基于STM32F103的简易倒立摆KEIL5工程下载
2013电子设计竞赛控制类题目
单片机源程序如下:
#include "sys.h"
int flag=0,key=0;
int Bias=0; //本次偏差
int Last_Bias=0; //上一次偏差
int angel,G0=0; //摆杆角度
int Encoderdata; //电机速度
//float Encoder_Least,Encoder=0;
//float Encoder_Integral;
int pwm; //pwm输出量
int main(void)
{
int i;
delay_init(); //延时初始化
uart_init(115200); //串口初始化为
LED_Init(); //初始化与LED连接的硬件接口
Balance_Motor_Init(); //电机控制端口初始化
KEY_Init(); //按键端口初始化
LCDx_Init(); //初始化LCD
Adc_Init(); //ADC初始化
TIM2_Base_Init(50); //10Khz的计数频率,计数到50为5ms
TIM4_PWM_Init(999,6); //72000000/(6*1000)=12Khz
Encoder_Init(); //TIM3 PA6 PA7
delay_ms(200); //=====延时等待稳定
POINT_COLOR=BLUE;
LCD_ShowString(60,110,200,16,16,"Encoder VAL:");
LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");
LCD_ShowString(100,190,200,16,16,"Press Key_x");
while(1)
{
LED2_REV;
delay_ms(100);
//angel=Get_Adc(ADC_Channel_1);
//Read_Encoder();
//LCD_ShowxNum(156,130,angel,4,16,0);
//LCD_ShowxNum(156,110,Encoderdata,4,16,0);
key=KEY_Scan(0);
if(key)
{
switch(key)
{
case WKUP_PRES: flag=4;break; //完成基本要求3和抗干扰
case KEY2_PRES: flag=3;break; //完成保持倒立旋转臂圆周
case KEY1_PRES: flag=2;break; //完成自起摆
case KEY0_PRES: flag=1;break; //完成基本要求1、2
}
}
if(flag==1) //按键1
{
for(i=0;i<3;i++)
{
Zheng(650);
delay_ms(400);
Fan(650);
delay_ms(400);}
for(i=0;i<2;i++)
{Zheng(800);
delay_ms(200);
Fan(800);
delay_ms(200);}
stop();
flag=0;
}
if(flag==2) //按键2
{
Zheng(700);
delay_ms(400);
Fan(650);
delay_ms(400);
Zheng(950);
delay_ms(300);
Fan(950);
delay_ms(200);
stop();
flag=4; //进入PID调节
}
if(flag==3) //按键3
{
G0=30;
flag=4; // 进入PID调节
}
}
}
void TIM2_IRQHandler(void) //TIM2中断
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断
Read_Encoder();
LCD_ShowxNum(156,110,Encoderdata,4,16,0);
//LED2_REV;
if(flag==4)
{
angel=Get_Adc(ADC_Channel_1)+G0; //更新摆杆状态
Bias=angel-3210; //本次偏差=adc值-平衡中值
pwm=26.0*Bias+8.0*(Bias-Last_Bias); //PD控制器
if(pwm > 0) //26 16
{
if(pwm>=1000)
{
pwm=1000;
}
Fan(pwm); //控制电机反转 逆时针
}
else
{
if(pwm<=-1000) //限制幅度
{
pwm=-1000;
}
pwm=-pwm;
Zheng(pwm); //控制电机正转 顺时针
}Last_Bias=Bias;
}
}
}
//encoder=Read_Encoder();
// Encoder_Least =encoder-0; //===获取最新速度偏差==测量速度-目标速度(此处为零)
// Encoder *= 0.7; //===一阶低通滤波器
// Encoder += Encoder_Least*0.3; //===一阶低通滤波器
// Encoder_Integral +=Encoder; //===积分出位移 积分时间:5ms
// if(Encoder_Integral>500) Encoder_Integral=500; //===积分限幅
// if(Encoder_Integral<-500) Encoder_Integral=-500;
复制代码
所有资料51hei提供下载:
简易倒立摆 最终版 - 副本.rar
(405.51 KB, 下载次数: 71)
2018-6-26 19:02 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1