大雄宝殿供奉的是什么佛| 肺结核传染途径是什么| 九十岁老人称什么| 植物神经功能紊乱吃什么药最好| 九寨沟属于什么市| 碱性磷酸酶是什么| 逾越节是什么意思| 送枕头代表什么意思| 平均血小板体积偏低是什么原因| 供奉观音菩萨有什么讲究| 头晕头疼挂什么科| 猪蛋是什么| 胰腺炎能吃什么| 胎盘宫底后壁是什么意思| 牙周康又叫什么名字| 鹿茸是什么| 打饱嗝是什么原因| 利涉大川是什么意思| 庹是什么意思| 什么时候血压最高| 休闲裤配什么鞋子好看| 儿童语言迟缓挂什么科| 异地结婚登记需要什么证件| 咽喉炎用什么药| 向日葵代表什么象征意义| 唯字五行属什么| 女生真空是什么意思| 叶公好龙的寓意是什么| 巡礼是什么意思| 什么时候需要打破伤风针| 解脲脲原体阳性是什么| 不怀孕需要做什么检查项目| 梦见大房子是什么预兆| 甲减饮食需要注意什么| 旗舰机是什么意思| 微波炉蒸鸡蛋羹几分钟用什么火| 又字加一笔是什么字| 郭敬明为什么叫小四| 速干裤是什么面料| 常吃猪油有什么好处和坏处| 内服什么可以美白全身| borel手表是什么牌子| 体香是什么味道| 全是什么意思| 端午节有什么习俗| 红参对子宫有什么作用| 什么是继发性肺结核| 贝贝是什么意思| 什么姿势最深| 什么菜补血| 吃鸡什么意思| 什么原因导致缺钾| 胃难受吃什么药| 左侧小腹疼是什么原因| 涵养是什么意思| ed患者是什么意思| 吃什么能消除脂肪瘤| 308是什么意思| 男人有泪痣代表什么| 频繁什么意思| 手足口病吃什么药好得快| 红玛瑙五行属什么| fasola是什么品牌| winbond是什么品牌| 血清胰岛素测定查什么| 11月8日什么星座| fte是什么意思| hz是什么意思| 曷是什么意思| 低血钾是什么病| 咳嗽吃什么好得快| 铁蛋白低吃什么可以补| 匙仁是牛的什么部位| 孙尚香字什么| 跳蛋有什么用| 乌龟爬进家暗示什么| 为什么小腹总是胀痛| 什么是新鲜感| 不宜是什么意思| 对节木是什么树| 冬日暖阳是什么意思| 强迫症有什么症状| 云南是什么民族| 什么东西只进不出| 黄仙是什么仙| 女性尿检能查出什么病| 舒肝健胃丸治什么病| 性早熟是什么意思| 六月初六是什么日子| 解脲支原体是什么| 南枝是什么意思| 手术室为什么在三楼| 吃米饭配什么菜好吃| 下巴长痘痘用什么药| 松花粉有什么功效| 1964年属什么生肖| 鼻炎吃什么消炎药效果最好| 什么手组词| 热惊厥病发是什么症状| 林黛玉和贾宝玉是什么关系| 腹胀是什么原因| 做面条用什么面粉| 绿茶婊什么意思| 脑血管堵塞吃什么药最好| 和解少阳是什么意思| 南京为什么那么多梧桐树| 丧偶式婚姻是什么意思| 胃胀气吃什么食物好| 胆囊炎要注意些什么| 冬天什么| 脖子粗是什么原因| ft是什么| 金庸原名叫什么| 做什么生意好赚钱| 11.23是什么星座| 副处是什么级别| 牙龈有点发黑是什么原因| 梦见明星是什么预兆| 后羿和嫦娥是什么关系| 丝瓜有什么功效| 2010年是什么年| 狐臭是什么人种的后代| 什么是应激反应| 低钾血症挂什么科| 女性胆固醇高吃什么| 六腑指的是什么| 嘴子是什么意思| 话说多了声音嘶哑是什么原因| 中性粒细胞偏低是什么原因| 老年人血压忽高忽低是什么原因| 大德是什么意思| 织女是什么生肖| 人出汗多是什么原因| 间奏是什么意思| 6月21号什么星座| 中国什么时候打仗| 有酒窝的女人代表什么| 夜宵吃什么好| 眼睛oct检查主要检查什么| 便秘挂什么科| 弱水三千是什么意思| 复方药是什么意思| 青什么黄什么| 来姨妈头疼是什么原因| 1103是什么星座| 子宫位于腹部什么位置| 脸颊两侧长痘痘什么原因| 什么是老赖| 胆囊结石吃什么食物好| 阿司匹林什么时候吃最好| 如法炮制是什么意思| 瘘管是什么症状| 什么食物含磷高| 梦到捡金子首饰是什么意思| 什么充电宝可以带上飞机| 六月是什么季节| 腱鞘炎有什么治疗方法| 经期可以吃什么水果| 芭乐是什么季节的水果| 弥漫性脂肪肝什么意思| 乙肝表面抗体阳性什么意思| 玻璃瓶属于什么垃圾| 9月3日是什么星座的| 什么时候浇花最好| cg是什么| 焦糖色裤子配什么颜色上衣| 小儿肠炎吃什么药最好| 做什么运动可以瘦腿| 胃炎吃什么药效果好| kt是什么意思| es什么意思| 毛孔粗大做什么医美| 急性荨麻疹是什么原因引起的| 小孩白细胞高是什么原因| 大阪烧是什么| 冬至为什么烧纸| hr是什么牌子| 白无常叫什么名字| 妇联是干什么的| 尼泊尔是什么人种| 海兔是什么| 灵魂契合是什么意思| 弦子为什么嫁给李茂| 脖子凉是什么原因| 脑疝是什么意思| 诸多是什么意思| 9月28号是什么星座| 桃子是什么形状| 白内障是什么原因引起的| 早上咳嗽是什么原因| 乙状结肠炎吃什么药| 小便多是什么原因| 4月20日是什么星座| 双生是什么意思| 月经正常颜色是什么色| 29周岁属什么生肖| 牙齿为什么发黄| 牙龈出血缺什么维生素| 苏铁属于什么植物| pashmina是什么面料| 维生素b吃什么| 结肠ca是什么意思| 骶椎腰化什么意思| pvs是什么意思| 医院的特需门诊是什么意思| 限高是什么意思| 梦见一个人代表什么| 总是嗳气是什么原因| 血压的低压高是什么原因| 俗不可耐什么意思| 乳头胀痛什么原因| 生态棉是什么面料| 血压高会有什么症状| 什么叫三观不正| 什么是对数| loaf是什么意思| 蜘蛛侠叫什么名字| 角膜炎吃什么药| 残联是什么性质的单位| 菜板什么木材最好| 诬赖是什么意思| 月亮杯是什么东西| 磷脂是什么东西| 什么行业最赚钱投资小| 脾胃虚吃什么| 血尿酸偏高是什么原因| 晚上喝牛奶有什么好处和坏处| 重水是什么水| 眼镜pd是什么意思| 小月子能吃什么水果| 石英表是什么意思| 西洋参不适合什么人吃| 溜肩是什么意思| 二级乙等医院什么档次| 纯色是什么颜色| 感冒吃什么食物好得快| ikbc是什么牌子| 什么叫静脉曲张| 怀孕该吃什么补充营养| 三个子念什么| iga是什么意思| 七月上旬是什么时候| 乾是什么生肖| 太多的借口太多的理由是什么歌| 预警是什么意思| 皮肤黄是什么原因引起的| 倾巢出动是什么意思| 低血压适合吃什么食物| 蒂芙尼蓝是什么颜色| 云是由什么组成的| 圣诞节送孩子什么礼物好| 疱疹是一种什么病| 尿素偏低是什么原因| 慢性肠胃炎吃什么药| 市公安局局长什么级别| 眼睛痒流泪是什么原因| 违法是什么意思| 酪蛋白是什么| 伤口发炎吃什么消炎药| 捡到狗狗代表什么预兆| 葡萄的茎属于什么茎| 脑鸣是什么原因引起的| 雪燕是什么东西| 九五年属什么| 百度
打印
[复制链接]
17201|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dongnanxibei|  楼主 | 2025-6-24 13:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
平衡车控制系统,其平衡实现依赖于高实时性传感器采样、高效姿态解算算法、精准电机控制三者的闭环协作。
一、硬件架构

