實驗目的:智能小車通過單片機和電機驅動(L298N)實現PWM調速。
內容分為以下部分:
1.1 電機驅動芯片(L298N)
1.2 調速原理
1.3 PWM調速原理圖
1.4 操作流程
1.5 編程思路及調速代碼
1.6 實際接線
1.1 電機驅動芯片(L298N)
L298N是ST公司生產的一種大電流、高電壓的電機驅動芯片。該芯片采用15腳封裝。其主要特點:輸出電流大;工作電壓高;內含兩個H橋高電壓大電流全橋式驅動器,可驅動直流電動機或步進電動機;采用TTL標準邏輯電平信號控制;有兩個使能端,在不受輸入信號影響的情況下允許或禁止電機工作;有一個邏輯電源輸入端,使內部邏輯電路部分在低電壓下工作;可外接檢測電阻,將變化量反饋給控制電路。
若要對直流電機進行PWM調速,需設置IN1和IN2,確定電機的轉動方向,然后對使能端輸出PWM脈沖,即可實現調速。
1.2 調速原理
PWM(晶體管脈寬調制)控制,一般是配合H橋驅動電路來實現直流電機的調速功 能,這種調速方法簡單、調速范圍廣,它是利用了直流斬波原理。
直流電機的轉速與附加在電機上的端電壓成正比,電壓低,轉速慢;電壓高,轉速快。而電機兩端的端電壓又與單片機輸出的控制波形的占空比成正比,所以,直流電機的轉速與占空比成正比例。占空比越小,電機轉速越慢,當占空比達到最大值1時,電機轉速達到最大。并通過單片機自帶的串行口接收主機傳輸過來的控制智能小車運動方向和速度(即占空比)的信號,方便、及時、可靠、簡潔地控制智能小車的運動狀態。
1.3 PWM調速原理圖
L298N
CPU
1.4 操作流程
打開KEIL→建立工程→創建main.c文件→編程→project→Options→Output→選中生成HEX文件→build檢查一下,并生成HEX文件→普中ISP中找到對應的.hex文件,程序下載到小車的板子上。
1.5編程思路及調速代碼
編程思路:在程序中用單片機的IO口模擬出PWM信號來,也就是控制IO口輸出的高低電平的時間,利用不同時間實現不同占空比,繼而控制驅動電路,改變電機的轉速。
有兩種方法控制調速,一個是用中斷程序,一個是用延時函數
(1)使用中斷程序的代碼如下:
#include<reg52.h>
unsigned char pwm_left_val = 150;//左電機占空比值0~170之間越小越快
unsigned char pwm_right_val = 50;//右電機占空比值0~170之間越小越快
unsigned char pwm_t;//周期
sbit IN1=P0^0; //宏定義端口將IN1定義P0.0端口
sbit IN2=P0^1; //宏定義端口將IN2定義P0.1端口
sbit IN3=P0^3; //宏定義端口將IN3定義P0.3端口
sbit IN4=P0^4; //宏定義端口將IN4定義P0.4端口
sbit EN1=P0^2; //宏定義端口將EN1定義P0.2端口
sbit EN2=P0^5; //宏定義端口將EN2定義P0. 5端口
void forword () //讓電機正轉函數
{
IN1=1;
IN2=0; //讓左電機正轉
IN3=1;
IN4=0; //讓右電機正轉
}
void Time1 (void) interrupt 1 //定時器中斷服務程序
{
Pwm_t++; //每次給周期加一
if(pwm_ t == 255) //pwm_t加到最大值
pwm_t=EN1=EN2=0; //將三個值清零
if(pwm_left_val==pwm t) //判斷左電機占空比與周期pwm_t相等就給EN1使能
EN1=1;
if(pwm_right_val==pwm_t) //判斷右電機占空比值與pwm_t相等就給EN2使能
EN2=1;
}
void main (void)
{
TMOD|= 0x02; //8位自動重裝
TH0 = 220; //給定時器0高八位220
TL0 = 220; //給定時器0低八位220
TR0=1; //啟動定時器0
ETO=1; //允許定時器0中斷
EA = 1; //打開總中斷
while (1)
{
forword() ; //調用函數讓電機正轉
}
}
(2)使用延時函數的代碼如下:
|