找回密码
 立即注册
查看: 752|回复: 13

【单电阻-FOC方案】,基于【车规-STC32G8K64,RMB1.7】,【运放,RMB0.07】

[复制链接]
已绑定手机

7

主题

411

回帖

6598

积分

论坛元老

积分
6598
发表于 2026-8-3 23:29:56 | 显示全部楼层 |阅读模式
单电阻-FOC方案】,基于【车规-STC32G8K64RMB1.7】,
=====【运放RMB0.07】

实物图:

(两条飞线是调试时便于示波器测试用的)
_20260803210143_34_52.jpg

_20260803210536_35_52.jpg

_20260803210554_36_52.jpg

电路(嘉立创EDA专业版): STCFOC_1.zip (336.92 KB, 下载次数: 56)
程序(KEIL5): STCFOC-LCW1.1.zip (130.2 KB, 下载次数: 55)
波形显示器2.2A安装包(VB6.0写的,用于显示串口数据波形): 波形显示器2.2A安装包.rar (6.66 MB, 下载次数: 37)
注意:
1.测试时注意电源限流,本人用的是移动电源的5V供电;
2.电机只测试过两种:XXD2212(KV1000?)、杂牌1806(KV2280),均正常转动;
3.本程序未用到clarke变换、park变换,也没有什么d轴、q轴,直接根据检测感应电动势角度来设置输出电压角度,可能与正规的FOC不一样;
4.电路未考虑低功耗,运放会持续耗电,若是做手持风扇类应用,建议运放供电用IO加以控制。

本帖已整理成PDF: 单电阻FOC.pdf (1.39 MB, 下载次数: 78)
参考资料:
无感无刷直流电机之电调设计全攻略
PMSM的无传感器磁场定向控制(AN1078)》 AN1078_cn.pdf (568.65 KB, 下载次数: 47)
PMSM无传感器FOC的单分流三相电流重构算法(AN1299)》 AN1299.pdf (994.49 KB, 下载次数: 46)
<分享一个低成本STC8H1K08无刷小电调,支持oneshot125协议>
https://www.stcaimcu.com/thread-17391-1-1.html
<便宜的车规-FOC24万转@STC32G12K128-24A车规,STC-FOC 新算法库,4/1更新> https://www.stcaimcu.com/thread-19545-1-1.html

1.原理图
SCH_STC-FOC-LCW1.1_1-P1_2026-08-03.png

MCUSTC32G8K64,利用其带死区的互补PWM功能,驱动N沟道+P沟道的MOS管,母线电流经运放放大后进ADC采样。注意,电流放大电路为反相放大,计算电流时要注意极性。为加快边沿、减小死区,建议R1R2R3尽量小。

2.三相电流重构
原理参考文档AN1299,我这里采用了一个笨办法:
移相,使三相PWM的后沿相差固定的2us左右的时间;为了使得ADC采样时的电平是固定的,需要限制最低脉宽和最高脉宽,如下图:
ScreenShot_2026-08-03_231839_771.png

移相原理参考《STC32G系列技术手册》中的例程“20.10.16产生3路相差120度的互补PWM波形(网友提供)”,一路PWM工作于“PWM模式1”,另两路工作于“翻转模式”。代码位于“main.c\void pwma_sr(void) interrupt 26”。
ScreenShot_2026-08-03_164111_836.png

采集电流使用了DMA,启动DMA的时机较为重要,建议调试时先设置固定的相电压或开环转动,进行验证,电流采准了才好进行后续工作。
3.反电势估算
引用文档AN1078,假如有一只普通的直流电机,已知电阻R、电感L、供电电压Vs,根据这些参数就能估算出电流,再根据估算电流与实际检测电流is之差,可以估算出感应电动势es。在无刷电机里,这个模型相当于其中一相,当得到两个相的感应电动势之后,就可以估算出转子(磁铁)的位置了,然后通过驱动电路产生合适的磁场令其转动。
ScreenShot_2026-08-03_154436_129.png

在我的程序中,RL是自动计算的,对绕组施加固定的电压,通过前两个电流之差得到L,通过一段时间后的稳定电流得到R(类似于阶越响应);代码位于“stcfoclcw.c\ void MotInit(void)”。
ScreenShot_2026-08-03_230458_923.png
文档AN1078中,对感应电动势的估算流程如下图:
ScreenShot_2026-08-03_154516_900.png
而我觉得这里有点复杂,有限幅,有校正因子Z,我的程序中作了简化,原理如下图:
ScreenShot_2026-08-03_232236_016.png

代码:
// Mot_IestUU相电流估算值
// Mot_IUU相电流检测值
// Mot_EmfUU相估算感应电动势

err=Mot_IestU-Mot_IU;//如果估算电流大于实测电流,则感应电动势应增加
Mot_EmfU+=err*Mot_Kslide;
Mot_IestU+=((S32)Vu*500-Mot_IestU*Mot_R-Mot_EmfU)/Mot_L;//电感两端电压/电感
验证的代码及效果如下图:
ScreenShot_2026-08-03_212226_590.png

