導航:首頁 > 源碼編譯 > stm32pid控制電機源碼

stm32pid控制電機源碼

發布時間:2022-07-18 20:28:16

㈠ RM3510減速電機用 STM32怎麼控制啊 .我不理解將一個幀發給電調後,它是如何處理的。

stm32隻是處理器,還得選用其他配件。下面針對入門人員DIY大四軸(採用無刷電機)的製作框架。
處理器一般為stm32f103,姿態感測器為mpu6050,遙控採用航模的4通道遙控,無刷電機驅動電調。stm32首先讀取mpu6050測得的姿態數據,然後加入pid控制,使機體保持穩定。stm32控制電機是通過電調實現的。遙控的接收機與stm32的通信,網上有教程。

㈡ stm32控制電機並且能夠實現手機APP控制電機的開發板有哪些

stm32控制電機並且能夠實現手機APP控制電機的開發板有哪些?STM32控制電機本身比較簡單了,但是加上手機APP控制的話,就有點麻煩了,第一你要會使用wifi模塊,其他你還要會開發APP,我前段時間做了類似的項目,找了一個STM32單片機wifi開發板http://www.hx-wl.com.cn/stm32wifi/學習了,裡面好像有上面的案例,提供單片機源碼和APP源碼,對於我這種新手幫助比較大了,希望對你有幫助。

㈢ 那個前輩有通過stm32控制步進電機正反轉以及轉到一定步數的程序。大一小白要進行科創,好多不懂

您好,我研究電機多年!現為您解答:可以這樣說,PWM對步進電機幾乎沒什麼太大作用,因為步進電機不像直流電機那樣通過改變電壓來改變轉速,步進電機是有工作時序的,而且步進電機需要驅動電路的,你輸入的PWM信號對驅動晶元來說只是個時序信號,最終輸出的電壓大小還是驅動電路實現的,所以用PWM調節步進電機簡直就是畫蛇添足,瞎給自己找麻煩!如果想改變步進電機的速度可以通過改變每兩個脈沖之間的延時時間來實現。如果想改變步進電機的扭矩可以通過改變步進電機的工作節拍來實現!一般單四拍力矩最小,雙四拍力矩最大,半步8拍力矩稍小於雙四拍,但是步進解析度要高一倍!
望採納,謝謝!

㈣ 如何用stm32控制步進電機

集體看你使用什麼步進電機驅動晶元了,STM32隻負責給驅動晶元發送信號,驅動晶元發出驅動信號給電機。參照驅動晶元手冊,使用對應的方式驅動就行了,有可能是spi,也可能呢是脈沖信號。

㈤ 基於stm32溫度控制系統pid演算法程序

看你會哪種單片機,不過PID通常用C來做,容量太小的單片機運行不了, 通常選高速單片機來做.我見過51的,也見過用STM32來做的

㈥ 誰有STM32 完整的PID案例代碼啊!分享一下!

我給你提供鏈接自己去看看吧!
http://www.openedv.com/posts/list/36701.htm

㈦ 單片機pid演算法控制步進電機的電路圖和程序

//P1.1(T0):Count They Distance
//P0.4:Tx
//P0.5:Rx
#include <C8051F310.h> //SFR declarations
#include <stdio.h> //Standard I/O definition file
#include <math.h> //Math library file
#include <Intrins.h>
#include <absacc.h>

unsigned int j,i;
char a=0;
unsigned int t=0;

//sbit led=P0^2;
//P0.0(PWM0):給定左輪速度.
sbit vls=P0^4; //P0.4(GPIO):給定左輪方向.
sbit vlf=P0^6; //P0.6(T0) :反饋左輪速度.
sbit dlf=P1^0; //P1.0(GPIO):反饋左輪方向.

//P0.2(PWM0):給定右輪速度.
sbit vrs=P0^5; //P0.5(GPIO):給定右輪方向.
sbit vrf=P0^7; //P0.7(T0) :反饋右輪速度.
sbit drf=P1^1; //P1.1(GPIO):反饋右輪方向.

int ol; //左輪給定值
int len;
int len_1,len_2;
int lyn_1,lyn_2;
int vl1,vl2; //反饋左輪速度值(取樣周期內的方波數)
int lfz; //運算後賦給PWM的值

int lyn,lynn;
int lun=0,lun_1=0; //偏差校正值 即校正PWM輸出
int lunp,luni,lund; //PID 校正值

int or; //右輪給定值
int ren;
int ren_1,ren_2;
int ryn_1,ryn_2;
int vr1,vr2; //反饋右輪速度值(取樣周期內的方波數)
int rfz; //運算後賦給PWM的值

int ryn,rynn;
int run=0,run_1=0; //偏差校正值 即校正PWM輸出
int runp,runi,rund; //PID 校正值

float kp=2.0; //比例系數1.8
float kd=0.2; //微分系數0.4
float lki; //積分系數

