巴甫洛夫的狗比喻什么| 月经后一周又出血是什么原因| 月经失调是什么意思| 男人左眼跳是什么预兆| 中国最厉害的武器是什么| 什么是核素| 气虚吃什么中成药| 善太息是什么意思| 三什么九什么成语| 体能是什么| 血象高是什么原因| 为什么男生喜欢女生叫爸爸| 毛遂自荐是什么意思| 蟑螂屎长什么样| 肚子疼吃什么药最有效| 烦恼千千是什么生肖| 学考是什么意思| 跟腱炎什么症状| 喉咙发炎吃什么食物好| 双侧卵巢多卵泡是什么意思| 脚心有痣代表什么意思| 内招是什么意思| 鹦鹉代表什么生肖| 助听器什么牌子的好| 吃什么肉不会胖又减肥| 乳腺结节是什么症状| 描述是什么意思| 九零年属什么生肖| 尿路感染检查什么项目| 晚安安是什么意思| 送爸爸什么礼物最实用| 身骑白马是什么方言| 占有欲强是什么意思| 垂体是什么意思| 小孩抽多动症吃什么药最好| 多巴胺分泌是什么意思| 不可开交是什么意思| 11点是什么时辰| 子不问卜自惹祸殃什么意思| 下午右眼跳是什么预兆| hpv是什么| 清洁度iv是什么意思| 烈女怕缠郎是什么意思| 白是什么结构的字| pt950是什么金| 尿道感染要吃什么药| 预防脑出血吃什么药| 柠檬有什么作用| 为什么大便是黑色的| 试纸一深一浅说明什么| 螚什么意思| 年上和年下是什么意思| 植物神经功能紊乱吃什么药最好| 空心菜长什么样| 请问支气管炎吃什么药最有效| 怀孕有褐色分泌物是什么原因| 节肢动物用什么呼吸| 黄体破裂什么意思| 墨西哥说什么语言| 开塞露是干什么用的| 水杯什么材质的好| 安踏高端品牌叫什么| 11.9是什么星座| 三月阳春好风光是什么生肖| 抓鱼的鸟叫什么| 什么牌子的奶粉好| 养肝护肝吃什么食物好| 变质是什么意思| 子宫内膜增生有什么症状| 霸王硬上弓什么意思| 颈部淋巴结挂什么科| 尿道炎看什么科室好| 凤毛麟角是什么意思| 手抖是什么病的前兆| 为什么小孩子经常流鼻血| 什么是性上瘾| 赤小豆是什么| 月经不调是什么意思| 全血低切相对指数偏高什么意思| 女性私下有苦味主要是什么原因| 宫颈癌是什么| 背水一战是什么意思| 干咳喝什么止咳糖浆好| warning是什么意思| 随机血糖是什么意思| 细菌性阴道炎用什么洗液| 口腔溃疡要吃什么药| 美国为什么打伊拉克| 后背疼去医院挂什么科| 单核细胞比率偏高是什么意思| 血脂稠喝什么茶效果好| 为什么新疆人不吃猪肉| 白带多是什么原因引起的| 鸽子拉水便是什么原因| 花生有什么营养| 赞赏是什么意思| 什么是苏打水| 军官是什么意思| 奉子成婚是什么意思| 反讽是什么意思| 小便是红色的是什么原因男性| 意什么风发| 恍然大悟什么意思| 七里香是什么| 兔死狐悲指什么生肖| 桑树枝煮水有什么功效| 栀子泡水喝有什么好处| 频繁是什么意思| 单亲家庭什么意思| 禀报是什么意思| 拉肚子肚子疼吃什么药| 一个月一个并念什么| 后背中心疼是什么原因| 经常便秘吃什么| 吃什么对肺结节好| 六六无穷是什么意思| 四月28日是什么星座| 长脸型适合什么样的发型| 茧是什么意思| 卡介苗什么时候接种| 取环挂什么科| 普高和职高有什么区别| 吃东西就吐是什么原因| 左舌根疼痛是什么情况| 为什么血是红色的| 去拉萨需要准备什么| 国色天香是什么生肖| 为什么舌头老是有灼烧感| 小孩指甲有白点是什么原因| 荨麻疹用什么药最好| c罗穿什么足球鞋| 口臭挂什么科| 母猫怀孕有什么症状| 富勒烯是什么| 年少轻狂下一句是什么| 尿路感染吃什么药消炎| 36年属什么生肖| 五常是什么| 79年属什么的| 性生活过后出血是什么原因| 百鸟朝凤是什么生肖| 人绒毛膜促性腺激素是查什么的| 妙哉妙哉是什么意思| 蒲公英有什么药效| e抗体阳性说明什么| 单纯性苔藓是什么病| 痔疮什么感觉| 啄木鸟包包什么档次| 支原体肺炎吃什么药| 脚干裂用什么药最好| 妤字属于五行属什么| 月经期间吃什么对身体好| 血小板压积偏低是什么意思| 人心叵测是什么意思| 小孩舌头白是什么原因| 气虚什么症状| 588是什么意思| 益母草有什么作用| 头痒用什么东西洗头最好| 日光性皮炎用什么药膏最有效| 脚背肿是什么原因| 乳房肿胀是什么原因| 纯粹是什么意思| 贞操锁是什么| 饶有兴致是什么意思| 话唠是什么意思| 尿酸高不能吃什么| 主导是什么意思| 王姓为什么出不了皇帝| 焦虑抑郁吃什么药| 月经量少什么原因| 软化灶是什么意思| 真菌感染脚气用什么药| 为什么一热身上就痒| 小儿鼻炎用什么药好| 凌晨一点是什么时辰| 嘴巴里面起泡是什么原因引起的| 桃代表什么生肖| 思利及人是什么意思| 梦见放鞭炮是什么意思| 包皮什么年龄割最好| 健康的舌苔是什么样的| 玉戴久了会有什么变化| 三原色是什么| 同什么协什么| 腹胀便溏是什么意思| vans什么意思| 什么牛不吃草| 肝内胆管结石是什么意思| 保释金是什么意思| 1月19号是什么星座| 为什么会有阴虱子| 梦到结婚是什么预兆| 儿童调理脾胃用什么药最好| 有什么神话故事| 怀孕初期会有什么症状| 肌酐是什么意思| 额窦炎吃什么药管用| 什么化痰效果最好最快| 1998年什么命| 一片冰心在玉壶的冰心是什么意思| 颜值爆表是什么意思| cp是什么单位| 芝士是什么材料做的| 什么克火| 孕晚期宫缩是什么感觉| 爱的意义是什么| 外耳道疖肿用什么药| 什么是中产阶级| 早上吃玉米有什么好处| 孕妇心率快是什么原因| 办幼儿园需要什么证| 长期喝蜂蜜水有什么好处| 甲状腺回声不均匀什么意思| noxa20是什么药| 二十七岁属什么生肖| 为什么腹部隐隐作痛| 发炎是什么原因引起的| 启字五行属什么| 灵芝长什么样子图片| 乳腺病是什么意思| 跨界是什么意思| 便秘喝什么茶| 三重一大是什么内容| 莲花代表什么象征意义| 劲酒是什么酒| 直视是什么意思| 为什么会缺铁| 看指甲挂什么科| 什么人适合吃蛋白质粉| 尿急是什么意思| 瞩目是什么意思| 柳是什么生肖| 检查是否怀孕要做什么检查| 紫玉是什么玉| inv是什么意思| 水果之王是什么| 笑话是什么意思| sars是什么病毒| 为什么会长扁平疣| 杨枝甘露是什么东西| 发烧头痛吃什么药| 道什么意思| 脾胃虚弱吃什么食物补| 肾虚去医院挂什么科| 顾名思义的顾什么意思| 什么西瓜| 复查肺结节挂什么科| 四查十对的内容是什么| 热射病是什么症状| 撕漫男什么意思| 色痨是什么病| 双侧卵巢多卵泡是什么意思| 葫芦挂在家里什么位置好| 六亲不认什么意思| 性价比高什么意思| swell是什么牌子| 紫色睡莲的花语是什么| 密云有什么好玩的地方| 安是什么意思| 广菜是什么菜| 呈味核苷酸二钠是什么| 男性前列腺炎有什么症状| 什么是低烧| 百度
打印
[PIC32/SAM]

承德新一代K2于承德东风悦达起亚专营店圆满上市

[复制链接]
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

粉丝
百度