找回密码
 立即注册
查看: 57|回复: 5

方波无刷电调求助

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-10-10 08:10:42
已绑定手机

246

主题

344

回帖

1838

积分

金牌会员

积分
1838
发表于 5 天前 | 显示全部楼层 |阅读模式
这个电调一直都驱动不起来,就是转个几圈就停了,而且电机还发抖。

我的驱动代码是官方魔改版,选用的单片机是STC8H1K08T,发现这个单片机缺少硬件资源,
过零检测时间使用定时器0和PWMB定时器,这两个定时器不知道频率有没有设置成一样?

截图202510051443598152.jpg
换相函数我做成了函数指针数组,方便切换。

截图202510051446113604.jpg
电机启动函数我先硬拖完之后在启动的比较器

截图202510051501326741.jpg
过零检测,我是换完相之后再开的比较器,所以检测到过零之后直接把比较器关了。我原本就是按照官方的例程抄的,效果是一样的

截图202510051506254145.jpg
电角度用的PWMB定时器,我不确定PWMB的时钟和定时器0的时钟是不是设置成一样的频率,帮忙计算下

代码以及原理图 方波无刷电机驱动.7z (15.48 MB, 下载次数: 1)


电机运行状态



运行时无力,拍数对不上,发抖
帮忙推测一下哪里有问题,谢谢




回复

使用道具 举报 送花

3

主题

1916

回帖

680

积分

等待验证会员

积分
680
发表于 5 天前 | 显示全部楼层
从你的描述来看,你正在使用 STC8H1K08T 单片机驱动 无刷直流电机(BLDC),并使用了 方波(梯形波)控制方式,目前遇到的问题是:
电机只能转几圈就停;
电机运行过程中有明显抖动;
你使用了 函数指针数组 实现换相逻辑;
使用 定时器0 + PWMB 定时器 实现过零检测与电角度控制;
疑问点在于 定时器时钟频率是否一致、过零检测逻辑是否正确、以及是否存在 硬件资源不足 导致的问题。

一、问题分析

1. 电机只转几圈就停 & 抖动严重

这类问题通常出现在 换相时机不准确 或 过零检测失败。在方波控制中,准确的过零点检测是维持电机同步运行的关键。如果换相时机不对,会导致电机失步、抖动、甚至停转。

可能原因如下:
过零检测逻辑错误或延迟;
比较器配置或中断响应不及时;
定时器配置错误,导致时间基准不一致;
电角度控制(PWMB)与过零检测不同步;
启动阶段逻辑不完善,未完成初始定位或同步;
死区控制不当,导致上下桥臂短路或驱动异常。

2. 定时器0 与 PWMB 定时器时钟是否一致?

这是你关注的重点之一。

在 STC8H 系列单片机中,各个定时器的时钟源是可以独立配置的,通常包括:
系统时钟(SYSCLK);
系统时钟 / 12;
定时器2溢出;
外部时钟输入等。

你必须确认:
定时器0 的时钟频率是否与 PWMB 的时钟频率一致;
两者是否都使用了相同的预分频系数;
是否存在因中断优先级或抢占导致的时间偏差。

建议:
使用相同的时钟源(如 SYSCLK);
配置相同的预分频系数;
通过代码或示波器测量两个定时器的中断周期是否一致;
若用于同步换相和电角度控制,必须保持两者时间基准一致。

3. 过零检测逻辑分析

你提到:
换完相之后再开比较器,检测到过零后直接关闭比较器。

这说明你使用的是 逐相检测法,即每次换相后只检测当前未导通相的反电动势过零点。

这种方式是可行的,但需要注意:
换相后需要一定时间让反电动势建立;
比较器触发中断后需立即关闭,避免重复触发;
中断服务中应设置标志位,由主循环处理换相逻辑;
中断响应时间需足够快,否则可能错过过零点。

建议:
在中断中只设置一个标志位,不要在中断中直接调用换相函数;
检查比较器中断优先级是否被其他中断打断;
确保换相后延时足够,使反电动势建立;
使用示波器观察反电动势波形,确认是否真正检测到过零。

4. 启动逻辑分析

你提到:
启动函数是先“硬拖”完再启动比较器。