void pio_init(void);
void sys_init(void);
void t01_init(void);
void TIME3_INT(void);
void PID(void);
void interrupt_init(void);
void delay(unsigned int x);
void pwm1_1(void);

void main(void)
{
PCA0MD &= ~0x40; //關閉
pio_init(); //P11為測距輸入端
sys_init();
t01_init();
pwm1_1();
TIME3_INT();
interrupt_init();

vls=1;vrs=0;
while(1)
{

ol=50;
or=50;
delay(1000);

ol=100;
or=100;
delay(1000);

ol=-50;
or=50;
delay(1000);

}

}

void PID(void)
{
/****************左輪PID調節******************/
if(dlf==1)
{
lyn=(vl2*256+vl1); //dlf是左輪反饋方向,0表示向前 vl=TL0
}
else
{
lyn=-(vl2*256+vl1); //dlf=1表示是向後退,速度應該為負值
}

len=ol-lyn; //誤差=給定速度-反饋速度(取樣周期內的方波數)

if(abs(len)<8)//30
{
lki=1.4; //ki值的確定1.4
}
else
{
lki=0.05; //積分系數:如果 | 給定值-反饋值 | 太大
} //則就可以不引入積分,或者引入的很小0.05

lunp=kp*(len-len_1); //比例校正
luni=lki*len; //積分校正
lund=kd*(len-2*len_1+len_2); //微分校正

lun=lunp+luni+lund+lun_1; //總校正

/*************新舊數據更新*************************/
len_2=len_1;
len_1=len; //len:當前取樣周期內出現的速度偏差;len_1:上次取樣周期內出現的速度偏差
lun_1=lun; //lun:當前取樣周期內得出的PWM校正值;lun_1:上次取樣周期內得出的PWM校正值
/*************新舊數據更新*************************/

if(lun>255)
{
lun=255; //正速度
}
if(lun<-255)
{
lun=-255; //負速度
}
if(lun<0)

{
vls=1;
PCA0CPH0=-lun;
}

if(lun>=0)
{
vls=0;
PCA0CPH0=lun;
}

/****************右輪PID調節******************/
if(drf==0)
{
ryn=(vr2*256+vr1); //drf是右輪反饋方向,0表示向前 vl=TL0
}
else
{
ryn=-(vr2*256+vr1); //dlf=1表示是向後退,速度應該為負值
}

ren=or-ryn; //誤差=給定速度-反饋速度(取樣周期內的方波數)

if(abs(ren)<8)//30
{
lki=1.4; //ki值的確定1.4
}
else
{
lki=0.05; //積分系數:如果 | 給定值-反饋值 | 太大
} //則就可以不引入積分,或者引入的很小0.05

runp=kp*(ren-ren_1); //比例校正
runi=lki*ren; //積分校正
rund=kd*(ren-2*ren_1+ren_2); //微分校正

run=runp+runi+rund+run_1; //總校正

/*************新舊數據更新*************************/
ren_2=ren_1;
ren_1=ren; //len:當前取樣周期內出現的速度偏差;len_1:上次取樣周期內出現的速度偏差
run_1=run; //lun:當前取樣周期內得出的PWM校正值;lun_1:上次取樣周期內得出的PWM校正值
/*************新舊數據更新*************************/

if(run>255)
{
run=255; //正速度
}
if(run<-255)
{
run=-255; //負速度
}
if(run<0)

{
vrs=1;
PCA0CPH1=-run;
}

if(run>=0)
{
vrs=0;
PCA0CPH1=run;
}
//因為這里的PCA0CPH0越大,對應的電機速度越小,所以要255來減一下
}

void pio_init(void)
{
XBR0=0x00; //0000 0001
XBR1=0x72; //0111 0010 時能弱上拉 T0T1連接到腳口P06、P07 CEX0、CEX1連接到腳口P00、P01

P0MDIN=0xff; //模擬(0);數字(1) 1111 0011
P0MDOUT=0xc3;//開漏(0);推挽(1) 1111 1111
P0SKIP=0x3c; //0011 1100

P1MDIN=0xff; //1111 1111
P1MDOUT=0xfc;//
P1SKIP=0x00; //1111 1111

}

void sys_init(void) //12MHz
{
OSCICL=0x43;
OSCICN=0xc2;
CLKSEL=0x00;

}

void pwm1_1(void) //PWM的初始化
{
PCA0MD=0x08; //PCA時鍾為12分頻

PCA0CPL0=200; //左輪
PCA0CPM0=0x42; //設置左輪為8位PWM輸出
PCA0CPH0=200;

PCA0CPL1=200; //平衡校正
PCA0CPM1=0x42; //設置為8位PWM輸出
PCA0CPH1=200;

PCA0CN=0x40; //允許PCA工作
}

void t01_init(void)
{
TCON=0x50; //計數器1、2允許
TMOD=0x55; //定時器1、2採用16位計數功能
CKCON=0x00;

TH1=0x00; //用於採集左輪的速度
TL1=0x00;

TH0=0x00; //用於採集右輪的速度
TL0=0x00;
}

