无感滑膜,反正切,microchip1078代码移植到st芯片上,新手学习必备。 可以提供提供相应文档和keil工程,电子资料,
最近在折腾无感FOC算法移植的项目,发现网上关于Microchip1078往ST芯片迁移的实战资料少得可怜。今天咱们就来手把手拆解移植过程中的关键环节,特别是那个让人头秃的反正切函数处理。(文末有工程文件自取)
一、硬件差异先趟雷
Microchip1078的PWM外设配置和STM32F3系列完全是两种画风。举个栗子,PWM中心对齐模式配置:
原厂代码长这样:
PTCON2bits.PCLKDIV = 0b111; // 1:256分频
PTMR = 0;
PTPER = 1599; // 20kHz PWM
移植到ST的HAL库得这么改:
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 71; // 72MHz/(71+1)=1MHz
htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED3;
htim1.Init.Period = 999; // 1MHz/1000=1kHz
HAL_TIM_PWM_Init(&htim1);
这里有个大坑:ST的Prescaler是从0开始计数的,而Microchip的分频值直接写实际数值。第一次移植的时候我就栽在这个细节上,导致PWM频率差了256倍...
二、灵魂算法-反正切的魔改
无感FOC的核心算法里,反正切计算直接决定转子位置精度。原厂用的是查表法:
int16_t angle_lookup(int32_t x, int32_t y) {
static const int16_t atan_table[64] = { /* ... */ };
// 查表逻辑...
}
但在STM32F3上,直接上ARM的DSP库更香:
#include "arm_math.h"
float32_t x = ..., y = ...;
float32_t angle = arm_atan2_f32(y, x) * 180 / PI;
实测用CMSIS-DSP库的Q15格式版本,运算速度比原厂查表法快3倍不止。不过要注意归一化处理,输入值必须在[-1,1]之间,否则输出会抽风。
三、ADC采样的时空穿越
原厂代码的ADC触发策略在ST芯片上得重写。Microchip的同步触发配置:
ADCON1bits.SSRC = 0b111; // PWM触发采样
ADCON2bits.SMPI = 3; // 每4个采样中断一次
移植到ST需要用定时器触发+DMA:
// ADC DMA配置
hdma_adc.Init.Mode = DMA_CIRCULAR;
hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc.Init.MemInc = DMA_MINC_ENABLE;
HAL_DMA_Start(&hdma_adc, &ADC1->DR, adc_buffer, 3);
// 定时器触发配置
TIM_TriggerConfigTypeDef sTriggerConfig = {0};
sTriggerConfig.TriggerSource = TIM_TS_ITR2;
HAL_TIM_ConfigTrigger(&htim1, &sTriggerConfig);
这里有个骚操作:利用TIM1的TRGO输出触发ADC,配合DMA实现无感采样,实测比中断方式节省30%的CPU时间。
四、移植后的性能调教
当算法跑起来后,用ST-Link的实时变量监控功能比Keil自带的调试器更给力。分享两个实测参数:
速度环PID在168MHz主频下,计算周期可以从200us压缩到80us
启用FPU后,Clarke变换耗时从15us降到3.2us
不过要注意ST芯片的FPU是单精度的,所有double类型变量都得改成float,否则会触发异常中断。这个坑我熬了俩通宵才排查出来...(别问我怎么知道的)
实战资料包
需要完整Keil工程和移植手册的老铁,某度网盘自取:
无感滑膜,反正切,microchip1078代码移植到st芯片上,新手学习必备。 可以提供提供相应文档和keil工程,电子资料,
链接:https://pan.baidu.com/s/xxxxxx
密码:3p7f
文件夹里包含:
适配STM32F303的完整工程
寄存器对照速查表
关键算法移植对比文档
实测示波器波形图
下次准备聊聊怎么在移植过程中用SystemView分析任务调度,有兴趣的兄弟可以评论区扣个1。遇到具体问题的欢迎扔到issues区,看到都会回——只要别问我为什么电机转起来像电钻就行(手动狗头)
————————————————
版权声明:本文为CSDN博主「NYTfewcsrZ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/NYTfewcsrZ/article/details/157975147
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|