东厂是什么意思| 爱华仕是什么档次| 感冒喉咙痛吃什么药好| 1月9日什么星座| 脚踝发黑是什么原因| 甘薯是什么东西| 暖气是什么症状| 发糕是什么做的| 国家专项是什么意思| 轰20什么时候首飞| 尿中红细胞高是什么原因| 腺样体面容是什么意思| 内心os什么意思| 蛇舌草有什么功效| 饿了吃什么不胖| 生气吃什么药可以顺气| 腹腔气体多是什么原因| 人参和什么泡酒能壮阳| 钾高吃什么可以降下来| 相是什么意思| 扁平足为什么不能当兵| aape是什么牌子| 10月28号是什么星座| 牙齿出血是什么病| 什么是公主病| 老虔婆是什么意思| 大学硕士点是什么意思| lsp是什么意思| 吃什么东西可以除湿气| 什么药退烧快| 拉肚子恶心想吐吃什么药| 地主代表什么生肖| 雍正叫什么| 衿字五行属什么| p是什么意思啊| 花椒有什么功效与作用| 胃烧心是什么原因| 补肾吃什么好| 属马的跟什么属相最配| 伍德氏灯检查什么| 膝盖疼看什么科| 胃窦粘膜慢性炎是什么病| 嘴苦是什么原因引起的| 痛风频繁发作说明什么| 内热是什么原因引起的怎么调理| 肌酐高吃什么水果好| 运动出汗多是什么原因| 拉黑屎是什么原因| 三十而立四十不惑什么意思| 黑色阔腿裤搭配什么上衣好看| 一贫如什么| 3月29是什么星座| 什么时间容易怀孕| 梦见鸡啄我是什么意思| 奥斯卡小金人什么意思| 老年痴呆症又叫什么名字| 糖尿病是什么症状| 笑点低的人说明什么| 为什么卧室要用木地板| 偷鸡不成蚀把米是什么意思| 盐酸盐是什么| 梦到杀人是什么意思| 脑供血不足是什么原因引起的| 118代表什么意思| 什么饼干养胃最好| 腿发麻是什么原因| 性张力是什么意思| MD是什么| 映景是什么意思| 土龙是什么鱼| 身体缺钾有什么症状| 第一次世界大战是什么时候| 暇步士是什么档次品牌| 女人什么时候绝经| 筷子在古代叫什么| qid医学上是什么意思| 粉饼和散粉有什么区别| 血液由什么和什么组成| 11度穿什么衣服| 三农是什么| 性状是什么意思| 枯草热是什么病| 空谷幽兰下一句是什么| 胸口疼是什么病的前兆| 12月14号是什么星座| 交社保有什么用| 验孕棒什么时候测最准| 儿童c反应蛋白高说明什么| 脸油油的是什么原因| 马路上的菱形标志是什么意思| crp医学上是什么意思| 为什么榴莲那么贵| 羊与什么相冲| 脸上白一块一块的是什么原因| 什么不能带上飞机| 窦性心动过速什么意思| 什么蛋| 什么是血栓| nyc是什么牌子| 豆角和什么不能一起吃| 朝朝暮暮是什么意思| 结婚 为什么| 什么还珠成语| 活性印染是什么意思| 钼靶检查是什么| 隐翅虫皮炎用什么药膏| 胃上火有什么症状| 茄子炒什么好吃| 日加匀念什么| 口大是什么字| 发烧咳嗽挂什么科| fdi是什么意思| 不堪入目是什么意思| 519是什么星座| 睡着了放屁是什么原因| 梦见黑蛇是什么预兆| 开水冲服是什么意思| 诛仙讲的是什么故事| 鱼什么时候产卵| 人心惶惶是什么意思| 手指关节疼痛挂什么科| 中气下陷吃什么药| 上海的市花是什么| 蛮夷是什么意思| 孕妇晚餐吃什么比较好| 抗体和抗原有什么区别| 什么是无氧运动| brush什么意思| 老流口水是什么原因| 出差带什么| 有生之年什么意思| 怀孕了吃什么药可以打掉| 河南专升本考什么| 七月份什么星座| 待字闺中是什么意思| 长白头发了吃什么才能把头发变黑| 意念灰是什么意思| 青蛙靠什么呼吸| 梦见狗咬人是什么预兆| 鳖吃什么| 嘴唇舌头发麻什么病兆| 梦见自己离婚是什么预兆| 九斗一簸箕有什么说法| 3月29号是什么星座| 脑脊液是什么| 中线是什么| 地笼捕河虾用什么诱饵| 什么的手| 阈值是什么意思| 儿童结膜炎用什么眼药水| 妇科活检是什么意思| 参谋长是什么军衔| imax是什么意思| 朝对什么| 尿分叉吃什么药好得快| 私事是什么意思| 75年属什么| 抗着丝点抗体阳性是什么| 什么叫种水| 什么是特殊膳食| 正装是什么样的衣服| pe什么意思| 代谢慢是什么原因| 吃什么对头发有好处| 极差是什么| 膝关节痛什么原因| 重孙是什么意思| 神阙穴在什么位置| 在干什么| 腹泻能吃什么水果| 干可以加什么偏旁| 梦见买碗是什么意思| 一个火一个羽一个白念什么| 咳黄痰吃什么药| 614是什么星座| 吃什么消炎药可以喝酒| 尿路感染吃什么药最好| 积德是什么意思| 现在流行什么样的衣柜| 奶瓶pp和ppsu有什么区别| 什么又绿江南岸| 两横一竖是什么字| 猫咪有泪痕是什么原因| 猪巴皮是什么材质| 孕妇吃什么最好| 男性生殖系统感染吃什么药| 驾驶证照片是什么底色| 小资情调是什么意思| 游戏bp是什么意思| 排便困难拉不出来是什么原因| 下眼睑跳动是什么原因| 身心俱疲是什么意思| 长白头发是什么原因| 肝异常一般是什么情况| 七月一号是什么节| 阴道红肿是什么原因| 背部疼痛是什么原因引起的| 仕字五行属什么| 什么的哲理| 纳字五行属什么| 乔迁之喜送什么花| 没有精液是什么原因| 单硬脂酸甘油酯是什么| 白蚁长什么样| 做什么生意挣钱| 小姑娘为什么会得多囊卵巢| 今天开什么码| 醋泡洋葱有什么功效| 互粉是什么意思| 人造革是什么材质| 海绵体修复吃什么药| 什么叫同理心| 皮肤黄的人适合穿什么颜色的衣服| 睡觉手麻是什么原因引起的女人| 什么颜色加什么颜色是黑色| 膝盖怕冷是什么原因| 经血粉红色是什么原因| 黄鼠狼的天敌是什么动物| 268数字代表什么意思| 什么三迁| 小儿疳积是什么症状| 择日不如撞日什么意思| a醇对皮肤有什么作用| burberry什么牌子| 脑供血不足什么原因| pci手术全称是什么| 兵马俑是什么意思| 满字是什么结构| 晋是什么意思| 什么是口播| 一帘幽梦是什么意思| 酸入肝是什么意思| 失能是什么意思| 灯火葳蕤是什么意思| 什么是网恋| 1995年五行属什么| 什么是阑尾炎| 什么叫方差| 2020年是什么年| 咪咪头疼是什么原因| 人参为什么会跑| 牙痛吃什么药最有效| 志心皈命礼是什么意思| m2是什么意思啊| 中途疲软吃什么药| 招财进宝是什么意思| 珠颈斑鸠吃什么| uv是什么| 肝痛在什么位置| 7.7什么星座| 荞麦长什么样子图片| 从来不吃窝边草是什么生肖| .什么意思| 1998年五行属什么| moo是什么意思| 大三阳吃什么药好| 支气管炎咳嗽吃什么药好得快| 西字五行属什么| 国家为什么不承认鬼神| 四月二十九是什么星座| 膝盖疼痛吃什么药好| 启字五行属什么| hmb是什么意思| bone什么意思| 百度
[PIC32/SAM]

