自平衡小车控制(stc12+mpu6050程序)

2023-05-16

自平衡小车控制(stc12+mpu6050程序)

 
  1. /***********************************************************************
  2. // 两轮自平衡车最终版控制程序(6轴MPU6050+互补滤波+PWM电机)
  3. // 单片机STC12C5A60S2
  4. // 晶振:20M
  5. // 日期:2014.11.26 - ?
  6. ***********************************************************************/
  7.  
  8. #include <REG52.H>
  9. #include <math.h>     
  10. #include <stdio.h>   
  11. #include <INTRINS.H>
  12.  
  13. typedef unsigned char  uchar;
  14. typedef unsigned short ushort;
  15. typedef unsigned int   uint;
  16.  
  17. //******功能模块头文件*******
  18.  
  19. #include "DELAY.H"    //延时头文件
  20. //--------------------------------------------
  21. #include "STC_ISP.H"    //程序烧录头文件
  22. #include "SET_SERIAL.H"//串口头文件
  23.  
  24. #include "SET_PWM.H"//PWM头文件
  25. #include "MOTOR.H"//电机控制头文件
  26. #include "MPU6050.H"//MPU6050头文件
  27. //-----------------这些文件---------------------------
  28.  
  29.  
  30.  
  31. //******角度参数************
  32.  
  33. float Gyro_y;        //Y轴陀螺仪数据暂存
  34.  
  35. //--------------加速度和角度的转化------------------
  36.  
  37.  
  38. float Angle_gy;      //由角速度计算的倾斜角度
  39. //陀螺仪直接反应角度
  40.  
  41. float Accel_x;     //X轴加速度值暂存
  42. float Angle_ax;      //由加速度计算的倾斜角度 、
  43.  
  44. float Angle;         //小车最终倾斜角度
  45. uchar value; //角度正负极性标记
  46.  
  47. //******PWM参数*************
  48.  
  49. int   speed_mr; //右电机  转速//这个的测量---------转盘
  50. int   speed_ml; //左电机  转速
  51. int   PWM_R;         //右轮PWM值计算
  52. int   PWM_L;         //左轮PWM值计算
  53. float PWM;           //综合PWM计算
  54. float PWMI; //PWM积分值
  55.  
  56. //******电机参数*************
  57.  
  58. float speed_r_l;//电机转速
  59. float speed;        //电机转速滤波
  60. float position;    //位移
  61.  
  62. //******蓝牙遥控参数*************
  63. uchar remote_char;
  64. char  turn_need;
  65. char  speed_need;
  66.  
  67. //*********************************************************
  68. //定时器100Hz数据更新中断 T1定时器
  69. //*********************************************************
  70.  
  71. void Init_Timer1(void)//10毫秒@20MHz,100Hz刷新频率
  72. {
  73. AUXR &= 0xBF;//定时器时钟12T模式
  74. TMOD &= 0x0F;//设置定时器模式
  75. TMOD |= 0x10;//设置定时器模式
  76. TL1 = 0xE5;    //设置定时初值
  77. TH1 = 0xBE;    //设置定时初值
  78. TF1 = 0;    //清除TF1标志
  79. TR1 = 1;    //定时器1开始计时
  80. }
  81.  
  82.  
  83.  
  84. //*********************************************************
  85. //中断控制初始化
  86. //*********************************************************
  87.  
  88. void Init_Interr(void)
  89. {
  90. EA = 1;     //开总中断
  91.     EX0 = 1;    //开外部中断INT0
  92.     EX1 = 1;    //开外部中断INT1
  93.     IT0 = 1;    //下降沿触发
  94.     IT1 = 1;    //下降沿触发
  95. ET1 = 1;    //开定时器1中断
  96. }
  97.  
  98.  
  99.  
  100. //******卡尔曼参数************
  101.  
  102. float code Q_angle=0.001;  
  103. float code Q_gyro=0.003;
  104. float code R_angle=0.5;
  105. float code dt=0.01;                  //dt为kalman滤波器采样时间;
  106. char  code C_0 = 1;
  107. float xdata Q_bias, Angle_err;
  108. float xdata PCt_0, PCt_1, E;
  109. float xdata K_0, K_1, t_0, t_1;
  110. float xdata Pdot[4] ={0,0,0,0};
  111. float xdata PP[2][2] = { { 1, 0 },{ 0, 1 } };
  112.  
  113. //*********************************************************
  114. // 卡尔曼滤波
  115. //*********************************************************
  116.  
  117. //Kalman滤波,20MHz的处理时间约0.77ms;
  118.  
  119. void Kalman_Filter(float Accel,float Gyro)  // 滤波,输出标准的方波驱动电机
  120. {
  121. Angle+=(Gyro - Q_bias) * dt; //先验估计陀螺角度
  122.  
  123.  
  124. Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; // Pk-先验估计误差协方差的微分
  125.  
  126. Pdot[1]=- PP[1][1];
  127. Pdot[2]=- PP[1][1];
  128. Pdot[3]=Q_gyro;
  129.  
  130. PP[0][0] += Pdot[0] * dt;   // Pk-先验估计误差协方差微分的积分
  131. PP[0][1] += Pdot[1] * dt;   // =先验估计误差协方差
  132. PP[1][0] += Pdot[2] * dt;
  133. PP[1][1] += Pdot[3] * dt;
  134.  
  135. Angle_err = Accel - Angle;//zk-先验估计
  136.  
  137. PCt_0 = C_0 * PP[0][0];
  138. PCt_1 = C_0 * PP[1][0];
  139.  
  140. E = R_angle + C_0 * PCt_0;
  141.  
  142. K_0 = PCt_0 / E;
  143. K_1 = PCt_1 / E;
  144.  
  145. t_0 = PCt_0;
  146. t_1 = C_0 * PP[0][1];
  147.  
  148. PP[0][0] -= K_0 * t_0; //后验估计误差协方差
  149. PP[0][1] -= K_0 * t_1;
  150. PP[1][0] -= K_1 * t_0;
  151. PP[1][1] -= K_1 * t_1;
  152.  
  153. Angle+= K_0 * Angle_err; //后验估计
  154. Q_bias+= K_1 * Angle_err; //后验估计
  155. Gyro_y   = Gyro - Q_bias; //输出值(后验估计)的微分=角速度
  156.  
  157. }
  158.  
  159.  
  160.  
  161. //*********************************************************
  162. // 倾角计算(卡尔曼融合)
  163. //*********************************************************
  164.  
  165. void Angle_Calcu(void)
  166. {
  167. //------加速度--------------------------
  168.  
  169. //范围为2g时,换算关系:16384 LSB/g
  170. //角度较小时,x=sinx得到角度(弧度), deg = rad*180/3.14
  171. //因为x>=sinx,故乘以1.3适当放大
  172.  
  173. Accel_x  = GetData(ACCEL_XOUT_H);  //读取X轴加速度         存在ACCEL_XOUT_H 寄存器
  174. Angle_ax = (Accel_x - 1100) /16384;   //去除零点偏移,计算得到角度(弧度)
  175. Angle_ax = Angle_ax*1.2*180/3.14;     //弧度转换为度,
  176.  
  177.  
  178.     //-------角速度-------------------------
  179.  
  180. //范围为2000deg/s时,换算关系:16.4 LSB/(deg/s)
  181.  
  182. Gyro_y = GetData(GYRO_YOUT_H);      //静止时角速度Y轴输出为  【-30】 左右
  183. Gyro_y = -(Gyro_y + 30)/16.4;         //去除零点偏移,计算角速度值,  【负号为方向处理】
  184. //Angle_gy = Angle_gy + Gyro_y*0.01;  //角速度积分得到倾斜角度.
  185.  
  186.  
  187. //-------卡尔曼滤波融合-----------------------
  188.  
  189. Kalman_Filter(Angle_ax,Gyro_y);       //卡尔曼滤波计算倾角
  190.  
  191.  
  192. /*//-------互补滤波-----------------------
  193.  
  194. //补偿原理是取当前倾角和加速度获得倾角差值进行放大,然后与
  195.     //陀螺仪角速度叠加后再积分,从而使倾角最跟踪为加速度获得的角度
  196. //0.5为放大倍数,可调节补偿度;0.01为系统周期10ms
  197.  
  198. Angle = Angle + (((Angle_ax-Angle)*0.5 + Gyro_y)*0.01);*/
  199.   
  200. }  
  201.  
  202.  
  203.  
  204. //*********************************************************
  205. //电机转速和位移值计算
  206. //*********************************************************
  207.  
  208. void Psn_Calcu(void)
  209. {
  210.  
  211. speed_r_l =(speed_mr + speed_ml)*0.5;
  212. speed *= 0.7;//上一次的                  //车轮速度滤波
  213. speed += speed_r_l*0.3;
  214. position += speed;                  //积分得到位移
  215. position += speed_need;//加上蓝牙位移,等于总的移动
  216. if(position<-6000) position = -6000;
  217. if(position> 6000) position =  6000;
  218.  
  219.  
  220. }
  221.  
  222.  
  223. static float code Kp  = 9.0;       //PID参数
  224. static float code Kd  = 2.6;    //PID参数
  225. static float code Kpn = 0.01;      //PID参数
  226. static float code Ksp = 2.0;    //PID参数
  227.  
  228. //*********************************************************
  229. //电机PWM值计算
  230. //*********************************************************
  231.  
  232. void PWM_Calcu(void)
  233. {
  234.  
  235. if(Angle<-40||Angle>40)               //角度过大,关闭电机
  236. {  
  237.   CCAP0H = 0;
  238.       CCAP1H = 0;
  239.   return;
  240. }
  241. PWM  = Kp*Angle + Kd*Gyro_y;          //PID:角速度和角度
  242. PWM += Kpn*position + Ksp*speed;      //PID:速度和位置
  243. PWM_R = PWM + turn_need;
  244. PWM_L = PWM - turn_need;   //蓝牙的倾斜,
  245. PWM_Motor(PWM_L,PWM_R);
  246.  
  247. }
  248.  
  249.  
  250.  
  251.  
  252. //*********************************************************
  253. //手机蓝牙遥控
  254. //*********************************************************
  255.  
  256. void Bluetooth_Remote(void)
  257. {
  258.  
  259. remote_char = receive_char();   //接收蓝牙串口数据
  260.  
  261. if(remote_char ==0x02) speed_need = -80;   //前进
  262. else if(remote_char ==0x01) speed_need = 80;   //后退
  263.      else speed_need = 0;   //不动
  264.  
  265.     if(remote_char ==0x03) turn_need = 15;   //左转
  266. else if(remote_char ==0x04) turn_need = -15;   //右转
  267.      else turn_need = 0;   //不转
  268.  
  269. }
  270.  
  271.  
  272. /*=================================================================================*/
  273.  
  274. //*********************************************************
  275. //main
  276. //*********************************************************
  277. void main()
  278. {
  279.  
  280. delaynms(500);   //上电延时
  281. Init_PWM();       //PWM初始化
  282.     Init_Timer0();     //初始化定时器0,作为PWM时钟源
  283. Init_Timer1();     //初始化定时器1
  284. Init_Interr();     //中断初始化
  285. Init_Motor();   //电机控制初始化
  286. Init_BRT();   //串口初始化(独立波特率)
  287. InitMPU6050();     //初始化MPU6050
  288. delaynms(500);   
  289.  
  290. while(1)
  291. {
  292.    
  293. Bluetooth_Remote();
  294.  
  295. }
  296. }
  297.  
  298.  
  299. /*=================================================================================*/
  300.  
  301. //********timer1中断***********************
  302.  
  303. void Timer1_Update(void) interrupt 3
  304. {
  305.  
  306.    TL1 = 0xE5;    //设置定时初值10MS
  307.    TH1 = 0xBE;
  308.  
  309.    //STC_ISP();                    //程序下载
  310.    Angle_Calcu();                  //倾角计算
  311.    Psn_Calcu();                    //电机位移计算
  312.    PWM_Calcu();                    //计算PWM值
  313.  
  314.    speed_mr = speed_ml = 0;
  315.  
  316. }
  317.  
  318.  
  319. //********右电机中断***********************
  320.  
  321. void INT_L(void) interrupt 0
  322. {
  323.  
  324.    if(SPDL == 1)  { speed_ml++; } //左电机前进
  325.    else      { speed_ml--; } //左电机后退
  326.    LED = ~LED;
  327.  
  328. }
  329.  
  330.  
  331. //********左电机中断***********************
  332.  
  333. void INT_R(void) interrupt 2
  334. {
  335.  
  336.    if(SPDR == 1)  { speed_mr++; } //右电机前进
  337.    else      { speed_mr--; } //右电机后退
  338.    LED = ~LED;
  339.  
  340. }
