PID算法程序 基于四轴飞行器 CPU: STM32F103CB2.4G: NRF24L01电子罗盘:HMC5883陀螺仪+加速度计:MPU-6050 固定的传感器通讯格式为:0X88+0XA1+0X1D+ACC XYZ+GYRO XYZ +MAG XYZ +ANGLE ROLL PITCH YAW + cyc_time +0x00 + 0x00 +0x00 注意,所有数据位int16格式,angle飞控端为float,发送时乘以100,上位机以int16格式接收,显示时再除以100 自定义
单片机源程序如下:
- /* Includes ------------------------------------------------------------------*/
- #include "config.h"
- uint8_t SYS_INIT_OK; //系统初始化完成标志
- uint32_t While1_Lasttime=0;//存储while循环的时间
- ////////////////////////////////////////////////////////////////////////////////
- void SYS_INIT(void);
- void LOOP(void);
- ////////////////////////////////////////////////////////////////////////////////
- int main(void)
- {
- SYS_INIT_OK=0;
- SYS_INIT();
- SYS_INIT_OK=1;
-
- IMU_CYCTIME = GET_NOWTIME(&While1_Lasttime);//更新两次读取时间间隔
- while (1)
- {
- LOOP();
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- void LOOP(void)
- {
- }
- ////////////////////////////////////////////////////////////////////////////////
- void SYS_INIT(void)
- {
- MOTO_INIT(); //马达初始化
- NVIC_INIT(); //中断初始化
- TIM3_INIT(); //延时函数初始化
- TIM2_INIT(); //用于监测系统
- LED_INIT(); //IO初始化
- LED4_OFF;
- // EXTI1_INIT(); //外部中断初始化,接nrf24l01 irq
- USART1_INIT(); //串口初始化
- i2cInit();
- SPI1_INIT();
- NRF24L01_INIT();
- SetRX_Mode();
- // EXTI_GenerateSWInterrupt(EXTI_Line1);//手动进入nrf24L01中断,防止开始时irq管脚就为低电平,无法进入下降沿中断
- MPU6050_INIT();
- MPU6050_INIT();
- SYSTICK_INIT();
- PID_INIT();
- }
复制代码
所有资料51hei提供下载:
四轴飞控源码FLY_CONTROL.7z
(417.34 KB, 下载次数: 27)
|