模块
关键组件
功能说明
主控MCUPIC32MZ EF系列(带FPU和DSP指令)100MHz+主频,硬件浮点加速,实时处理传感器数据
姿态传感器MPU6050(六轴IMU)集成陀螺仪+加速度计,I2C通信
电机驱动MCPWM模块 + DRV8301驱动芯片生成6路PWM,驱动无刷电机
编码器接口QEI模块(正交编码器接口)实时读取电机转速/位置
通信接口UART/USB(调试) + CAN(扩展)数据传输与参数校准

二、软件实现流程
1. 传感器数据采集与融合

// 使用Microchip Harmony框架配置I2C读取MPU6050
void IMU_ReadData(void) {
    uint8_t raw_data[14];
    I2C_Read(MPU6050_ADDR, ACCEL_XOUT_H, raw_data, 14); // 读取14字节原始数据

    // 解析加速度计数据 (范围: ±2g)
    float accel_x = (int16_t)((raw_data[0]<<8) | raw_data[1]) / 16384.0f;
    float accel_z = (int16_t)((raw_data[4]<<8) | raw_data[5]) / 16384.0f; // Z轴垂直重力

    // 解析陀螺仪数据 (范围: ±250°/s)
    float gyro_y = (int16_t)((raw_data[8]<<8) | raw_data[9]) / 131.0f; // Y轴角速度(俯仰)

    // 互补滤波融合
    float dt = 0.01f; // 10ms采样周期
    static float pitch_angle = 0.0f;
    float accel_pitch = atan2(accel_x, accel_z) * 180/M_PI; // 加速度计计算倾角
    pitch_angle = 0.98f * (pitch_angle + gyro_y * dt) + 0.02f * accel_pitch;
}
关键点:利用硬件FPU加速浮点运算,互补滤波权重(0.98/0.02)需实测调整。

