找回密码
 立即注册
查看: 123|回复: 10

方波无刷电调求助

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

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 2025-10-5 15:11:07 | 显示全部楼层 |阅读模式
这个电调一直都驱动不起来,就是转个几圈就停了,而且电机还发抖。

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

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

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

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

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

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


电机运行状态



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




回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-10-5 15:12:00 | 显示全部楼层
从你的描述来看,你正在使用 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语言 + 头文件),我可以进一步帮你逐行分析具体问题。

祝你早日调试成功!

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:200
  • 最近打卡:2025-10-15 13:18:53

77

主题

6775

回帖

1万

积分

超级版主

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

使用道具 举报 送花

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

246

主题

348

回帖

1858

积分

金牌会员

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

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

点评

请贴电路  详情 回复 发表于 7 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:200
  • 最近打卡:2025-10-15 13:18:53

77

主题

6775

回帖

1万

积分

超级版主

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

请贴电路
回复

使用道具 举报 送花

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

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 6 天前 | 显示全部楼层

留个QQ吧
回复

使用道具 举报 送花

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

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 5 天前 | 显示全部楼层

测电角度用的定时器2和PWMB定时器,代码是照搬上去的,去掉了堵转判断
现在的现象是能启动,启动后就不转了,但是代码一直再跑。
24MHZ,定时器2和PWMB时钟是12T,0分频

代码,原理图和现象视频都在里面 方波无刷电机驱动 (2).zip (26.63 MB, 下载次数: 2)




回复

使用道具 举报 送花

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

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 5 天前 | 显示全部楼层

怎么还没处理我的问题啊,我一直在这刷新

点评

1、请贴电路图,或者附件为PDF的电路图,你的压缩文件没看到电路图。 2、你的程序改动很大,少有解释,所以我不可能花很多时间去看你的程序。 请用我的程序尽量少改动(只改动硬件相关的),先驱动起来,再增加你的  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:200
  • 最近打卡:2025-10-15 13:18:53

77

主题

6775

回帖

1万

积分

超级版主

积分
14384
发表于 5 天前 | 显示全部楼层
QQ6243*** 发表于 2025-10-11 15:12
怎么还没处理我的问题啊,我一直在这刷新

1、请贴电路图,或者附件为PDF的电路图,你的压缩文件没看到电路图。
2、你的程序改动很大,少有解释,所以我不可能花很多时间去看你的程序。

请用我的程序尽量少改动(只改动硬件相关的),先驱动起来,再增加你的程序。
回复

使用道具 举报 送花

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

246

主题

348

回帖

1858

积分

金牌会员

积分
1858
发表于 5 天前 | 显示全部楼层
梁*** 发表于 2025-10-11 16:33
1、请贴电路图,或者附件为PDF的电路图,你的压缩文件没看到电路图。
2、你的程序改动很大,少有解释,所 ...



截图202510111641432579.jpg
截图202510111641578296.jpg
截图202510111642322517.jpg
就这个文件,其他代码不需要看,不用注释,这就是你的代码,照搬的,定时器换成了定时器2和PWMB定时器
Schematic_无刷电调开发板_2024-11-14.png

点评

我的例子,请使用下面的启动参数: #define MOTOR_TYPE 2 //0:2212电机,1:8元风扇单机,2:12万转涵道风扇电机,3:28元全金属涵道风扇 #elif (MOTOR_TYPE == 2) //12万转涵道风扇 #define MPP 1 //磁极对  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 03:42 , Processed in 0.533075 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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