天津滨海新区功能区合并重组 干部这样调整

[复制链接]
17139|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 | 显示全部楼层
这个算法很重要
桃花落满山前| | 2025-7-23 11:54 | 显示全部楼层
浅浅的回答一下
[color=rgba(0, 0, 0, 0.85)]平衡车通过陀螺仪和加速度计检测姿态,单片机计算偏差后驱动电机调整转速,利用 PID 算法实时控制两轮力矩,抵消倾倒力矩实现平衡。
cooldog123pp| | 2025-7-24 17:17 | 显示全部楼层
实现平衡 滤波算法和PID算法两大核心以及相关传感器都是必不可少
魔法森林精灵| | 2025-7-25 19:19 | 显示全部楼层
这个帖子解释了平衡车的工作原理,从硬件到软件实现,非常详细。尤其是双环控制算法的实现,对于理解平衡车的动态平衡控制非常有帮助。
xixi2017| | 2025-7-26 11:52 | 显示全部楼层
PID是个好东西。
yiyigirl2014| | 2025-7-29 19:33 | 显示全部楼层
检测不平衡,那么刷新率是多少呢?
魔法森林精灵| | 2025-7-30 08:53 | 显示全部楼层
这个帖子很详细地解释了平衡车的控制系统,从硬件架构到软件实现流程,再到安全与优化设计,非常全面。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3842

帖子

18

粉丝
百度