久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
完美的平衡車程序 卡爾曼濾波和PID及nrf24l01無線
[打印本頁]
作者:
feerom
時間:
2017-11-30 08:34
標題:
完美的平衡車程序 卡爾曼濾波和PID及nrf24l01無線
完美的平衡車程序,完整的代碼,有卡爾曼濾波和PID
0.png
(12.74 KB, 下載次數: 49)
下載附件
2017-12-1 01:40 上傳
單片機源程序如下:
/***********************************************
標題: mian.c
日期: 2013/12/27
版本:v1.0
MDK-ARM 版本: v4.12
ST 庫版本:v3.50
功能: 自平衡小車平衡及控制
說明:可結合上位機校正六軸的補償值,使用藍牙或者NRF24L01控制
*************************************************/
#include "stm32f10x.h"
#include "iic.h"
#include "timer.h"
#include "usart.h"
#include "24l01.h"
#include "mpu3050.h"
#include "adxl345.h"
#include "filter.h"
#include "calculate.h"
#include "usb_lib.h"
#include "usb_desc.h"
#include "usb_istr.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "usb_pwr.h"
#include <stdio.h>
#include <math.h>
u8 receive_data;
u8 flg_get_senor_data;
u8 out[35] ={0x5f, 0x60, 0};
static float angle, angle_dot, f_angle, f_angle_dot;
s16 temp;
s16 gx, gy, gz, ax ,ay, az, temperature;
s16 gx_offset, ax_offset, ay_offset, az_offset;
u8 tmp[2]={0};
#define USB
#define FILTER_COUNT 32
s16 gx_buf[FILTER_COUNT], ax_buf[FILTER_COUNT], ay_buf[FILTER_COUNT],az_buf[FILTER_COUNT];
/******************************************************************************/
void delay(u32 count) //延時函數
{
for(; count != 0; count--);
}
/*************************************************
名稱:void acc_filter(void)
功能:加速度計數據濾波
輸入參數:據濾波后的數據
輸出參數:無
返回值: 無
**************************************************/
void acc_filter(void)
{
u8 i;
s32 ax_sum = 0, ay_sum = 0, az_sum = 0;
for(i = 1 ; i < FILTER_COUNT; i++)
{
ax_buf[i - 1] = ax_buf[i];
ay_buf[i - 1] = ay_buf[i];
az_buf[i - 1] = az_buf[i];
}
ax_buf[FILTER_COUNT - 1] = ax;
ay_buf[FILTER_COUNT - 1] = ay;
az_buf[FILTER_COUNT - 1] = az;
for(i = 0 ; i < FILTER_COUNT; i++)
{
ax_sum += ax_buf[i];
ay_sum += ay_buf[i];
az_sum += az_buf[i];
}
ax = (s16)(ax_sum / FILTER_COUNT);
ay = (s16)(ay_sum / FILTER_COUNT);
az = (s16)(az_sum / FILTER_COUNT);
}
/*****************************************************************************/
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
#ifdef USB //usb接入
NVIC_InitTypeDef NVIC_InitStructure;
#endif
u8 j, i=0;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5); //blue led
#ifdef USB
usb_system_init();
#endif
//初始化
usart_init();
iic_init();
timer_init();
NRF24L01_Init(); //初始化NRF24L01
mpu3050_init();
adxl345_init();
motor_init();
LED2OFF;//確認關閉LED2
while(NRF24L01_Check())//檢測不到24L01
{
delay(3000);
LED2ON; //LED2常亮
}
RX_Mode(); //24L01接收模式
LED1ON;
while (1)
{
if(flg_get_senor_data) //TIM3觸發
{
flg_get_senor_data = 0;
#ifdef USB
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE; //USB通訊關閉
NVIC_Init(&NVIC_InitStructure);
#endif
//獲取六軸的原始值
mpu3050_get_data(&gx, &gy, &gz, &temperature);
adxl345_get_data(&ax, &ay ,&az);
#ifdef USB
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //USB通訊啟動
NVIC_Init(&NVIC_InitStructure);
#endif
acc_filter();
gx -= gx_offset; //gx補償校正
ax -= ax_offset; //ax補償校正
ay -= ay_offset; //ay補償校正
az -= az_offset; //az補償校正
angle_dot = gx * GYRO_SCALE; //+-2000 0.060975 °/LSB
angle = atan(ay / sqrt(ax * ax + az * az ));
angle = angle * 57.295780; //180/pi
kalman_filter(angle, angle_dot, &f_angle, &f_angle_dot);//卡爾曼濾波函數
if(tmp[0]==0){ receive_parameter(receive_data);}//藍牙控制
//---------------------------------------------------------------
if(NRF24L01_RxPacket(tmp)==0) //24L01控制
{
receive_parameter(tmp[1]);
LED1OFF;
}
//------------------------------------------------------------
pid(f_angle, f_angle_dot); //PID調節
#ifdef USB //USB上位機數據處理
temp = (s16)(f_angle * 100);
out[2] = (u8)(gx >> 8);
out[3] = (u8)(gx);
out[4] = (u8)(gy >> 8);
out[5] = (u8)(gy);
out[6] = (u8)(gz >> 8);
out[7] = (u8)(gz);
out[8] = (u8)(ax >> 8);
out[9] = (u8)(ax);
out[10] = (u8)(ay >> 8);
out[11] = (u8)(ay);
out[12] = (u8)(az >> 8);
out[13] = (u8)(az);
out[14] = (u8)(temp >> 8);
out[15] = (u8)(temp);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
代碼.7z
(698.94 KB, 下載次數: 119)
2022-12-13 04:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产伦精品一区二区三区四区
|
免费成人深夜夜行网站
|
成人网在线观看
|
国产做受网站
|
日韩精品大片
|
高hnp失禁3p小公主
|
欧美精品区
|
www.一级片
|
九九在线免费视频
|
欧美a级成人淫片免费看
|
久久九九99
|
美女一级片
|
三级在线看
|
亚洲黄色一级
|
午夜av在线播放
|
北岛玲在线
|
中文字幕第8页
|
国产精品成人国产乱一区
|
五月天在线观看
|
黄色高清网站
|
久久精品2
|
久久机热这里只有精品
|
欧美日日夜夜
|
日韩一区二区三区免费
|
丰满女人裸体淫交
|
色综合五月天
|
超碰国产在线
|
两性免费视频
|
国产三级午夜理伦三级
|
色爽
|
亚洲综合自拍
|
欧美激情五月
|
91狠狠干
|
成人午夜又粗又硬又大
|
www.黄色在线
|
国产精品视屏
|
亚洲国产成人在线
|
欧美综合在线视频
|
中文在线免费观看
|
欧美三级韩国三级日本三斤在线观看
|
日韩欧美高清
|