找回密码
 立即注册
楼主: 王昱顺

【STC-FOC】Fast-SVPWM输出!STC32F12K54实现,32位8051,全开源软件/硬件

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-07-17 10:45:24

0

主题

15

回帖

210

积分

中级会员

积分
210
发表于 2023-10-16 09:40:26 | 显示全部楼层
原理图好像与板子布线图有差异,希望修正

点评

请问一下,这个差异是指的哪一个版本? 最新版本的我测好后就放出来,之前那个版本是准备替换掉的,因为设计的还不算很成熟,有比较多的问题  详情 回复 发表于 2023-10-16 10:04
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2023-10-16 10:04:58 | 显示全部楼层
jhx*** 发表于 2023-10-16 09:40
原理图好像与板子布线图有差异,希望修正

请问一下,这个差异是指的哪一个版本?
最新版本的我测好后就放出来,之前那个版本是准备替换掉的,因为设计的还不算很成熟,有比较多的问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-07-17 10:45:24

0

主题

15

回帖

210

积分

中级会员

积分
210
发表于 2023-10-16 10:09:06 | 显示全部楼层
是之前9.11日的版本

点评

好的,之后我直接替换成V2版本的硬件,并且一块开源串口屏工程。 串口屏工程可以用电脑直接使用模拟器,可以免去一块串口屏。串口接电脑上就能用了  详情 回复 发表于 2023-10-16 12:37
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2023-10-16 12:37:58 | 显示全部楼层
jhx*** 发表于 2023-10-16 10:09
是之前9.11日的版本

好的,之后我直接替换成V2版本的硬件,并且一块开源串口屏工程。
串口屏工程可以用电脑直接使用模拟器,可以免去一块串口屏。串口接电脑上就能用了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-07-17 10:45:24

0

主题

15

回帖

210

积分

中级会员

积分
210
发表于 2023-10-16 13:08:34 | 显示全部楼层
王*** 发表于 2023-10-16 12:37
好的,之后我直接替换成V2版本的硬件,并且一块开源串口屏工程。
串口屏工程可以用电脑直接使用模拟器, ...

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2023-10-18 11:07:11 | 显示全部楼层
本帖最后由 王昱顺 于 2023-10-18 11:40 编辑

目前进度:
==验证驱动部分和电流采样部分成功,编码器部分需要等改造了电机后才能试试。
==目前是开环运行,还是能看出来较大的齿槽脉动。


分割地平面确实很有用,也很有必要,尤其是电机类应用中的ADC部分
下面这个是将示波器地夹子夹在主电源地上的电流波形,可以看到峰峰值到了1.8V了
PGND.jpg
这个是将示波器地夹子夹在AGND上的电流波形,明显峰峰值要好很多,基本没有尖刺
AGND.jpg


当然这个波形是带着PWM谐波的,采样的时候是在中心稳定处采样。
等调一调ADC再看看读出来的数据波形。
上面这个波形还是能看出来很明显的马鞍波双峰特征(SVPWM算法)



下面这个是输出端的波形视频


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2023-10-19 23:16:38 | 显示全部楼层
期待异步电机的驱动程序。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2023-10-25 10:42:06 | 显示全部楼层
本帖最后由 王昱顺 于 2023-10-25 20:32 编辑

截图202310251038558748.jpg

新的Fast-SVPWM算法,这次通过查阅了一些论文,发现了有一个可以降低硬件消耗实现SVPWM算法的文章。
现在通过代码实现了一下,这里输出的值是串口绘图得到的。可以看出来是非常标准的马鞍波。
等下午实机运行一下试试。
电机与控制学报_一种低硬件资源消耗快速SVPWM算法.pdf (1.25 MB, 下载次数: 149)