void TIME3_INT(void)
{
TMR3CN = 0x00; //定時器3為16位自動重載
CKCON &= ~0x40;

TMR3RLL = 0xff;
TMR3RLH = 0xd7;
TMR3L = 0xff;
TMR3H = 0xd7;

TMR3CN |= 0x04;
}

void T3_ISR() interrupt 14 //定時器3中斷服務程序
{
//led=~led;
EA=0;
TCON &=~0x50; //關閉計數器0、1

vl1=TL0; //取左輪速度值
vl2=TH0;

vr1=TL1; //取右輪速度值
vr2=TH1;

TH1=0x00;
TL1=0x00;

TH0=0x00;
TL0=0x00;

PID(); //PID處理

TMR3CN &=~0x80; //清中斷標志位
TCON |=0x50; //重新開計數器0、1
EA=1;
}
void interrupt_init(void)
{ IE=0x80;
IP=0x00;
EIE1|=0x80;
EIP1|=0x80;

}

void delay(unsigned int m) //延時程序
{
for(i=0;i<2000;i++)
{
for(j=0;j<m;j++){_nop_(); _nop_();}
}
}

㈧ 利用stm32實現電機的調速

該調速系統能夠實現對電機的啟動、制動、正反轉調速、測速和數據上傳等功能,可方便地實現直流電機的四象限運行。本系統的性能指標為:調速精度高達到1r/min;調速穩態誤差不超過0.5%;調速范圍為-500~500r/min;串口指令控制方式;驅動電路導通阻抗低,能耗少;運行穩定可靠。系統由電源、上位機、通信介面、控制電路、電機驅動電路、電機與負載和測速裝置等模塊組成,結構框圖如圖1所示。

圖1  系統結構框圖

2、硬體設計
2.1、控制電路設計
控制電路負責接收控制指令,並產生相應的控制信號,同時返回電機速度數據和電機運行狀態數據等。為了保證電路工作穩定可靠,控制電路應具有較高的運行速度、高度可靠的穩定性能、開發容易、高性價比,產生的PWM控制信號應具有死區延時、互補輸出、緊急剎車等功能。STM32系列基於專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARMCortex⁃M3內核,本系統採用STM32F103作為核心控制器。控制電路以STM32F103為核心的最小系統包括STM32主晶元、時鍾電路、復位電路、UART⁃USB轉換電路、JTAG調試介面電路、電源等,其原理圖如圖2所示。

圖2  以STM32F103為核心的控制電路原理圖

2.2、驅動電路設計
根據系統正反轉的控制要求,採用H橋驅動電路,由MOS管構成的H橋驅動電路原理圖如圖3所示。

圖3 由MOS管構成的H橋驅動電路原理圖

MOSFET是電壓控制型器件,具有開關速度快、輸入阻抗高、驅動方便等優點[5]。本系統採用IRF9630和IRF630對管,組成H橋,上橋臂均使用PMOS,下橋臂均使用NMOS,兩種MOS管基本特性如表1所示。

表1H橋MOSFET主要參數表

控制電路的輸出信號為DC3.3V信號,需要與驅動電路隔離,採用了LTV352光電耦合隔離器。互補PWM輸入信號經過光耦隔離作用到MOSFET柵極,從而控制OUTA,OUTB之間的電壓。MOSFET中G,S兩極之間使用了雙向TVS管抑制瞬態電壓,防止MOSFET損壞。由於採用了PMOS,NMOS對管電路,MOSFET柵極電壓是由輸入電壓進行分壓得到,因此不需要採用額外的高電壓信號源

㈨ 增量式PID的stm32實現

版權歸原作者所有。轉載自amobbs。com

㈩ stm32單片機溫度控制pid代碼

STM32的 PID和PWM墨水溫度控制系統 控制方案: K_SENSOR熱電偶作為溫度感測器,50w電烙鐵作為加溫設備作為控制對象,預先設定一個溫度值,微處理器為ARM公司... 查看全部>>

閱讀全文

與stm32pid控制電機源碼相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:573
python員工信息登記表 瀏覽:373
高中美術pdf 瀏覽:156
java實現排列 瀏覽:510
javavector的用法 瀏覽:978
osi實現加密的三層 瀏覽:229
大眾寶來原廠中控如何安裝app 瀏覽:909
linux內核根文件系統 瀏覽:238
3d的命令面板不見了 瀏覽:520
武漢理工大學伺服器ip地址 瀏覽:143
亞馬遜雲伺服器登錄 瀏覽:520
安卓手機如何進行文件處理 瀏覽:67
mysql執行系統命令 瀏覽:925
php支持curlhttps 瀏覽:141
新預演算法責任 瀏覽:441
伺服器如何處理5萬人同時在線 瀏覽:246
哈夫曼編碼數據壓縮 瀏覽:421
鎖定伺服器是什麼意思 瀏覽:382
場景檢測演算法 瀏覽:615
解壓手機軟體觸屏 瀏覽:345