1. 設計基於單片機控制的直流電機閉環PWM調速系統。
STC的單片機有PWM發生單元,可輸出0-255方波,另外還有AD輸入和脈沖採集輸入,簡單做你可以用PWM控制電機驅動,用另外一個定時器通過霍爾開關採集電機轉速,達到閉環控制。若要求精度高,可考慮STM32
2. 基於單片機AT89c51的數字PID控制直流電機PWM調速系統C語言程序
首先弄清楚PID是一種控制演算法!!!
1,「如果用單片機恆溫可以使溫度到達預定值就停止加熱,低了就加熱,用一個溫度感測器反饋,這樣算是一個自動控制嗎」你這是控制系統,但是效果會非常差,尤其是對於溫度控制這種大慣性系統,達到預定值就停止加熱,但是由於慣性,溫度肯定會繼續上升,電爐燒水的時候,水開了,斷電之後水還要沸騰一定時間的(沸騰是很消耗能量的,由此可見如果是加熱的話溫度上升更嚴重,你也可以自己用溫度計試試看);「低了就加熱」是同樣的道理。如果系統對控制精度有要求,你這樣做肯定達不到要求。PID是一種控制演算法,相對於其他控制演算法來說算是最簡單的了。PID能夠做到在溫度快要達到設定值的時候降低加熱功率,讓溫度上升速度變慢,最終穩定在設定值。如果用你的直接控制,溫度會在設定值上下振盪,永遠不會停在設定值。
2,一般的控制系統都需要加反饋,以構成閉環控制系統,相對的還有開環控制系統。開環控制系統,舉個例子,就是你加熱的時候事先計算好大約需要多少熱量,然後考慮一下環境影響,計算出加熱時間,然後控制加熱系統按照你這個時間加熱。你覺得這樣的系統能夠穩定工作嗎?環境稍稍有變動就掛了!開環控制系統的特點就是很容易受到環境的影響;閉環控制系統就穩定很多,你用1L水可用,2L水也行,500W電能用,1000W電爐也能用,這就是閉環的優點。
因此,大多數的控制系統都是閉環的,開環很少單獨使用,即使用到了也是有閉環的。開環其實也是有優點的,開環在控制系統裡面叫做前饋(跟反饋對應的),比如你的系統裡面電源電壓上升了,加熱速度肯定會變快,如果你對電源電壓采樣,將采樣的結果輸入到閉環裡面,對閉環做一個輕微的修正,控制的精度會更好,這就是開環的優勢,它是超前的,能夠預知結果(根據地源電壓提高就能知道需要降低輸出功率了)。
說完這些,你應該明白了,反饋是必需的(前饋也可以要,但是不是必需的),PID不能被取代(除非你用其它更復雜的控制演算法)。
3. 改一下單片機控制PWM直流電機的程序
單片機控制PWM直流電機的程序,具體如下:
PWM控制直流電機實現上來說應該不難,最主要是要求:比如加速度,需要多塊達到設定速度;
一般來講有「開環的查表法」和「閉環的採集實時速度法」;
「開環查表」:前提是知道要達到的速度是哪些,然後去增加(或減少)PWM的占空比來看速度是否和設定的一致,然後將此時的占空比放到表格中,下次需要用時,直接根據設定速度查表格就行;這種控制方法適合於「負載」不變的情況,相對簡單;
「閉環速度採集」:在硬體電路上要有速度採集系統(霍爾元件),根據反饋的速度大小來調節PWM的占空比,這種方法比較精確,適用於不同的「負載」,在控制速度的過程中要小心「超調」,也就是速度加的太快或者太慢(PWM占空比調節太快),可以通過試驗來確定調節的快慢或者引入PID演算法;
控制電機:要了解可控硅的使用。
例子:
51單片機直流電機的PWM速度控製程序的代碼如下:
/* =======直流電機的PWM速度控製程序======== */
/* 晶振採用11.0592M,產生的PWM的頻率約為91Hz */
#include<reg51.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit en1=P2^0; /* L298的Enable A */
sbit en2=P2^1; /* L298的Enable B */
sbit s1=P2^2; /* L298的Input 1 */
sbit s2=P2^3; /* L298的Input 2 */
sbit s3=P2^4; /* L298的Input 3 */
sbit s4=P2^5; /* L298的Input 4 */
uchar t=0; /* 中斷計數器 */
uchar m1=0; /* 電機1速度值 */
uchar m2=0; /* 電機2速度值 */
uchar tmp1,tmp2; /* 電機當前速度值 */
/* 電機控制函數 index-電機號(1,2); speed-電機速度(-100—100) */
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1) /* 電機1的處理 */
{
m1=abs(speed); /* 取速度的絕對值 */
if(speed<0) /* 速度值為負則反轉 */
{
s1=0;
s2=1;
}
else /* 不為負數則正轉 */
{
s1=1;
s2=0;
}
}
if(index==2) /* 電機2的處理 */
{
m2=abs(speed); /* 電機2的速度控制 */
if(speed<0) /* 電機2的方向控制 */
{
s3=0;
s4=1;
}
else
{
s3=1;
s4=0;
}
}
}
}
void delay(uint j) /* 簡易延時函數 */
{
for(j;j>0;j--);
}
void main()
{
char i;
TMOD=0x02; /* 設定T0的工作模式為2 */
TH0=0x9B; /* 裝入定時器的初值 */
TL0=0x9B;
EA=1; /* 開中斷 */
ET0=1; /* 定時器0允許中斷 */
TR0=1; /* 啟動定時器0 */
while(1) /* 電機實際控制演示 */
{
for(i=0;i<=100;i++) /* 正轉加速 */
{
motor(1,i);
motor(2,i);
delay(5000);
}
for(i=100;i>0;i--) /* 正轉減速 */
{
motor(1,i);
motor(2,i);
delay(5000);
}
for(i=0;i<=100;i++) /* 反轉加速 */
{
motor(1,-i);
motor(2,-i);
delay(5000);
}
for(i=100;i>0;i--) /* 反轉減速 */
{
motor(1,-i);
motor(2,-i);
delay(5000);
}
}
}
void timer0() interrupt 1 /* T0中斷服務程序 */
{
if(t==0) /* 1個PWM周期完成後才會接受新數值 */
{
tmp1=m1;
tmp2=m2;
}
if(t<tmp1) en1=1; else en1=0; /* 產生電機1的PWM信號 */
if(t<tmp2) en2=1; else en2=0; /* 產生電機2的PWM信號 */
t++;
if(t>=100) t=0; /* 1個PWM信號由100次中斷產生 */
}
4. 用51單片機控制直流電機的轉動
電路圖就簡單了,只要按照程序去連接就不會有問題。這里需要用到一個H橋電路,注意橋電路中Q1和Q3是PNP型三極體,負電導通。Q2和Q4是NPN型三極體,正電導通。Q1和Q4導通是正傳,Q3和Q2導通是反轉。
#include<stc.h>
#defineucharunsigndechar
#defineuintunsigndeint
sbitzheng=P3^0;//按鍵正轉
sbitfan=P3^1; //按鍵反轉
sbitting=P3^2;//按鍵停
sbitQ1=P3^4;//定義4個IO控制橋電路
sbitQ2=P3^5;
sbitQ3=P3^6;
sbutQ4=P3^7;
sbitled1=P0^0; //定義3個LED燈
sbitled2=P0^1;
sbitled3=P0^2;
voiddaley(ucharz);//延時函數
voidmain()
{
while()
{
if(zheng==0) //電機正轉
{
delay(10);
if(zheng==0);
{
Q2=0;
Q3=1;//這兩句是把反轉關掉
Q1=0;
Q4=1;//這兩句是打開正轉
led1=0;//紅燈亮
led2=1;//其他等關閉
led3=1;//其他等關閉
}
}
if(fan==0) //電機反轉
{
delay(10);
if(fan==0)
{
Q1=1;
Q4=0;//把正轉關掉
Q2=1;
Q3=0;//開反轉
led1=1;//其他等關閉
led2=0;//綠燈亮
led3=1;//其他等關閉
}
}
if(ting==0) //關掉電機
{
delay(10);
if(ting==0)
{
Q1=1;
Q2=0;
Q3=1;
Q4=0;
led1=1;//其他等關閉
led2=1;//其他等關閉
led3=0;//黃燈亮
}
}
}
}
voiddaley(ucharz) //延時函數
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
5. 怎麼用C51單片機控制直流電機詳細解說下,謝謝~~~~
PWM是用來控制變頻器以達到控制交流電機的目的。而要控制直流電動機,如果小功率的電機最簡單的就是用DA加功率放大器或者IGBT直接驅動;如果是大功率電機就需要用單片機加DA加直流電機調速模塊控制。C51單片機如果沒有DA,另加DA,根據控制精度選擇DA位數。
6. 單片機如何控制直流電機的速度
基於模糊PID的直流力矩電機轉速控制。
在分析模糊控制和PID控制結合方式的基礎上,設計一個二維模糊PID控制演算法,該演算法根據誤差信號是否達到閾值來決定何時在模糊控制與PID控制之間切換.採用編碼器、80196KC單片機、16位D/A轉換器和直流力矩電並結合上述控制演算法構成直流力矩電機的模糊PID穩速控制系統.通過對標准PID和模糊PID實測數據分析比較說明,模糊PID控制可以達到無超調輸出,其調節時間小於標准PID控制的調節時間,穩態誤差小於萬分之四.
7. 51單片機控制直流電機。(c語言控制)
有3種方案:
第一種,通過PWM脈寬調制輸出方法控制轉速,控制占空比的大小可以實現調速!
第二種,通過AD轉換的方法控制直流電機的電壓
第三種,用xtr115程式控制電流源來控制直流電機(類似第二種方法)
如果以上的驅動能力不夠的話再加上一個電壓跟隨器!
程序方面就是一個寄存器的配置問題了,你查一下單片機的技術手冊上面都有介紹的,祝你成功
8. 直流電機PID控制實現
pwm調速
方向:橋式電路
轉速顯示:哪種顯示方式?