省政协常委是什么级别| 唐氏宝宝是什么意思| 雍土念什么| eb病毒igg抗体阳性是什么意思| 寒窗是什么意思| 长疮是什么原因| 2022什么年| 虫至念什么| 总是嗳气是什么原因| acer是什么牌子的电脑| 财鱼是什么鱼| 耐受性是什么意思| 遗传物质的载体是什么| 儿童坐飞机需要什么证件| 黄褐斑是什么样的图片| 腊肉配什么菜炒好吃| 维生素c吃多了有什么危害| 肌肉抖动是什么原因| 什么是反流性食管炎| 合子是什么| 对数是什么意思| 义乌有什么大学| 鼠疫是由什么引起的| pls是什么意思| pe什么材质| 做梦代表什么生肖| 赫兹是什么意思| 钦此是什么意思| 蓝莓葡萄是什么品种| lp是什么的简称| 卤水是什么成分| 户主有什么权利| 补气血吃什么最好| 人外是什么意思| 拉黑一个人意味着什么| conch是什么牌子| 桑树枝煮水有什么功效| 孩子脾虚内热大便干吃什么药| 谷草转氨酶偏高是什么原因| 小孩嗓子疼吃什么药| ct与核磁共振有什么区别| 10万个为什么的作者| 梦到蜈蚣是什么意思| 58是什么意思| 兰台是什么意思| 黄脸婆是什么意思| 白头翁是什么鸟| 白菜属于什么科| 什么时候能测出怀孕| 打呼噜什么原因| 杀了神经的牙为什么还疼| 压疮用什么药最快能好| 生蚝和牡蛎有什么区别| 属羊的什么命| 心慌是什么原因引起的| 樱桃什么季节成熟| 什么是佛教什么是道教| 丰的部首是什么偏旁| 保守治疗是什么意思| afi是胎儿的什么意思| 肚子为什么会疼| 地贫是什么| 玉子是什么| 什么的怀抱| 补中益气丸治什么病| 海龟汤是什么| 足癣用什么药膏| 慢什么斯什么| 打胶原蛋白针有什么副作用吗| 梦见钓了好多鱼是什么意思| 不丹为什么不跟中国建交| 胃在什么地方| 牙龈出血吃什么药| 上位者是什么意思| 中观是什么意思| 水柔棉是什么面料| 内分泌紊乱有什么症状表现| 直肠壁增厚一般是什么情况| 放的屁很臭是什么原因| 猎奇是什么| nbc是什么意思| 舌尖有点麻是什么原因| 什么的形状| 社畜是什么意思| 窦道是什么意思| 日头是什么意思| 李子和什么不能一起吃| beam是什么意思| 案底是什么意思| 相依相偎是什么意思| 吃什么会放屁| 孱弱是什么意思| creative是什么意思| 电子证件照是什么| 吃什么抗衰老| 历经是什么意思| 肺结核是什么原因引起的| 单立人加吉念什么| .什么意思| 胎儿为什么会喜欢臀位| 尿隐血2十是什么原因| honor是什么牌子| 扼腕是什么意思| hg是什么元素| 润肠通便吃什么药| mpv什么意思| saa偏高说明什么| 鲁迅原名是什么| 五月十三是什么星座| 互联网是干什么的| 吃什么补肺养肺比较好| 牙疼吃什么止疼药| 止痛片吃多了有什么副作用| 手心发烫是什么原因| 户名是什么| 11月27号什么星座| 炭疽是什么病| 甘蔗什么时候成熟| 浆水是什么| 湿疹涂什么药| 徘徊是什么意思| 盆腔炎吃什么消炎药效果好| 梦见很多牛是什么兆头| 狗皮膏药什么意思| 什么什么不什么| 女人在什么时候最容易怀孕| 鼻尖出汗是什么原因| 尿毒症可以吃什么水果| 10月9号是什么星座| 肌酐高有什么危害| 不除外是什么意思| 查肝炎做什么检查项目| pubg是什么意思| 北豆腐是什么| 同事过生日送什么礼物| 怀孕了用排卵试纸测会显示什么| 大学辅导员是干什么的| 低压太低是什么原因| 乳腺疼挂什么科| 双氧奶是什么| 垚字是什么意思| 怀孕有什么现象| 什么动| 什么动物| 文盲是什么意思| 农历七月初七是什么节日| 目是什么意思| 97年属什么的生肖| 帕金森吃什么药最好| 交替是什么意思| 开是什么意思| 世界第八大奇迹是什么| 什么是自慰| 半身不遂的前兆是什么症状| 什么菜不能吃| 肾阳虚吃什么药最好最有效| 王力是什么字| 坐疮是什么样的图片| 形容高兴的词语有什么| 汽车抖动是什么原因| 鸟字旁的字大多和什么有关| 欧尼什么意思| 炸薯条用什么淀粉| 刮痧有什么作用| 谷草谷丙比值偏高代表什么| 萝卜干炒什么好吃| 申是什么意思| 5月份是什么星座| 甲沟炎是什么样子的| 蛇吐信子是什么意思| 多囊卵巢综合征吃什么药| 断裂是什么意思| 真丝衣服用什么洗最好| 心脏大是什么原因| 过敏性紫癜有什么症状| 15天来一次月经是什么原因| 眩晕挂号挂什么科| 石斛有什么功效和作用| 眼镜轴位是什么意思| 流产后吃什么药| 普外科是什么科| 口苦是什么毛病| 黄皮果什么时候成熟| 右边腰疼是什么原因| 占有欲是什么意思| 日本为什么投降| 小螃蟹吃什么食物| 长智齿是什么原因引起的| 尿白细胞十一是什么意思| 黑色的鸟是什么鸟| 衡水老白干是什么香型| 碳酸钙d3片什么时候吃最好| 屁臭是什么原因造成的| 什么原因导致缺钾| 第一次要注意什么| 手心发烧是什么原因| 大便带血是什么原因| 血氧低吃什么提高的快| 蝙蝠为什么倒挂着睡觉| 春运是什么意思| 69是什么意思| 牙齿打桩是什么意思| 两肺纹理增粗是什么意思| 知柏地黄丸有什么作用| 夏天结婚新郎穿什么衣服图片| 警惕是什么意思| 口臭为什么| 治飞蚊症用什么眼药水| 耳朵有回音是什么原因| 智齿什么时候长| 过誉是什么意思| 胃有问题挂什么科| 自相矛盾什么意思| 11月16日是什么星座| 枯木逢春什么意思| 微创手术是什么意思| 木冉读什么| 奥运会五环颜色分别代表什么| 一诺千金是什么意思| 右肺结节是什么意思| 欺世盗名是什么意思| 抑郁症吃的药叫什么| 胃不好的人吃什么好| 拉拉裤后面的胶片是做什么用的| 湿气太重了吃什么药| 凹是什么意思| 6代表什么意思| 偏光镜是什么意思| 每天坚持黄瓜敷脸有什么效果| 寅木代表什么| 检查肺部最好做什么检查| 借你吉言是什么意思| 水杨酸是什么| 干燥综合症挂什么科| 女人排卵是什么时候| 独占鳌头是什么意思| 七八年属什么| 什么是霉菌| 4朵玫瑰代表什么意思| 梦见老公怀孕什么预兆| 夏季适合喝什么茶| 什么是思维导图| 75c是什么罩杯| 三七粉有什么用处| 腿抽筋是什么原因引起的| 玉树临风什么意思| 三庭五眼是什么意思| 子宫内膜厚有什么影响| 来月经可以吃什么水果好| 讲师是什么职称| 一点点奶茶什么最好喝| 回笼是什么意思| 单位时间是什么意思| 冰心的原名叫什么| 桀是什么意思| 什么地画| 巾帼不让须眉是什么意思| 梦见妯娌是什么意思| 脑梗挂什么科| 肝斑一般在脸上的什么地方| 梨涡是什么意思| 刮痧和拔罐有什么区别| 养神经吃什么食物最好| 费心是什么意思| 百度
打印
[PIC32/SAM]

怀柔供电公司2017年第17周(4月24日-30日)停电...

[复制链接]
17127|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
这个帖子很详细地解释了平衡车的控制系统,从硬件架构到软件实现流程,再到安全与优化设计,非常全面。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3842

帖子

18

粉丝
百度