ScreenShot_2026-08-03_212412_908.png

4.转子位置估算
   通过上面的算法,得到U相与V相的感应电动势(Mot_EmfUMot_EmfV),经低通滤波(Mot_EmfUlpMot_EmfVlp,再经类似C语言atan2(反正切)的算法后,即可得到转子位置(角度)。由于两个相电压之间的相位差是120度,而不是90度,所以不能直接用atan2计算;一种方法是利用Clarke变换(AN1078中有说明)将其变为90度的相位差后用atan2计算,另一种方法是手搓查表法。我这里用的就是“另一种方法”,实现过程如下:
(1)对于相差120度的波形,作除法,以绝对值大的一方作分母,放大128倍,得到结果如橙色曲线;
ScreenShot_2026-08-03_214252_994.png

(2)想办法让橙色曲线单调上升,如取负值,加偏移量,得到如同tan(正切)的效果;
ScreenShot_2026-08-03_214427_379.png

(3)把橙色曲线存入数组tantab[],并反向查表,即可得到类似atan的效果,得到数组atantab[]
ScreenShot_2026-08-03_214943_674.png

(4)验证算法,myatan()函数输入相差120度的两个波形,得到0~255的一条斜线,效果不错;
ScreenShot_2026-08-03_215214_497.png

5.转起来;
先开环转动、加速,达到一定速度后进入闭环,根据感应电动势经myatant()得到的转子位置Mot_EmfDeglg,指定输出电压角度(Mot_Vp);经测,输出电压角度随转速的提高而越发的提前于转子位置,程序中加了一点关于转速的处理。
ScreenShot_2026-08-03_223814_835.png

产生三相电压时,作了一点处理,统一下移并限制最小占空比。
ScreenShot_2026-08-03_223936_283.png

闭环后发送的曲线(不太好看):
ScreenShot_2026-08-03_212944_139.png
其它图:
ScreenShot_2026-08-03_213517_306.png





回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-8-15 09:42:34 | 显示全部楼层
截图202608150941142908.jpg


截图202608150942304010.jpg
回复

使用道具 举报 送花

83

主题

8219

回帖

1万

积分

超级版主

积分
17644
发表于 2026-8-4 10:15:07 | 显示全部楼层
高端应用,赞!
HT7550可能存在上电过冲现象,推荐使用SGM2200-5.0(最高输入26V)或SGM2200H-5.0(最高输入36V) 替代HT7533,封装、引脚兼容。
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6598

积分

论坛元老

积分
6598
 楼主| 发表于 2026-8-4 23:32:18 | 显示全部楼层
梁*** 发表于 2026-8-4 10:15
高端应用,赞!
HT7550可能存在上电过冲现象,推荐使用SGM2200-5.0(最高输入26V)或SGM2200H-5.0(最高输 ...

收到,谢谢。倒是从来没想过、没测过是否有过冲现象,后面研究一下。
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-8-15 09:39:23 | 显示全部楼层
截图202608150935558885.jpg


截图202608150936291820.jpg

截图202608150936577612.jpg

截图202608150937354626.jpg

截图202608150938261376.jpg

截图202608150939021475.jpg

截图202608150939213035.jpg
回复

使用道具 举报 送花

已绑定手机

0

主题

22

回帖

1142

积分

金牌会员

积分
1142
发表于 2026-8-16 15:42:43 | 显示全部楼层
能加编码器,就更好了

点评

https://www.stcaimcu.com/thread-17266-1-1.html  详情 回复 发表于 2026-8-16 15:48
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-8-16 15:48:07 | 显示全部楼层
回复

使用道具 举报 送花

已绑定手机

0

主题

22

回帖

1142

积分

金牌会员

积分
1142
发表于 2026-8-16 15:50:51 | 显示全部楼层
神*** 发表于 2026-8-16 15:48
https://www.stcaimcu.com/thread-17266-1-1.html

哦莫,谢谢大佬
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6598

积分

论坛元老

积分
6598
 楼主| 发表于 2026-8-19 15:18:57 | 显示全部楼层
以开环模式驱动无刷电机(像步进电机一样),低速转动,还挺好玩:
2.gif
回复

使用道具 举报 送花

已绑定手机
已实名认证

147

主题

4045

回帖

1万

积分

超级版主

积分
10681
发表于 2026-9-11 17:48:06 | 显示全部楼层
很优秀的学习级开源单电阻无感 FOC 方案(SMO + 整数化 atan + 上电自辨识 R/L)
但看起来缺一些功能防护?
建议加一些硬件过流保护和参数非自适应(否则换电机/大转速跨度会失准?)
且硬件有几处限制可以改进(VMOT 15V 以上过压、运放最低工作低压为 5V 零余量)
建议供参考
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-23 16:10 , Processed in 0.079341 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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