|
发表于 2021-9-7 22:37:44
|
显示全部楼层
本帖最后由 dukelec 于 2021-9-7 23:53 编辑
這個項目,foc 核心部分準確的說不是優化,而是簡化
順便一說,mcu 建議換成 stm32g0
看了下,foc_calculate_dutycycle 函數,算法有問題,你通過 if else 判斷 VecSector 是哪個分區,這個是有問題的(就算能用也不優雅),
通過 inverse park 一步就算出來了,可以參考 Ti 的文檔中的公式,文檔編號:Clarke & Park Transforms - BPRA048
我的 foc 相關代碼,你可以參考一下:
- int16_t out_pwm_u = lroundf(i_alpha);
- int16_t out_pwm_v = lroundf(-i_alpha / 2 + i_beta * 0.866025404f); // (√3÷2)
- int16_t out_pwm_w = -out_pwm_u - out_pwm_v;
- __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, DRV_PWM_HALF - out_pwm_u); // TIM1_CH3: A
- __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, DRV_PWM_HALF - out_pwm_v); // TIM1_CH2: B
- __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, DRV_PWM_HALF - out_pwm_w); // TIM1_CH1: C
复制代码
不行的話,可能是方向有問題,調整一下編碼器方向(數據取反與否)、電機線序,遵守電機正轉方向的行業規範(參考石英鐘錶的微型電機的輸出軸帶動秒針旋轉的方向)
順序都沒問題,還不行的話,就是編碼器 offset 算的不對,用於 calibration 的拖動模式的控制或計算有問題
你的硬件沒有電流檢測,力矩算是開環控制,速度環和位置環目前也還沒加
通訊也幾乎沒加,uart 建議轉成 485 電平
通訊建議兼容這個開源工具,看了你的 CDTP,雖然名子相同了一半,但我還是覺得 CDBUS 更好 ;-)
开源串口图形界面工具 CDBUS GUI 支持读写数据表、串口打印、IAP、波形显示…
https://www.amobbs.com/thread-5746055-1-1.html
整體看起來比較簡潔清爽,還不錯,用 linux 環境開發很贊 |
|