[学习笔记] 【Autochips评测】二:Demo程序工作流程解析

[复制链接]
1309|8
 楼主| 数码小叶 发表于 2021-1-27 10:30 | 显示全部楼层 |阅读模式
本帖最后由 数码小叶 于 2021-1-27 10:28 编辑

Autochips支持keil环境,那就简单了,直接从keil官网,下载支持包
Snipaste_2021-01-21_08-26-14.jpg
安装完就OK了,搞定了开发环境问题


打开一个例程,试着编译一下,顺利通过

Snipaste_2021-01-21_08-40-47.jpg

进入正题,打开自带的电机例程

Snipaste_2021-01-21_08-50-07.jpg


Snipaste_2021-01-21_08-49-28.jpg

在主程序里,首先是初始化延迟和调试的串口2,即获取us和ms标识
  1. s_facus = __SYSTEM_CLOCK / 1000000;
  2. s_facms = s_facus * 1000;


然后读取电机模式,进入对应的驱动,通过上一篇的硬件电路分析
Snipaste_2021-01-21_10-28-01.jpg
分别由5脚的UART4_TX,6脚的UART4_RX,61脚的I2C2_SDA决定启用何种驱动
手册中只有4种模式

Snipaste_2021-01-21_10-49-54.jpg

程序里的电机种类比原理图中介绍的要多。。。,而且引脚标号也对不上。。
  1. MOTOR_FOC_HALL_ENCODER,
  2. MOTOR_BLDC_HALL,
  3. MOTOR_BLDC_BEMF,
  4. MOTOR_FOC_HALL,
  5. MOTOR_FOC_SENSORLESS,
  6. MOTOR_FOC_ENCODER,
  7. MOTOR_VF_CONTROL,


进一步寻找,定位到函数GPIO_GetPinValue(uint32_t gpioNum)
  1. int32_t GPIO_GetPinValue(uint32_t gpioNum)
  2. {
  3.     uint32_t tmpGPIOx = 0, tmpGPIOxPinNum = 0, tmpGPIOPinValue = 0;

  4.     tmpGPIOx = gpioNum / GPIO_ONE_GROUP_NUM;                  // Calculate GPIO Group(A~E)
  5.     tmpGPIOxPinNum = gpioNum % GPIO_ONE_GROUP_NUM;            // Calculate GPIO Group's Internal Pin Number(0~15)
通过这个计算想到了rtthread的引脚编号模式,果然,这个引脚号不是实际的芯片引脚号

main程序里通过一个switch语句,选择电机模式,这意味着在上电前要确认好跳线帽


Snipaste_2021-01-21_14-26-03.jpg

选择其中的一个带传感器的无刷电机驱动模块App_BLDC_Hall();
  1. BLDC_GPIO_Initialize();
  2. Motor_Encoder_Gpio_Init();
  3. BLDC_TIM_Initialize();
  4. BLDC_Parameters_Initialize();
  5. BLDC_CTU_Init();
  6. BLDC_ADC_Init();
首先是AC7811的GPIO口初始化,包括用到的PWM口,ADC口,霍尔传感器接口,电机调试PWM口(就是可用来作为 DAC 输出观察变量的PWM通道)。然后是定时器功能初始化,BLDC参数初始化,采集传输CTU模块,ADC模块初始化。

接着根据传感器是霍尔还是编码器进行对应的初始化

  1. #if (defined BLDC_HALL)
  2.         BLDC_Hall_PWDT_Initialize();
  3. #elif (defined BLDC_ENCODER)
  4.         ENCODER_SpeedParameter_Initialize();
初始化完成后就是PWM具体参数设置了

  1. BLDC_PWM_Initialize();
  2. PWM_ComplementaryModeConfig(PWM2, 0);
  3. BLDC_DEBUG_Initialize();
最后就是实际的驱动应用程序了,一个大循环。里面加入了按键扫描,启动、停止、方向、速度控制。
Snipaste_2021-01-27_10-21-22.jpg

大循环里有个比较重要的标识,g_bldc1msTime,这个标识来源于TIMER2,1ms中断。
具体的电机控制操作,就在BldcHallMachine()和BldcEncoderMachine(),分为霍尔和编码器两个函数里了。按键扫面只是切换状态标识,实际改变是在这两个函数里。
yangjiaxu 发表于 2021-1-28 16:43 | 显示全部楼层
楼主讲的很详细,感谢分享 期待
七毛钱 发表于 2021-1-28 17:01 | 显示全部楼层
楼主讲的很详细,学习 期待
有何不可0365 发表于 2021-1-31 23:32 | 显示全部楼层
楼主讲的很详细,感谢分享 期待
有何不可0365 发表于 2021-1-31 23:33 | 显示全部楼层
18051358860 发表于 2021-2-4 22:46 来自手机 | 显示全部楼层
我这个Demo跑不出来,电机不转呀,怎么回事,你跑了没
 楼主| 数码小叶 发表于 2021-2-5 08:36 | 显示全部楼层
18051358860 发表于 2021-2-4 22:46
我这个Demo跑不出来,电机不转呀,怎么回事,你跑了没

我的电机还在路上
18051358860 发表于 2021-2-5 09:14 | 显示全部楼层
里面有晴雨 发表于 2021-2-5 09:19 | 显示全部楼层
期待有更好的作品出来,持续期待中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

2560

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部