標(biāo)題:
stm32使用L298N控制直流電機(jī) PID
[打印本頁]
作者:
Wu_g_s
時間:
2021-1-9 10:03
標(biāo)題:
stm32使用L298N控制直流電機(jī) PID
利用PID控制直流編碼電機(jī)
直流電機(jī)帶光電編碼器。
單片機(jī)源程序如下:
#include "delay.h"
#include "stm32f10x.h"
#include "sys.h"
#include "timer.h"
#include "usart.h"
#include "encoder.h"
#include "oled.h"
#include "pwm.h"
#include "control.h"
#include "led.h"
#include "key.h"
extern int Target_velocity;
extern u16 Encoder; //左右編碼器的脈沖計數(shù)
extern u16 Moto1; //電機(jī)PWM變量
u8 t=0;
float speed;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級分組2
delay_init(); //延時函數(shù)初始化
KEY_Init(); //初始化與按鍵連接的硬件接口
OLED_Init();
uart_init(9600); //=====串口初始化
Encoder_Init_TIM2(); //=====編碼器接口
TIM3_Int_Init(99,7199); //10ms
IN2=1;
IN1=0;
LED_Init(); //初始化與LED連接的硬件接口
TIM1_PWM_Init(7199,0);//不分頻。PWM頻率=72000/(899+1)=80Khz
while(1)
{
speed = Encoder*100/4/13/30;
printf("speed:%0.2f rad/s\r\n",speed); //x100/4/13/30 //13線 30減速比 4分頻
OLED_ShowString(0,0,"speed:",16);
OLED_ShowNum( 16,0,speed,3,16);
OLED_ShowString(48,0,"rad/s",16);
OLED_Refresh_Gram();//更新顯示到OLED
t=KEY_Scan(0); //得到鍵值
switch(t)
{
case KEY0_PRES: Target_velocity++; break;
case KEY1_PRES: Target_velocity--; break;
default: delay_ms(10);
}
}
}
復(fù)制代碼
作者:
admin
時間:
2021-1-9 15:37
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
forest-float
時間:
2021-1-14 14:38
這個就有點和標(biāo)題不符合了吧,就一個主函數(shù),什么算法,電路圖都沒有
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1