资源简介
本工程是基于51单片机,里面包含PWM,PID,卡尔曼滤波等程序资料,程序是本人课程设计写的,非常适合新手学习。

代码片段和文件信息
#include “STC12C5A60S2.h“
#include “IIC.h“
#include “kaermanlvbo.h“
#include “MPU6050.h“
#include “DIANJI.h“
#define uint unsigned int
#define uchar unsigned char
int speed_mr; //右电机转速
int speed_ml; //左电机转速
int PWM_R; //右轮PWM值计算
int PWM_L; //左轮PWM值计算
float PWM; //综合PWM计算
float PWMI; //PWM积分值
float speed_r_l; //电机转速
float speed; //电机转速滤波
float position; //位移
uchar t=0;
void delay(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Init_Timer1(void) //10毫秒@12MHz100Hz刷新频率
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD&=0x0f;
TMOD|=0x10; //设置定时器模式
TL1 = 0xF0; //设置定时初值
TH1 = 0xD8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
void Init_Interr(void)
{
EA = 1; //开总中断
EX0 = 1; //开外部中断INT0
EX1 = 1; //开外部中断INT1
IT0 = 1; //下降沿触发
IT1 = 1; //下降沿触发
ET1 = 1; //开定时器1中断
}
void Psn_Calcu(void) //电机转速和位移值计算
{
speed_r_l =(speed_mr + speed_ml)*0.5;
speed *= 0.7; //车轮速度滤波
speed += speed_r_l*0.3;
position += speed; //积分得到位移
if(position<-6000) position = -6000;
if(position> 6000) position = 6000;
}
static float code Kp = 9; //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) //电机PWM值计算
{
if(angle<-40||angle>40) //角度过大,关闭电机
{
CCAP0H = 0;
CCAP1H = 0;
return;
}
PWM = Kp*angle + Kd*gyro_y; //PID:MPU6050角速度和角度
PWM += Kpn*position + Ksp*speed; //PID:电机速度和位置
PWM_R = PWM;
PWM_L = PWM;
pwm_dianji(PWM_LPWM_R);
}
void main()
{
delay(500); //上电延时
init_pwm(); //PWM初始化
init_timer0(); //初始化定时器0,作为PWM时钟源
Init_Timer1(); //初始化定时器1
Init_Interr(); //中断初始化
init_dianji(); //电机控制初始化
init_mpu6050();
delay(500);
while(1)
{
}
}
//********timer1中断***********************
void Timer1_Update(void) interrupt 3
{
TL1 = 0xF0; //设置定时初值 10ms
TH1 = 0xD8; //设置定时初值
angle_calcu(); //倾角计算
Psn_Calcu(); //电机位移计算
PWM_Calcu(); //计算PWM值
speed_mr = speed_ml = 0;
}
//********右电机中断***********************
void INT_L(void) interrupt 0
{
if(SPDL == 1) { speed_ml++; } //左电机前进
else { speed_ml--; } //左电机后退
}
//********左电机中断***********************
void INT_R(void) interrupt 2
{
if(SPDR == 1) { speed_mr++; } //右电机前进
else { speed_mr--; } //右电机后退
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-01-19 18:22 小车平衡总程序\
文件 647 2015-06-13 15:51 小车平衡总程序\DIANJI.h
文件 667 2015-05-27 20:55 小车平衡总程序\DINGYI.h
文件 1632 2015-05-31 11:17 小车平衡总程序\IIC.h
文件 1186 2015-05-27 19:56 小车平衡总程序\LCD1206.h
文件 1201 2015-05-31 15:20 小车平衡总程序\MPU6050.h
文件 499 2015-06-07 14:11 小车平衡总程序\PWM.h
文件 17735 2015-05-20 15:19 小车平衡总程序\STC12C5A60S2.h
文件 574 2015-05-31 08:18 小车平衡总程序\init.h
文件 1551 2015-06-13 15:48 小车平衡总程序\kaermanlvbo.h
文件 25630 2015-06-13 15:51 小车平衡总程序\小车平衡总程序
文件 6485 2015-06-13 15:51 小车平衡总程序\小车平衡总程序.LST
文件 28326 2015-06-13 15:51 小车平衡总程序\小车平衡总程序.M51
文件 30316 2015-06-13 15:51 小车平衡总程序\小车平衡总程序.OBJ
文件 2948 2015-06-13 15:48 小车平衡总程序\小车平衡总程序.c
文件 10713 2015-06-13 15:51 小车平衡总程序\小车平衡总程序.hex
文件 60 2015-06-13 15:51 小车平衡总程序\小车平衡总程序.lnp
文件 0 2016-01-19 18:22 小车平衡总程序\小车平衡总程序.plg
文件 74516 2016-01-19 18:22 小车平衡总程序\小车平衡总程序.uvgui.huahui
文件 74338 2015-05-31 08:49 小车平衡总程序\小车平衡总程序.uvgui_huahui.bak
文件 8358 2016-01-19 18:22 小车平衡总程序\小车平衡总程序.uvopt
文件 14495 2016-01-19 18:22 小车平衡总程序\小车平衡总程序.uvproj
文件 58852 2015-06-13 15:51 小车平衡总程序\小车平衡总程序_uvopt.bak
文件 14491 2015-05-31 08:20 小车平衡总程序\小车平衡总程序_uvproj.bak
- 上一篇:安卓智能语音助手源代码
- 下一篇:用labview写的CRC校验
相关资源
- 程序员专用字体YaHei.Consolas.1.11b42517
- scratch3.0 源程序(说相声)
- 欧姆龙CP1系列单轴定位PLC程序.cxp
- SVR算法程序可运行
- STC8951系列单片机中方指南
- labview编程软件滤波器以及编写程序设
- 电力系统潮流计算程序集合
- 仿知乎界面小程序源代码
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- STM32蓝牙和串口程序
- elantech触控板驱动程序 v13.6.11 官方最
- 根据硬件ID和程序ID生成注册码
- Rtx51_tiny_RTOS中文版.pdf
- 用python编写的移动彩信的发送程序
- TCL-S1916 ,1924交换机管理程序
- 51单片机PWM程序,占空比、周期可调整
- 嵌入式图形界面MiniGUI的示例程序9例
- 数字频率合成dds正弦波基于FPGA的DDS产
- 28335CAN调试程序
- 导线测量平差程序 很实用
- 51单片机多功能自行车测速仪
- USB转串口驱动,FT232R驱动程序,最新
- 改进的BP神经网络算法
- 通风网络解算程序 fortran90
- proteus仿真 AT89C51输出各种波形
- 编写简单的RMI程序 多线程web 服务器
- 图论软件包(图论里的程序)
- 00
评论
共有 条评论