“硬拖”通常是指通过固定顺序换相,强制电机转动,直到检测到反电动势为止。

这种做法是合理的,但要注意:
初始阶段换相时间间隔应逐渐缩短,模拟加速过程;
如果“硬拖”时间不够或换相频率不合适,电机可能无法进入同步运行;
一旦检测到过零点,应立即切换为闭环检测模式;
启动失败可能导致电机抖动或停转。

建议:
设置一个启动换相计数器,逐步减少换相间隔;
记录换相次数,若超过一定次数仍未检测到过零,则重启启动逻辑;
使用一个启动标志位,控制启动与正常运行切换。

5. 硬件资源是否足够?

你提到:
单片机缺少硬件资源。

STC8H1K08T 是一款中低端8位MCU,资源有限:
RAM、Flash容量较小;
定时器资源有限;
比较器、ADC等外设功能有限;
中断嵌套能力较弱。

这可能导致:
中断服务中执行代码过长;
多任务调度困难;
实时性不足,导致控制不稳定。

建议:
精简中断服务程序;
使用状态机结构简化主循环逻辑;
若资源紧张,建议更换为 STC32G系列 或 ARM Cortex-M0/M4 等更强大MCU。

二、推荐调试方法

1. 使用示波器观察关键信号:
三相驱动信号(U、V、W):观察换相是否规律;
反电动势信号:确认是否能检测到过零;
比较器输出信号:确认是否成功触发;
定时器中断信号:确认两个定时器是否同步;
PWMB信号:确认电角度控制是否稳定。

2. 添加调试输出:
使用串口打印关键状态(如换相次数、过零标志、运行状态);
可通过LED闪烁表示不同运行阶段(如启动、运行、故障);
使用变量记录换相失败次数,辅助判断问题阶段。

三、总结与建议

| 问题点 | 分析 | 建议 |
|--------|------|------|
| 电机只转几圈就停 | 换相时机不准、过零检测失败 | 检查比较器中断逻辑,确认换相时机 |
| 电机抖动 | 换相不及时、电角度控制不稳定 | 确保定时器同步,优化启动逻辑 |
| 定时器0与PWMB是否同步 | 可能不一致导致时间基准偏差 | 检查定时器配置,确保使用相同时钟源 |
| 过零检测逻辑 | 换相后开启比较器,检测后关闭 | 优化中断服务逻辑,使用标志位控制换相 |
| 启动逻辑 | 硬拖方式可行但需优化 | 逐步加速,记录换相次数,失败重启 |
| 资源不足 | STC8H系列资源有限 | 精简代码,或更换更强MCU |

四、结语

你目前的实现思路是可行的,但在细节上需要进一步优化,尤其是定时器同步、中断响应、过零检测逻辑和启动策略。建议使用示波器辅助调试,结合串口打印信息,逐步排查问题点。

如果你方便上传完整的工程代码(C语言 + 头文件),我可以进一步帮你逐行分析具体问题。

祝你早日调试成功!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-10-10 10:24:38

76

主题

6759

回帖

1万

积分

超级版主

积分
14309
发表于 昨天 16:29 | 显示全部楼层
你是用我的STC8H1K28的版本改的吗?STC8H系列都可以移植使用的。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-10-10 08:10:42
已绑定手机

246

主题

344

回帖

1838

积分

金牌会员

积分
1838
发表于 昨天 17:53 | 显示全部楼层
梁*** 发表于 2025-10-9 16:29
你是用我的STC8H1K28的版本改的吗?STC8H系列都可以移植使用的。

是的呀,做了精简。过零检测有问题

点评

请贴电路  详情 回复 发表于 昨天 23:05
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-10-10 10:24:38

76

主题

6759

回帖

1万

积分

超级版主

积分
14309
发表于 昨天 23:05 | 显示全部楼层
QQ6243*** 发表于 2025-10-9 17:53
是的呀,做了精简。过零检测有问题

请贴电路
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-10-10 08:10:42
已绑定手机

246

主题

344

回帖

1838

积分

金牌会员

积分
1838
发表于 4 小时前 | 显示全部楼层

留个QQ吧
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-10 12:58 , Processed in 0.530528 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表