搜索
查看: 3252|回复: 1

[原创] 【STM32电机培训】——6、任务4开放性实验转矩控制电机

[复制链接]
  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-9-14 01:05:21 | 显示全部楼层 |阅读模式
    本帖最后由 toofree 于 2018-9-14 08:45 编辑

    [size=13.3333px]STM32电机培训】——6、任务4开放性实验转矩控制电机


    任务目标:转矩控制电机,用STMStudio对变量进行监测,用ADC采样电位器电压,ADC采样值按比例间接控制电机转速。
    01.jpg


    按培训资料,使用转矩控制函数“MC_ProgramTorqueRampMotor1(Tuning_Iqref,1000);”,添加变量到STMStudio窗口
    02.jpg


    建立STMStudio工程,并将“.out”添加工程中。
    03.jpg


    电位器ADC采样函数“MC_ProgramRegularConversion(ADC_Channel_12,ADC_SampleTime_601Cycles5);”,以及读取ADC采样结果函数“MC_GetRegularConversionValue();”。
    此处有重点,将右侧代码照着敲一遍,改巴改巴
    04.jpg




    STMStudio的VarViewer窗口中观察波形变化。
    05.jpg


    代码改起:
    本贴代码在上一贴基础上更改。
    【STM32电机培训】——5、任务3电机状态切换、正反转
    https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617456&fromuid=307297
    (出处: 意法半导体STM32/STM8技术社区)



    搜索找到头文件“std_hal_missing_define.h”,将第4行的“#if 0”,改为“#if 1”。或者自己添加“ADC_Channel_12”和“ADC_SampleTime_601Cycles5”相关宏定义。
    11.jpg


    修改头文件“std_hal_missing_define.h”的目的,就是想使用这两个宏定义。或者还有其它隐藏的宏定义,反正修改、添加一下,一劳永逸。
    12.jpg


    工程主文件“main.c”中,添加相关头文件,并添加相关变量定义、宏定义。这里“MAX_TUNING_IQ”、“MIN_TUNING_IQREF”分别为2800、1000是实验得出来的。转矩太小电机低速会停机,1000是最低维持电机转动的转矩参数;2800是ADC值接近满量程时,电机才达到最大转速的转矩参数。
    13.jpg


    添加几个外部变量声明和函数声明
    14.jpg


    主循环中,只执行一条“ Open_Task();”函数,此函数便是照着培训资料码好的代码。
    15.jpg


    “ Open_Task()”中“Tuning_Iqref”增加了1000的偏置,与“MIN_TUNING_IQREF”差不多是一个意思。
    16.jpg


    复制出“ Open_Task()”源码供参考。(如果嫌麻烦的话,直接下载贴子最后的打包附件)
    1. void Open_Task(void)
    2. {
    3.   pMctHdl = GetMCI(M1);
    4.   
    5.   /* Do regular adc convert */
    6.   if (MC_GetRegularConversionState() == UDRC_STATE_IDLE)
    7.   {
    8.     MC_ProgramRegularConversion(ADC_Channel_12,ADC_SampleTime_601Cycles5);
    9.   }
    10.   else if (MC_GetRegularConversionState() == UDRC_STATE_EOC)
    11.   {
    12.     /* Get ADC value */
    13.     Tuning_ACD = MC_GetRegularConversionValue();
    14.   }

    15.   if (Delay_Count == 0)
    16.   {
    17.      Delay_Count = HAL_GetTick();
    18.   }
    19.   else if (HAL_GetTick() > (Delay_Count + 1))
    20.   {
    21.     Delay_Count = 0;
    22.    
    23.     /* Get new Iqref */
    24.     //Tuning_Iqref = (Tuning_ACD + 1) * MAX_TUNING_IQ / 65536;
    25.     Tuning_Iqref = Tuning_ACD* MAX_TUNING_IQ / 65536 + 1000;
    26.     if (Tuning_Iqref < MIN_TUNING_IQREF)
    27.     {
    28.       Tuning_Iqref = MIN_TUNING_IQREF;
    29.     }
    30.    
    31.     /* Set new Iqref ramp */
    32.     MC_ProgramTorqueRampMotor1(Tuning_Iqref,1000);
    33.     MC_StartMotor1();  
    34.   }
    35. }
    复制代码



    编译IAR工程。下载固件到开发套件中。


    打开“Workbench”界面,并与目标板套件连接。
    21.jpg

    “监控”窗口下,在打开“Plotter”绘图窗口。
    22.jpg


    电脑安装,并打开软件“STMStudio”。
    23.jpg


    将本实验IAR生成的.out,导入到“STMStudio”工程,并且添加监测变量到两个“VarViewer”窗口。为什么用两个窗口,因为ADC有采样值变化与转矩不在同一范围,如果在同一窗口,一个波形幅度太小。
    24.jpg


    运行程序后,在“Workbench”“Plotter”绘图窗口观测电机速度,转到电位器,电机速度变化,相应波形显示有变化。
    25.jpg


    同时在“STMStudio”的窗口中也将观察到如下图变化波形。
    26.jpg


    至此,完成了开放性实验的转矩控制电机,并在“STMStudio”观察ADC、转矩任务。(之后,重开贴,整理一下“STMStudio”使用,其中会有一个小贴士分享。


    按照惯例,工程附上:

    P-NUCLEO-IHM001_STMStudio.rar (9 MB, 下载次数: 80)
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    9

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2019-1-16
    发表于 2018-11-12 11:36:02 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-19 20:50 , Processed in 1.170591 second(s), 34 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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