核心代码部分:
  1. #define voltage_power_supply 12.0 // 最高电压限制
  2. #define _constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
  3. #define PI 3.14159265358979323846
  4. // 归一化角度到 [0,2PI]
  5. float _normalizeAngle(float angle)
  6. {
  7.         float a = fmod(angle, 2 * PI); // 取余运算可以用于归一化,列出特殊值例子算便知
  8.         return a >= 0 ? a : (a + 2 * PI);
  9.         // 三目运算符。格式:condition ? expr1 : expr2
  10.         // 其中,condition 是要求值的条件表达式,如果条件成立,则返回 expr1 的值,否则返回 expr2 的值。可以将三目运算符视为 if-else 语句的简化形式。
  11.         // fmod 函数的余数的符号与除数相同。因此,当 angle 的值为负数时,余数的符号将与 _2PI 的符号相反。也就是说,如果 angle 的值小于 0 且 _2PI 的值为正数,则 fmod(angle, _2PI) 的余数将为负数。
  12.         // 例如,当 angle 的值为 -PI/2,_2PI 的值为 2PI 时,fmod(angle, _2PI) 将返回一个负数。在这种情况下,可以通过将负数的余数加上 _2PI 来将角度归一化到 [0, 2PI] 的范围内,以确保角度的值始终为正数。
  13. }
  14. // 快速判断返回所在扇区
  15. u8 Fast_Sector(float Ua, float Ub)
  16. {
  17.         return (fabs(Ub) >= fabs(Ua)) ? 2 : (((Ua * Ub) >= 0) ? 1 : 3); // 直接判断返回扇区信息
  18. }
  19. // 执行快速SVPWM算法,填入相应的占空比延时
  20. float Duty_A, Duty_B, Duty_C;
  21. void Fast_SVPWM(float Ua, float Ub)
  22. {
  23.         switch (Fast_Sector(Ua, Ub))
  24.         {
  25.         case 1:
  26.                 Duty_A = (1 - Ua - Ub) / 2, Duty_B = (1 + Ua - 3 * Ub) / 2, Duty_C = (1 + Ua + Ub) / 2;
  27.                 break;
  28.         case 2:
  29.                 Duty_A = (1 - 2 * Ua) / 2, Duty_B = (1 - 2 * Ub) / 2, Duty_C = (1 + 2 * Ub) / 2;
  30.                 break;
  31.         case 3:
  32.                 Duty_A = (1 - Ua + Ub) / 2, Duty_B = (1 + Ua - Ub) / 2, Duty_C = (1 + Ua + 3 * Ub) / 2;
  33.                 break;
  34.         default:
  35.                 break;
  36.         }
  37.         printf("%f,%f,%f\r\n",Duty_A-0.5,Duty_B-0.5,Duty_C-0.5);
  38. }
  39. // 常见数值
  40. #define SQART3_2 0.86602540378
  41. #define SQART3_3 0.57735026919
  42. // 执行压缩算法,进行SVPWM
  43. float _Ua, _Ub;
  44. void Transform_To_SVPWM(float Ua, float Ub)
  45. {
  46.         _Ua = Ua * 1 * SQART3_2;
  47.         _Ub = Ub * SQART3_3 * SQART3_2;
  48.         Fast_SVPWM(_Ua, _Ub);
  49. }
  50. // 2023年9月20日11点35分添加Ud内容
  51. // 2023年9月22日添加SVPWM
  52. // 2023年10月25日改进SVPWM
  53. float Ualpha, Ubeta;
  54. //Uq是q轴电压设定,也就是期望电压(包括上半部分和下半部分)。Ud是d轴电压设定,angle_el是当前电机的实际角度
  55. void setTorque(float Uq, float Ud, float angle_el)
  56. {
  57.         // 幅值限位
  58.         Uq = (Uq*2)/voltage_power_supply;
  59.         Uq = _constrain(Uq, -2, 2);
  60.         Ud = (Ud*2)/voltage_power_supply;
  61.         Ud = _constrain(Ud, -2, 2);
  62.         angle_el = _normalizeAngle(angle_el);
  63.         // 帕克逆变换
  64.         Ualpha = (Ud * cos(angle_el)) - (Uq * sin(angle_el));
  65.         Ubeta = (Uq * cos(angle_el)) + (Ud * sin(angle_el));
  66.         Transform_To_SVPWM(Ualpha, Ubeta);
  67. }
复制代码

实机测试视频:




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-10-25 17:41:56 | 显示全部楼层
截图202310251741255122.jpg

截图202310251741505524.jpg

点评

自带的串口绘图能否支持flaot数据类型? 单精度浮点加速,就是为了看看flaot类型数据了。  详情 回复 发表于 2023-10-26 20:41
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2023-10-26 20:41:40 | 显示全部楼层

自带的串口绘图能否支持flaot数据类型?
单精度浮点加速,就是为了看看flaot类型数据了。

点评

暂无,在忙其他的案子,要等段时间  发表于 2023-10-31 15:35
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:37 , Processed in 0.251581 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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