复制代码

 
 
 

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-203198-1-1.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自平衡小车控制(stc12+mpu6050程序) 的相关文章

  • MPU6050里面还有一个温度传感器

    MPU6050里面还有一个温度传感器 xff0c 是不是因为这个那些飞控考虑恒温 xff1f http www makeru com cn video 16190 35379 html
  • MPU6050温度的计算公式

    在惯导融合的代码中常见计算MPU6050温度的公式 xff0c 如 xff1a temperature 61 36 53f 43 double GetData TEMP OUT H 340 0f 或者 Temp 61 36 53 43 Te
  • mpu6050角度滤波

    文章 xff1a https www cnblogs com we1238 articles 7562028 html 输入量 通过mup6050姿态传感器 xff0c 我们可以分别得到X Y Z轴三个方向的加速度和角速度分量 输出量 我们
  • 正点原子mpu6050数据读取失败问题

    如果下载他们官方的程序都读不出来的话 看看你买的是stm32f407的V3版本吗 xff1f 这个版本是只有磁力计的官方代码 你用V3板跑他们的mpu的代码就会读不出来 xff0c 那个mpu6050的代码是已经停产的V2板子的
  • MPU6050

    简介 xff1a MPU6050是InvenSense 公司的 MPU6050 作为主芯片 xff0c 能同时检测三轴加速度 三轴陀螺仪 三轴角速度 的运动数据以及温度数据 利用 MPU6050 芯片内部的 DMP 模块 xff08 Dig
  • MPU6050温度计算公式

    Tem为16位数据 Tem 43 12412 340 61 Tem 340 43 36 5 Tem每340对应1摄氏度 12412代表0摄氏度
  • MPU6050的一些问题及解决办法

    最近做的项目要用到MPU6050 xff0c 出现了以下这些问题 xff1a 当然 xff0c 也有一些奇怪的事 xff0c 我是在淘宝上买的现成的模块 xff0c 那个ADO无论接地还是高电平 xff0c MPU的地址都是用0xD0 xf
  • MPU6050 +STM32F411RCT6

    今天玩了一个MPU6050模块 xff0c 在这里跟大家分享一下 xff0c 希望对大家有所帮助 我用的控制板是我自己画图打板的 xff0c 使用的MCU是STM32F411RCT6 使用的MPU6050如下图 xff0c 在某宝上买的 M
  • arduino 自平衡小车3\对mpu6050获得的X轴角度和角速度进行卡尔曼滤波

    对mpu6050获得的X轴角度和角速度进行卡尔曼滤波 mpu6050得到的角度值有些值的偏差较大 xff0c 为了使平衡小车更加稳定 xff0c 需要对获得的角度进行优化 xff0c 使用 卡尔曼滤波 xff0c 代码如下 xff1a in
  • ROS读取MPU6050数据

    上一篇讲到使用I2C连接Jetson Nano和MPU6050并使用python读取 xff0c 本次基于roscpp连接读取IMU数据 RTIMULib RTIMULib是本次使用的IMU库 xff0c 支持多种常见的IMU模块 xff0
  • HAL库 MPU6050的使用

    HAL库 amp amp MPU6050 HAL库 MPU6050的使用 xff1a 今天在本教程中 xff0c 我们将使用STM32接口MPU6050 xff08 GY 521 xff09 加速度计陀螺仪 同时 xff0c 我将在PC上利
  • MAG02 IMU传感器模块替代MPU6050模块介绍

    MAG02模块内置TDK高精度6轴IMU 惯性测量单元 xff09 传感器芯片 xff0c 通过处理器读取传感器数据 xff0c 并经过内部复杂运算后通过串口输出加速度 xff0c 角速度 xff0c 角度等数据 xff0c 大大减轻了用户
  • 模块学习(二)——MPU6050

    去年电赛备赛期间 xff0c 学的STM32标准库 xff0c 那一整个繁琐直接给我劝退了 xff0c 当时学习MPU6050时就非常痛苦 xff0c 代码也看不懂 xff0c 无非抄来抄去 xff0c 然后就是编译 xff0c 改错 xf
  • stm32使用MPU6050读取温度值验证I2C

    通过MPU6050测温来进行I2C的验证学习 关于MPU6050寄存器相关可以参考https blog csdn net he yuan article details 76559569 I2C时序很多 xff0c 我是直接以原子I2C的程
  • MPU6050温度计算公式

    Tem为16位数据 Tem 43 12412 340 61 Tem 340 43 36 5 Tem每340对应1摄氏度 12412代表0摄氏度
  • MPU6050教程(转载)

    如果你想玩四轴 xff0c 想搞什么空中鼠标 xff0c 平衡车等待 xff0c 那么MPU6050真的是太强大了 xff0c 能做很多东西 但是论坛上MPU6050整个教学过程基本上是没有的 xff0c 资源共享 xff0c 不应该只在自
  • stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用

    最近应用到三轴姿态传感器 xff0c 因为之前有MPU6050 xff08 6轴传感器 xff0c 这是6轴的 xff09 xff0c 进行搭配使用 xff0c 通过三轴姿态传感器进行舵机的角度调整 内容来源学习正点原子的教程 xff09
  • Micropython——九轴传感器(MPU6050)的使用及算法(二)

    前言 xff1a 在上篇文章中 xff0c 简单地实现了九轴传感器 xff08 MPU6050 xff09 的获取加速度 角速度以及温度的数值 但是 xff0c 我们知道 xff0c 对于MPU6050来说 xff0c 其提供的数据会夹杂有
  • 【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪

    I2C练习 MPU6050简介 寄存器查询表格 STM32CubeMx配置 代码文件 mpu6050 h文件 mpu6050 c文件 main c文件 总结 MPU6050简介 MPU 6000 6050 为全球首例整合性6轴运动处理组件
  • MPU6050使用心得(简单分享一下)

    前言 选用MPU6050做 倾斜检测 功能 前期准备 开发板 正点原子STM32F103 精英版 STM32F103ZET6 模块 GY 521 MPU6050 其他 杜邦线若干 烧录线 FlyMcu Keil5 正点原子开发板配套的套件

