標(biāo)題:
STM32直流電機(jī)電流、速度雙閉環(huán)控制系統(tǒng)源程序
[打印本頁]
作者:
hongmiao4552
時(shí)間:
2017-12-5 15:10
標(biāo)題:
STM32直流電機(jī)電流、速度雙閉環(huán)控制系統(tǒng)源程序
我的課程設(shè)計(jì)——實(shí)現(xiàn)直流電機(jī)電流、速度雙閉環(huán)控
stm32單片機(jī)源程序如下:
#include "stm32f10x.h"
#include "PID_Current.h"
#include "UserConfiguration.h"
//定義一個(gè)位置式PID算法
void PID_LocationMode1(PID_LocationMode* PID)
{
if(PID->kp<0) PID->kp = -PID->kp;
if(PID->ki<0) PID->ki = -PID->ki;
if(PID->kd<0) PID->kd = -PID->kd;
PID->errP = PID->errNow;
PID->errI += PID->errNow;
if(PID->errILim!=0)
{
if(PID->errI > PID->errILim) PID->errI = PID->errILim;
if(PID->errI < -PID->errILim) PID->errI = -PID->errILim;
}
PID->errD = PID->errNow - PID->errOld;
PID->errOld = PID->errNow;
PID->out = PID->kp*PID->errP + PID->ki*PID->errI + PID->kd*PID->kd;
}
s32 adc_Tag, adcNow,adcControl; //設(shè)定adc電壓值,通過電流傳感器獲取到adc電壓值,pwm控制
PID_LocationMode PID_Current; //定義PID算法的結(jié)構(gòu)體
extern u32 adcx; //得到adc的值
void UserPIDCurrentControl(s32 adc)
{
adc_Tag=adc; //設(shè)定adc電壓值
adcNow=adcx;
//通過電流傳感器得到adc電壓值
PID_Current.errNow = adc_Tag - adcNow; //實(shí)際電壓和設(shè)定電壓差值
PID_Current.errILim = 49999; //積分上限
PID_Current.kp = 0; //寫入比例系數(shù)
PID_Current.ki = 0.15; //寫入積分系數(shù)
PID_Current.kd = 0; //寫入微分系數(shù)
PID_LocationMode1(&PID_Current);
adcControl = PID_Current.out; //得到PID的值
UserMotorSpeedSetOne(adcControl); //放入PWM,用于收斂速度的控制中
}
復(fù)制代碼
主程序:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "UserConfiguration.h"
#include "UserFunction.h"
#include "lcd.h"
#include "exti.h"
#include "adc.h"
#include "PID_Current.h"
//PWM輸出實(shí)驗(yàn)
u32 spd_now=0;
u32 set_spd=3300,set_vol=300,PwmOne_Set;
enum {flag_add,flag_minus,flag}FLAG_SPEED;
enum {flag_zheng,flag_fan,flag_stop}FLAG_DIR;
extern char s;
u32 adcx;
float av;
int main(void)
{
// u8 i=0,key;
delay_init(); //延時(shí)函數(shù)初始化
KEY_Init();
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(9600); //串口初始化為9600
LED_Init(); //LED端口初始化
Adc_Init(); //ADC初始化
TIM1_PWM_Init(4999,71);
EXTIX_Init();
LCD_Init();
POINT_COLOR=RED;
TIM3_Int_Init(9999,719);
FLAG_DIR=flag_zheng; //開始是正轉(zhuǎn)
FLAG_SPEED=flag;
while(1)
{
Motor_A=PWM_A;
// UserPIDCurrentControl(set_vol) ;
av=adcx*3.3/4096;
LCD_ShowxNum(130,100,spd_now,8,16,0); //nowspd;時(shí)時(shí)速度
LCD_ShowxNum(130,130,set_spd,8,16,0); //設(shè)定速度
LCD_ShowxNum(130,160,3600,8,16,0); //電機(jī)最大速度
LCD_ShowxNum(130,190,adcx,8,16,0);
LCD_ShowxNum(130,230,av*1000,8,16,0);
LCD_ShowxNum(130,250,PwmOne_Set,8,16,0);
LCD_ShowString(50,160,100,12,16,"Max_Speed:");
LCD_ShowString(50,100,100,12,16,"Now_Speed:");
LCD_ShowString(50,130,100,12,16,"Set_Speed:");
LCD_ShowString(50,190,100,12,16,"ADC:");
LCD_ShowString(50,230,100,12,16,"Voltage:");
adcx=Get_Adc_Average(ADC_Channel_2,10000);
//按鍵設(shè)置標(biāo)量速度
if(FLAG_SPEED==flag_add)
{
FLAG_SPEED=flag;
set_spd+=10; //加速
}
else if(FLAG_SPEED==flag_minus)
{
FLAG_SPEED=flag;
set_spd-=10; //減速
}
if(set_spd>=3600)
{
set_spd=3600;
}
if(set_spd<=0)
{
set_spd=0;
}
//按鍵設(shè)置跟隨電流的大小
switch(KEY_Scan(1))
{
case KEY0_PRES: set_vol+=10; break;
case KEY1_PRES: set_vol-=10; break;
default: break;
}
if(set_vol>=1000)
{
set_vol=1000;
}
else if(set_vol<=0)
{
set_vol=0;
}
// delay_ms(10);
}
}
復(fù)制代碼
所有資料51hei提供下載:
直流電機(jī)電流、速度雙閉環(huán)控制系統(tǒng).rar
(362.84 KB, 下載次數(shù): 304)
2017-12-5 20:17 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
電氣技術(shù)小白
時(shí)間:
2018-5-8 13:05
請(qǐng)問樓主有硬件資料么?
作者:
電氣技術(shù)小白
時(shí)間:
2018-5-8 13:06
請(qǐng)問樓主有硬件資料么
作者:
tfl0328
時(shí)間:
2018-5-12 10:58
好東西,感謝!
作者:
bg4abz
時(shí)間:
2018-5-13 10:53
一直在找這資料,謝謝了
作者:
三電子
時(shí)間:
2018-7-10 13:02
謝謝樓主分享
作者:
Hu187
時(shí)間:
2018-7-11 18:14
請(qǐng)問樓主使用什么軟件寫的代碼
作者:
wanever
時(shí)間:
2018-7-11 20:54
感謝樓主分享
作者:
jubaolun
時(shí)間:
2019-1-30 18:34
謝謝分享,學(xué)習(xí)了
作者:
Brevent
時(shí)間:
2019-5-12 17:23
感謝分享!
作者:
wishhe320
時(shí)間:
2019-11-13 14:28
不是說的電流和速度雙閉環(huán)嗎,咋變成了電流和位置了
作者:
51lt
時(shí)間:
2019-11-16 09:10
請(qǐng)問樓主使用的是無刷直流電機(jī)嗎
作者:
尹家琪
時(shí)間:
2019-12-26 13:01
超有用
作者:
yoqsh
時(shí)間:
2020-11-16 15:32
看看有沒有幫助。。。。
作者:
mick32
時(shí)間:
2022-4-5 05:16
This is Keil project
can you post schematic for motor board ?
Thank you
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1