這是我嵌入式應用的一個項目,使用STM32CubeMX和keil軟件進行編程。斷斷續續花了好幾天完成,期間踩了很大hal庫的坑和proteus的坑。
感覺做這個仿真的人很少,現在把資源分享給大家,因為程序還在修改還沒有提交,所以先分享一下我粗略的設計思路
一、設計思路: 使用STM32CubeMX軟件進行資源初始化(Cube資源配置很方便),使用HAL庫進行程序設計。 圖1 資源配置圖 二、功能介紹:
三、功能的實現方法: - 可調轉速通過可調電阻和STM32的ADC功能,實現500-4596范圍的速度調節。使用的是簡單的比例控制,并未使用復雜的PID控制(太難了,一直調不好)。
- 通過定時器1的PWM互補輸出六路PWM控制電機的轉動,驅動器使用L293D和IRF540 MOS管。
- 換向使用的是外部中斷,測速使用的是定時器2的三鹿輸入捕獲,這里有一個坑,proteus中三路輸入捕獲無法同時工作,本來打算三路都做測速邏輯,但是速度變化很大,所以最后只使用了一路作為測速通道。
- 正反轉使用的是外部中斷。
- 顯示轉速和目標轉速使用的是lcd1602,在proteus仿真中,顯示轉速有一定的延時和誤差(其實是proteus的仿真太慢了,多開一個任務就慢的要死)
圖2 電機剛啟動,速度未達到最小速度500
速度未達到最小速度時加載很快,大概加載到300rpm左右開始pid控制。
圖3 仿真過程中 圖4 仿真過程中
圖5 反轉時的調速過程
仿真過程中可以看到定時器PWM輸出之間的切換以及脈寬的變化。 圖6 接近穩定時 圖7 穩定后增大轉速 圖8 反轉時接近穩定
由于proteus中stm32 的定時器計時很坑,延時根本不對,需要修改芯片的時鐘源頻率,改大了仿真慢,改小了又不準,所以ADC采樣值和轉速之間只能近似轉換,也造成了目標轉速和實際轉速的誤差。 圖9 整體電路圖
以上的Word格式文檔51黑下載地址:
設計報告.docx
(755.87 KB, 下載次數: 190)
2020-1-9 17:13 上傳
點擊文件名下載附件
|