随机推荐

  • docker 使用实践

    文章目录 准备环境安装运行配置环境使用镜像加速器修改 docker 目录翻墙设置代理限制容器 log 大小 操作命令基本命令容器网络网络模式容器连接外部外部连接容器容器互联 数据管理数据卷数据卷容器 挂载本机目录 镜像构建使用 docker
  • FreeRTOS 软定时器实现

    64 嵌入式 简述使用定时器 配置定时器服务任务创建 启动 停止定时器修改定时器获取定时器状态 定时器实现 数据结构 定时器控制块定时器管理链表命令队列 定时器服务任务 回调定时器处理节拍计数器溢出命令处理 参考 FreeRtos 简述 考
  • FreeRTOS 消息队列

    64 嵌入式 简述Queue 使用 创建一个消息队列发送消息 接受消息 Queue 实现 数据结构队列创建发送消息 任务中调用发送函数中断中调用发送函数 接收消息 参考 FreeRtos 简述 FreeRTOS 任务间通信方式有 消息通知
  • shell 当前工作目录的绝对路径

    64 Linux 命令脚本 编写脚本中 xff0c 需要获取执行脚本的绝对路径 xff0c 今天写脚本的时候不小心踩了个坑 xff0c 记录下 那个坑的脚本大概是这样的 xff1a span class hljs shebang bin b
  • 基于opentracing + jaeger 实现全链路追踪

    文章目录 链路追踪OpenTracingTrace 和 sapn Inject 和 Extract 操作 Sampling 采样 OpenTracing 多语言支持 链路追踪 当代互联网服务 xff0c 通常都是用复杂 xff0c 大规模分
  • STM32G030F6P6 CubeMX和keil5开发环境的搭建

    规格了解 封装 xff1a TSSOP 20内核 xff1a Arm 32 位 Cortex M0 43 CPU工作电源电压 xff1a 2 V to 3 6 VCPU频率 xff1a 64 MHzFlash存储器 xff1a 32KBRA
  • 卡尔曼滤波(KF)与扩展卡尔曼滤波(EKF)的一种理解思路及相应推导(1)

    前言 xff1a 从上个世纪卡尔曼滤波理论被提出 xff0c 卡尔曼滤波在控制论与信息论的连接上做出了卓越的贡献 为了得出准确的下一时刻状态真值 xff0c 我们常常使用卡尔曼滤波 扩展卡尔曼滤波 无迹卡尔曼滤波 粒子滤波等等方法 xff0
  • STM32工程文件组成结构

    STM32工程文件目录结构 以LED流水灯程序为例 1 CMSIS 内核驱动程序 包含c文件 xff0c ST公司官方提供的 xff0c 对arm内核和mcu系统的基础文件 xff0c 一般不做修改 2 LIB 内部功能的基本函数库 包含c
  • nvidia jetson xavier nx与agx xavier和tx2对比

    1 性能比AGX xavier低 xff0c 但体积更小 xff08 nx为70 x 45 mm xff0c AGX xavier为100 x 87 mm xff09 2 性能是TX2和jetson Nano的10倍 3 安装ubuntu系
  • 总结:单独标定IMU的工具包(kalibr_allan,imu_tk,imu_utils)

    目录 一 常用开源IMU标定工具包汇总 kalibr allan imu tk imu utils imu tk与imu utils的区别 二 使用kalibr allan计算imu误差 参考 xff1a 下载 xff1a 安装 xff1a
  • git使用总结

    Git使用总结 1 本地更新代码前忘记拉取 pull 最新代码 本地对代码进行了修改 xff0c 但是忘记拉取最新版本的代码 这时想要拉最新的代码时 xff0c git pull origin branch name xff0c 会提示你
  • matlab中im2bw函数的用法

    matlab中DIP工具箱函数im2bw使用阈值 xff08 threshold xff09 变换法把灰度图像 xff08 grayscale image xff09 转换成二值图像 所谓二值图像 xff0c 一般意义上是指只有纯黑 xff
  • 最优化方法总结:公式解、数值优化、求解思想

    机器学习的目标是给出一个模型 xff08 一般是映射函数 xff09 xff0c 然后定义对这个模型好坏的评价函数 xff08 目标函数 xff09 xff0c 求解目标函数的极大值或者极小值 xff0c 以确定模型的参数 xff0c 从而
  • AGV小车基础知识介绍

    AGV基础知识 一 AGV的基本概念二 AGV的基本结构硬件组成软件组成1 硬件结构2 单机结构3 主要类型4 主要引导方式介绍5 驱动方式介绍6 AGV的移载方式 三 AGV的控制系统1 AGV控制系统2 AGV安全系统3 激光导航控制系
  • ardupilot & PX4 RTK配置指南

    ardupilot amp PX4 RTK配置指南 随着无人机对于高精度位置需求越来越强烈 xff0c 同时也伴随着北斗三代导航系统正式服务全球 xff0c 国产的实时载波相位差分 xff08 RTK xff09 导航产品也正在以更优惠 更
  • 无人机ADS-B模块 (兼容Px4、ardupilot、极致飞控)拒绝黑飞,耗子尾汁!

    近年来 xff0c 无人机等低空飞行器成为很多玩家的新 玩具 xff0c 但是绝大多数飞行器都属于 黑飞 xff0c 就是没有民航管理部门的适航许可 也没有相关部门颁发的驾驶执照的 2018年2月7日 xff0c 河北省唐山市古冶区公安分局
  • RK3308 蓝牙接口测试

    BT相关接口 deviceio test bluetooth bt server open 蓝牙测试初始化 xff0c 执行蓝牙测试前 xff0c 先调用该接口 BLE的接收和数据请求回调函数的注册 注 xff1a BLE读数据是通过注册回
  • 无人机高精度导航系统GT08N——支持RTK、PPK 、双天线测向

    最近几年无人机市场可以说的上是非常火爆的 xff0c 无人机公司也是数不胜数 无人机的应用场合也是非常之多的 xff0c 农业 物流 安防 巡航 测绘 航拍等等都得到了非常好的应用 同时无人机市场也催生了许多的配套设备的发展 RTK xff
  • FreeRTOS操作系统如何设置的PendSV和SysTick优先级

    首先应该明确PendSV和SysTick的优先级应该设置为最低 xff0c 具体原因参见这一篇博客 PendSV功能 xff0c 为什么需要PendSV 设置优先级在函数port c中的xPortStartScheduler 函数中实现的
  • 自平衡小车控制(stc12+mpu6050程序)

    自平衡小车控制 xff08 stc12 43 mpu6050程序 xff09 两轮自平衡车最终版控制程序 xff08 6轴MPU6050 43 互补滤波 43 PWM电机 xff09 单片机STC12C5A60S2 晶振 xff1a 20M