找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6970|回復(fù): 6
收起左側(cè)

stm32源碼:L298N利用PID驅(qū)動(dòng)直流電機(jī)帶光電編碼器

  [復(fù)制鏈接]
ID:338925 發(fā)表于 2018-11-25 22:35 | 顯示全部樓層 |閱讀模式
直流電機(jī)帶光電編碼器。

單片機(jī)源程序如下:
  1. #include "delay.h"
  2. #include "stm32f10x.h"
  3. #include "sys.h"
  4. #include "timer.h"
  5. #include "usart.h"
  6. #include "encoder.h"
  7. #include "oled.h"
  8. #include "pwm.h"
  9. #include "control.h"
  10. #include "led.h"
  11. #include "key.h"

  12. extern int Target_velocity;
  13. extern u16  Encoder;             //左右編碼器的脈沖計(jì)數(shù)
  14. extern u16  Moto1;                 //電機(jī)PWM變量

  15. u8 t=0;         
  16. float speed;

  17. int main(void)
  18. {                
  19.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級(jí)分組2
  20.   
  21.         delay_init();                     //延時(shí)函數(shù)初始化          
  22.         KEY_Init();                  //初始化與按鍵連接的硬件接口
  23.         OLED_Init();
  24.         uart_init(9600);                    //=====串口初始化
  25.   Encoder_Init_TIM2();            //=====編碼器接口
  26.        
  27.         TIM3_Int_Init(99,7199);          //10ms
  28.        
  29.         IN2=1;
  30.   IN1=0;
  31.        

  32.         LED_Init();                          //初始化與LED連接的硬件接口
  33.        
  34.         TIM1_PWM_Init(7199,0);//不分頻。PWM頻率=72000/(899+1)=80Khz

  35.     while(1)
  36.            {
  37.                          
  38.                          speed = Encoder*100/4/13/30;           
  39.                          printf("speed:%0.2f rad/s\r\n",speed); //x100/4/13/30 //13線(xiàn)  30減速比  4分頻
  40.                          
  41.                          OLED_ShowString(0,0,"speed:",16);
  42.                    OLED_ShowNum( 16,0,speed,3,16);
  43.                    OLED_ShowString(48,0,"rad/s",16);
  44.                    OLED_Refresh_Gram();//更新顯示到OLED                          
  45.                          
  46.                        
  47.                         t=KEY_Scan(0);                //得到鍵值
  48.                         switch(t)
  49.                         {                                 
  50.                                 case KEY0_PRES:  Target_velocity++;  break;
  51.                                 case KEY1_PRES:  Target_velocity--;  break;
  52.                                 default:                        delay_ms(10);       
  53.                         }                         
  54.                 }
  55. }                 
復(fù)制代碼

所有資料51hei提供下載:
a基于PID的調(diào)速直流電機(jī)成品.rar (317.7 KB, 下載次數(shù): 256)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:163153 發(fā)表于 2018-12-16 20:47 | 顯示全部樓層
樓主,能夠提供一下詳細(xì)的調(diào)試過(guò)程嗎?我按照你的程序接線(xiàn),然后發(fā)現(xiàn)電機(jī)不能正常工作
回復(fù)

使用道具 舉報(bào)

ID:338925 發(fā)表于 2018-12-21 23:27 | 顯示全部樓層
這個(gè)小項(xiàng)目應(yīng)該算是比較經(jīng)典的,如果能一步步解決問(wèn)題,對(duì)入門(mén)stm32以及后面做項(xiàng)目都能提供思路上的幫助。當(dāng)初我調(diào)試的時(shí)候,代碼寫(xiě)完發(fā)現(xiàn)電機(jī)不能正常工作,最后問(wèn)題竟然出現(xiàn)在程序初始化的過(guò)程中,把出波的定時(shí)器初始化寫(xiě)在其他前面就會(huì)出問(wèn)題(即TIM1_PWM_Init(7199,0);),寫(xiě)到后面就一切正常了。后來(lái)過(guò)了幾個(gè)月我又要用到的時(shí)候,用這個(gè)代碼又不能正常工作了,后來(lái)改了下限幅就正常工作。我推薦大家可以先屏蔽調(diào)PID初始化那部分,手動(dòng)給電機(jī)賦占空比,看能不能正常工作,再?lài)L試加上PID部分。硬件也是一大問(wèn)題,沒(méi)有共地就可能出問(wèn)題。總之分成一個(gè)個(gè)小區(qū)塊一步步來(lái),應(yīng)該可以實(shí)現(xiàn)的。
回復(fù)

使用道具 舉報(bào)

ID:723250 發(fā)表于 2020-10-14 09:54 | 顯示全部樓層
看著有點(diǎn)懵。PWM直接驅(qū)動(dòng)電機(jī)么?接上PA12 PA13沒(méi)有效果。。
回復(fù)

使用道具 舉報(bào)

ID:504645 發(fā)表于 2020-10-14 14:03 | 顯示全部樓層
ussrarmy2009 發(fā)表于 2020-10-14 09:54
看著有點(diǎn)懵。PWM直接驅(qū)動(dòng)電機(jī)么?接上PA12 PA13沒(méi)有效果。。

要電調(diào)
回復(fù)

使用道具 舉報(bào)

ID:903206 發(fā)表于 2021-4-14 23:08 來(lái)自觸屏版 | 顯示全部樓層
想知道文件里有仿真嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表