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

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

[复制链接]

该用户从未签到

551

主题

9441

回帖

1万

积分

管理员

积分
13983
发表于 2023-10-15 19:38:43 | 显示全部楼层
清爽
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-1-23 09:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    14

    回帖

    148

    积分

    注册会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 119 天

    [LV.6]常住居民II

    31

    主题

    392

    回帖

    2016

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-23 09:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    14

    回帖

    148

    积分

    注册会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 119 天

    [LV.6]常住居民II

    31

    主题

    392

    回帖

    2016

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-23 09:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    14

    回帖

    148

    积分

    注册会员

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

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 119 天

    [LV.6]常住居民II

    31

    主题

    392

    回帖

    2016

    积分

    荣誉版主

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

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


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


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



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


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 天前
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4

    主题

    50

    回帖

    294

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 119 天

    [LV.6]常住居民II

    31

    主题

    392

    回帖

    2016

    积分

    荣誉版主

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

    截图202310251038558748.jpg

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

    核心代码部分:
    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. }
    复制代码

    实机测试视频:




    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9441

    回帖

    1万

    积分

    管理员

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

    截图202310251741505524.jpg

    点评

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-16 06:54 , Processed in 0.081531 second(s), 76 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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