Odrive STM32F405配置說明
文章目錄
- Odrive STM32F405配置說明
- 1、原理圖
- 2、系統時鐘配置
-
- 2.1 晶振配置
- 2.2 時鐘樹配置
- 2.3 系統配置
- 2.4 中斷配置
- 3、定時器TIM配置
-
- 3.1 TIMER1六路帶死區PWM
- 3.2 TIMER3 編碼器模式
- 3.3 TIMER8 霍爾傳感器模式
- 4、ADC配置
-
- 5、CANopen總線配置
-
- 5.1 CAN驅動配置
- 5.2 TIM5定時器配置
- 5.3 CanFestival移植即對象字典生成
- 6、SPI3配置
-
- 6.1 預驅DRV8301(DRV8303)
- 6.2 磁編碼器AS5047
- 7、全速USB(虛拟序列槽)
- 8、GPIO配置
- 9、FreeRTOS配置
-
- 9.1 添加Task
- 9.2 添加隊列Quene
- 9.3 添加二值信号量
- 9.4 添加互斥信号量
- 10、NVIC中斷配置
通過Odrive V3.6版本電路闆來編寫自己電機驅動軟體,以下是MCU部分的Cubemax配置。
1、原理圖
此工程隻配置M0(單軸)。
2、系統時鐘配置
2.1 晶振配置
其他為預設配置
2.2 時鐘樹配置
外部晶振配置8MHz,系統時鐘PLL倍頻到168MHz。
2.3 系統配置
時基源選擇:TIM14
滴答定時器用于FreeRTOS
2.4 中斷配置
(STM32中斷,及FreeRTOS中斷優先級配置:https://blog.csdn.net/ybhuangfugui/article/details/99827056)
1、STM32中斷優先級數值越小,優先級越大
2、FreeRTOS任務優先級是數值越大,優先級越高
3、定時器TIM配置
3.1 TIMER1六路帶死區PWM
Slave Mode選擇Tigger Mode,Trigger Source選擇ITR2。即TIM3(Encoder)内部觸發啟動
TIM1計數器
Channel4選擇PWM Genneration No Output模式。此通道生成PWM,上升沿觸發ADC注入通
道采樣。
中心 對齊模式:
當選擇中心對齊計數模式1時,隻在向下計數過程中發生比對動作時才置位比較事件标志CC4IF;
當選擇中心對齊計數模式2時,隻在向上計數過程中發生比對動作時才置位比較事件标志CC4IF;
當選擇中心對齊計數模式3時,在向上/向下計數過程中發生比對動作時都會置位比較事件标志CC4IF。當然,比較事件标志被置位時可以觸發中斷或DMA請求
(原文連結:https://blog.csdn.net/weixin_38106263/article/details/108787090)
(第32章 TIM—進階定時器—零死角玩轉STM32-F429系列:https://www.cnblogs.com/firege/p/5805894.html)
Repetition Counter(重複計數):
RepetitionCounter=1時,表示延長一倍的時間。
(STM32 定時器中TIM_RepetitionCounter 作用詳解:https://blog.csdn.net/longgyue/article/details/80161380)
Counter Period :(斬波頻率10KHz)
TIM1CLK / (PwmFreq * 2) = 168 * 10^6 / (10 * 10^3 * 2) = 8400
Dead Time :
0x94=10010100
【7:5】=100 【5:0】=10100=0x14=20
DTG[7:5]=100 => DT=(64+DTG[5:0]) * Tdtg = (64+20) * 2 / (168 * 10^6) = 1us
// 啟動TIM1 PWM各通道
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
// 啟動觸發ADC采樣PWM
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
// 啟動TIM1定時器溢出中斷
HAL_TIM_Base_Start_IT(&htim1);
3.2 TIMER3 編碼器模式
// 啟動TIM3編碼器中斷
HAL_TIM_Encoder_Start_IT(&htim3, TIM_CHANNEL_ALL);
(STM32 編碼器模式詳解:https://blog.csdn.net/xuzhexing/article/details/107152512)
3.3 TIMER8 霍爾傳感器模式
(【MM32】定時器:霍爾傳感器接口與六步算法https://blog.csdn.net/chendu103/article/details/107689028
BLDC開發筆記3.霍爾接口與觸發換相:
https://www.cnblogs.com/ckk-blog/p/13837457.html)
// 啟動TIM4霍爾傳感器中斷
HAL_TIMEx_HallSensor_Start_IT(&htim4);
4、ADC配置
4.1 規則通道配置
采樣時間:1/(84/4)3=0.143us
ADC轉換總時間:1/(84/4)(3+15)=0.857us
開啟DMA:
4.2 注入通道配置
采樣觸發方式:TIM1 CC4上升沿
ADC轉換時間:1/(84/4)*(3+15)=0.857us
// 啟動ADC1注入通道采樣中斷
HAL_ADCEx_InjectedStart_IT(&hadc1);
5、CANopen總線配置
5.1 CAN驅動配置
// 啟動CAN1
HAL_CAN_Start(&hcan1);
// 使能CAN1 FIFO0接收中斷
HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
5.2 TIM5定時器配置
定時中斷周期Period = (13999+1) / (84 * 10^6 / (5+1)) = 1ms
// 啟動定時器TIM5中斷
HAL_TIM_Base_Start_IT(&htim5);
5.3 CanFestival移植即對象字典生成
(CANopen STM32移植:https://blog.csdn.net/qq_27620407/article/details/109021175)
(STM32無系統移植CanFestival小白教程:https://blog.csdn.net/weixin_43072093/article/details/115245443)
(CANOpen協定詳解(一):CANfestival源碼分析:https://blog.csdn.net/u012846795/article/details/121008265)
(CANOpen協定詳解(二):協定具體内容:https://lixiaoyao.blog.csdn.net/article/details/121008306)
6、SPI3配置
6.1 預驅DRV8301(DRV8303)
6.2 磁編碼器AS5047
7、全速USB(虛拟序列槽)
8、GPIO配置
9、FreeRTOS配置
(【FreeRTOS】STM32CubeMX配置STM32FreeRTOS(一):https://blog.csdn.net/weixin_41865104/article/details/107399420)
9.1 添加Task
9.2 添加隊列Quene
9.3 添加二值信号量
9.4 添加互斥信号量
10、NVIC中斷配置