2. 双环控制算法实现


// 直立环(PD控制)
float Balance_Control(float pitch, float gyro_y) {
    float Kp = -12.0f;   // 比例系数(负号表示反向调节)
    float Kd = -0.25f;   // 微分系数
    return Kp * pitch + Kd * gyro_y; // 输出电机基础控制量
}

// 速度环(PI控制 + 积分抗饱和)
float Velocity_Control(float target_speed, float current_speed) {
    static float integral = 0;
    float Kp = 0.8f, Ki = 0.05f;
    float error = target_speed - current_speed;
   
    // 积分限幅 (±100)
    if (fabs(error) < 50) integral += error;
    else integral = 0;
   
    return Kp * error + Ki * integral; // 输出速度补偿量
}

// 总控制量合成
void Motor_Output(void) {
    float pitch = IMU_GetPitch();       // 获取当前俯仰角
    float gyro_y = IMU_GetGyroY();      // 获取Y轴角速度
    float speed = QEI_GetSpeed();       // 编码器获取当前车速
   
    float balance_out = Balance_Control(pitch, gyro_y);
    float speed_out = Velocity_Control(0, speed); // 目标速度=0(平衡点)
   
    float total_out = balance_out + speed_out;
   
    // 转换为PWM占空比(范围:-1000~+1000)
    int16_t pwm = (int16_t)(total_out * 10);
    MCPWM_SetDutyCycle(MOTOR_L, pwm);   // 左电机输出
    MCPWM_SetDutyCycle(MOTOR_R, pwm);   // 右电机输出
}
参数整定技巧:

先调直立环:增大 Kp 直至车身能勉强站立,再增大 Kd 抑制振荡
后调速度环:从较小 Ki 开始,避免积分累积导致失控


3. 电机精准驱动(利用MCPWM模块)

// 配置MCPWM(中心对齐模式,死区时间保护)
void PWM_Init(void) {
    MCPWM_ConfigTimeBase(MCPWM_MODULE1, MCPWM_TIMER2,
                         10000,          // PWM频率10kHz
                         MCPWM_TIME_BASE_CLOCK_PBCLK,
                         MCPWM_TIME_BASE_MODE_CONTINUOUS);
   
    // 设置死区时间(防MOSFET直通)
    MCPWM_ChannelDeadTimeSetup(MCPWM_CHANNEL1, 100, 100); // 100ns死区
}

