(最终版)(1) - 图文(8)
附录2:系统总原理图
36
附录3:单片机最小系统PCB图
附录4:两轮车主程序
#include
typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint;
//******功能模块头文件*******
#include \.H\ #include \#include \#include \#include \
#include \
//延时头文件
//MPU6050头文件 //PWM头文件
//串口头文件 //卡尔曼滤波头文件
//AD转换头文件
37
//******角度参数************
float Angle_gx; //由角速度计算的倾斜角度 float Accel_y; uchar value;
//X轴加速度值暂存
//角度正负极性标记
float Angle_ay; //由加速度计算的倾斜角度 float Angle; //小车最终倾斜角度 float Gyro_x; //Y轴陀螺仪数据暂存
//******PWM参数*************
int PWM_R; //右轮PWM值计算 int PWM_L; //左轮PWM值计算 float PWM; //综合PWM计算 float PWMI;
//PWM积分值
int speed_mr; int speed_ml; char turn_need=0; char speed_need;
//******电机参数*************
float speed_r_l; //电机转速 float speed; //电机转速滤波 float position;
//******定时器,外部中断初始化************* void InitTimer0(void) {
TMOD = TMOD|0x01; TH0 = 0x0B1; TL0 = 0x0E0; EA = 1; ET0 = 1; TR0 = 1; }
void Init_exint(void) {
IT1=1;
IT0=1; EX1=1; EX0=1;
//位移
float K_angle_AD,K_angle_dot_AD,K_position_AD,K_position_dot_AD;
//右电机转速 //左电机转速
38
}
//******角度,角速度处理函数********** void Angle_Calcu(void) {
//-------角速度------------------------- }
//********************************************************* //电机转速和位移值计算
//*********************************************************
void Psn_Calcu(void) {
speed_r_l =(speed_mr + speed_ml)*0.5; speed *= 0.7;
//车轮速度滤波
//积分得到位移
speed += speed_r_l*0.3; position += speed; position += speed_need;
if(position<-6000) position = -6000; if(position> 6000) position = 6000;
Kalman_Filter(Angle_ay,Gyro_x); //卡尔曼滤波计算倾角
Gyro_x = GetData(GYRO_XOUT_H); //静止时角速度Y轴输出为-30左右 Gyro_x =(Gyro_x-8) /16.4; //去除零点偏移,计算角速度值,负号为方向处理 //Angle_gy = Angle_gy + Gyro_y*0.01; //角速度积分得到倾斜角度.
//-------卡尔曼滤波融合-----------------------
//范围为2000deg/s时,换算关系:16.4 LSB/(deg/s) Accel_y = GetData(ACCEL_YOUT_H);
//读取X轴加速度
Angle_ay = (Accel_y - 1100) /16384; //去除零点偏移,计算得到角度(弧度) Angle_ay = Angle_ay*1.2*180/3.14; //弧度转换为度, //范围为2g时,换算关系:16384 LSB/g
//角度较小时,x=sinx得到角度(弧度), deg = rad*180/3.14 //因为x>=sinx,故乘以1.3适当放大 //------加速度--------------------------
39
}
//********************************************************* //电机PWM值计算
//*********************************************************
static float code Kp = 9.0; //PID参数 static float code Kd = 2.6; //PID参数 static float code Kpn = 0.01; //PID参数 static float code Ksp = 2.0; //PID参数
void PWM_Calcu(void) {
if(Angle<-40||Angle>40) //角度过大,关闭电机 {
CCAP0H = 0; return; }
CCAP1H = 0;
PWM = Kp*Angle*K_angle_AD + Kd*Gyro_x*K_angle_dot_AD; //PID:角速度和角度 PWM += Kpn*position*K_position_AD + Ksp*speed*K_position_dot_AD; //PID:速度和位置 PWM_R = PWM - turn_need; PWM_L = -PWM - turn_need; PWM_output(PWM_L,PWM_R); }
//******主函数************* void main() {
InitMPU6050(); //初始化MPU6050 InitTimer0(); Init_exint(); serial_init(); AD_init(); PWM_init(); while(1) {
Angle_Calcu();
Psn_Calcu(); //电机位移计算 PWM_Calcu();
delaynms(500);
40
}
}
Sendstring(\ \Sendstring(\ \Sendstring(\Put_Ser_Dis(Gyro_x); Sendstring(\Sendstring(\Put_Ser_Dis(PWM); Sendstring(\Senddata(0x0d); Senddata(0x0a);
Put_Ser_Dis(Angle_ay);
//******定时器中断************* void Timer0Interrupt(void) interrupt 1 {
TH0 = 0x0B1; TL0 = 0x0E0;
speed_mr = speed_ml = 0; }
//********左电机中断*********************** void INT_L(void) interrupt 0 {
if(RA == 1) { speed_ml++; } else }
//********右电机中断***********************
void INT_R(void) interrupt 2 {
if(RB == 1) { speed_mr++; } else }
//右电机前进
//右电机后退
{ speed_mr--; }
//左电机前进 //左电机后退
{ speed_ml--; }
K_angle_AD=AD_work(0)/6.0; K_angle_dot_AD=AD_work(1)/6.0; K_position_AD=AD_work(6)/6.0; K_position_dot_AD=AD_work(7)/6.0;
//add your code here!
41
…… 此处隐藏:1635字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