// 更新PWM输出
void MCPWM_SetDutyCycle(MCPWM_CHANNEL ch, int16_t duty) {
    duty = constrain(duty, -1000, 1000); // 限幅
    MCPWM_ChannelPrimaryDutySet(ch, abs(duty)); // 设置占空比
    MCPWM_ChannelOutputPolaritySet(ch, (duty >= 0) ? MCPWM_OUT_POL_ACTIVE_HIGH : MCPWM_OUT_POL_ACTIVE_LOW); // 设置方向
}


三、Microchip方案优势
硬件加速

PIC32MZ的硬件FPU/DSP指令加速矩阵运算(如卡尔曼滤波)。

专用外设

MCPWM模块支持互补PWM、死区插入、故障保护,简化电机驱动设计。

QEI模块自动解码编码器信号,减轻CPU负担。

实时性保障

通过中断优先级配置,确保IMU数据读取(1kHz)> 控制计算(500Hz)> PWM更新(10kHz)的时序链。


四、安全与优化设计
故障保护

// 硬件看门狗+软件超限保护
if (fabs(pitch) > 30.0f) {  // 倾角过大
  MCPWM_ChannelFaultStateSet(MCPWM_CHANNEL1, MCPWM_FAULT_DISABLE); // 立即关闭电机
  Watchdog_Reset();          // 触发看门狗复位
}
低功耗模式

待机时切换至Sleep模式,IMU中断唤醒(电流 < 1mA)。

沙发
dongnanxibei|  楼主 | 2025-6-24 13:51 | 只看该作者
调试工具链
MPLAB X IDE + Harmony框架:图形化配置外设,自动生成驱动代码。

实时数据可视化:通过UART输出姿态角/电机PWM数据,用MPLAB Data Visualizer绘制波形。
printf("Pitch:%.2f,PWM:%d\n", pitch_angle, pwm); // 串口调试输出
板凳
dongnanxibei|  楼主 | 2025-6-24 13:53 | 只看该作者
关键挑战与解决[size=16.002px]
问题
Microchip方案对策
传感器噪声干扰硬件I2C滤波 + 软件卡尔曼滤波
电机响应延迟MCPWM硬件触发ADC采样,实现同步控制
电池电压波动影响PWM精度内置ADC实时监测电压,动态补偿PWM占空比

微芯单片机通过 “传感器硬件接口优化 + 实时控制算法 + 专用电机外设” 三位一体实现平衡控制,其核心代码量可控制在200行以内(不含底层驱动),响应延迟 < 2ms,满足商业平衡车的性能需求。
地板
hp860629| | 2025-7-5 09:11 | 只看该作者
这个算法很重要
5
桃花落满山前| | 2025-7-23 11:54 | 只看该作者
浅浅的回答一下
[color=rgba(0, 0, 0, 0.85)]平衡车通过陀螺仪和加速度计检测姿态,单片机计算偏差后驱动电机调整转速,利用 PID 算法实时控制两轮力矩,抵消倾倒力矩实现平衡。
6
cooldog123pp| | 2025-7-24 17:17 | 只看该作者
实现平衡 滤波算法和PID算法两大核心以及相关传感器都是必不可少
7
魔法森林精灵| | 2025-7-25 19:19 | 只看该作者
这个帖子解释了平衡车的工作原理,从硬件到软件实现,非常详细。尤其是双环控制算法的实现,对于理解平衡车的动态平衡控制非常有帮助。
8
xixi2017| | 2025-7-26 11:52 | 只看该作者
PID是个好东西。
9
yiyigirl2014| | 2025-7-29 19:33 | 只看该作者
检测不平衡,那么刷新率是多少呢?
10
魔法森林精灵| | 2025-7-30 08:53 | 只看该作者
这个帖子很详细地解释了平衡车的控制系统,从硬件架构到软件实现流程,再到安全与优化设计,非常全面。
11
uiint| | 2025-8-4 10:18 | 只看该作者
平衡车通常配备陀螺仪和加速度计,用于测量车身的角速度和加速度。这些传感器能够提供关于车身倾斜角度和运动状态的实时数据。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3842

帖子

18

粉丝
百度