久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

直流電機脈寬調速

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年04月28日   【字體:

測試環境MPLAB IDE v8.73
測試芯片:PIC16F877A
所需器件


PIC16F877A單片機最小系統
 


L298N電機驅動模塊


4P杜邦線


最終的主要的電路實物連接圖


最終測試圖



電路連接圖:
 對應程序一的電路原理圖

程序一:簡單實現兩個電機的正反轉,未加調速。
#include <pic.h>       //調用頭文件,可以去PICC軟件下去查找PIC16F87XA單片機的頭文件
__CONFIG(XT&WDTDIS&LVPDIS);    //定義配置字,晶振類型:XT,關閉開門狗,禁止低電壓編程
/*宏定義區*/
#define IN1 RB7//Left Motor
#define IN2 RB6//Left Motor
#define IN3 RB5//Right Motor
#define IN4 RB4//Right Motor
/*相關函數聲明部分*/
void delay_ms(unsigned int ms);//聲明延時函數
void IO_Config(void);//聲明IO配置函數
void Motor_Go_Forward(void);//聲明前進函數
void Motor_Go_Back(void);//聲明后退函數
void Motor_Turn_Left(void);//聲明左轉函數
void Motor_Turn_Right(void);//聲明右轉函數
//-----------------------------------------
//Name: 系統主函數  
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void main(void)
{
     IO_Config();//調用IO配置函數
     while(1)
    {
        Motor_Go_Forward();//小車前進
        Motor_Go_Back();//小車后退
        Motor_Turn_Right();//小車右轉
        Motor_Turn_Left();//小車左轉
    }
}
//-----------------------------------------
//Name: 延時函數
//Description:to delay time  
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
void delay_ms(unsigned int ms)
{
 while(--ms);
}
//-----------------------------------------
//Name: IO配置函數 
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void IO_Config(void){
 TRISA = 0B11111111;  //RA0-RA7設置為輸入
 TRISB = 0B00001111;  //RB0-RB3設置為輸入,RB4-RB7設置為輸出
 TRISC = 0B00000000;  //RC0-RC7設置為輸出
 TRISD = 0B00000000;  //RD0-RD7設置為輸出
 PORTB = 0B00000000;  //RB初始化輸出或輸入低電平 
 PORTC = 0B00000000;  //RC初始化輸出低電平
 PORTD = 0B00000000;  //RD初始化輸出低電平
 
}
//-----------------------------------------
//Name: 前進函數 
//Description:Left Motor↑ Right Motor↓ 
//Created By: xd
//Email: 58969288@qq.com
//Date: 20104-04-05
//-----------------------------------------
void Motor_Go_Forward(void){
 IN1 = 0;
 IN2 = 1;
 IN3 = 0;
 IN4 = 1; 
}
//-----------------------------------------
//Name: 后退函數 
//Description:Left Motor↓ Right Motor↓ 
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void Motor_Go_Back(void){
 IN1 = 1;
 IN2 = 0;
 IN3 = 1;
 IN4 = 0; 
}
//-----------------------------------------
//Name: 右轉函數
//Description:Left Motor↑ Right Motor↓  
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void Motor_Turn_Right(void){
 IN1 = 1;
 IN2 = 0;
 IN3 = 0;
 IN4 = 1; 
}
//-----------------------------------------
//Name: 左轉函數 
//Description:Left Motor↓ Right Motor↑ 
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void Motor_Turn_Left(void){
 IN1 = 0;
 IN2 = 1;
 IN3 = 1;
 IN4 = 0; 
}
 
程序二:可以實現直流電機的調速,這里在上面的原理基礎上,將L298N模塊的ENA和ENB連接的短接冒拔下來,將ENA接在RC1上,ENB接在RC2上。
#include <pic.h>//調用頭文件
__CONFIG(XT & WDTDIS & LVPDIS);//定義配置字,晶振類型:XT,關閉開門狗,禁止低電壓編程
/*宏定義區*/
#define IN1 RB7//Left Motor,L298N模塊的IN1
#define IN2 RB6//Left Motor,L298N模塊的IN1
#define IN3 RB5//Right Motor,L298N模塊的IN1
#define IN4 RB4//Right Motor,L298N模塊的IN1
 
/*相關函數聲明部分*/
void IO_Config(void);//聲明IO配置函數
void PWM_Init(void);//聲明PWM初始化函數
void Motor_Speed_Config(unsigned char PWM1,unsigned char PWM2);//聲明電機速度調節函數
//-----------------------------------------
//Name: 系統主函數  
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void main(void)            //主函數,單片機開機后就是從這個函數開始運行
{
IO_Config();//調用IO端口配置函數
PWM_Init();//調用PWM初始化函數
while(1)               //死循環,單片機初始化后,將一直運行這個死循環
{
//占空比為0%      --傳的實參為0
//占空比為20%    --傳的實參為20
//占空比為40%    --傳的實參為40
//占空比為60%    --傳的實參為60
//占空比為80%    --傳的實參為80
//占空比為100%  --傳的實參為100
 
//當調用void Motor_Speed_Config(unsigned char PWM1,unsigned char PWM2)
//時傳入的兩個參數如果相等的話,左右電機將獲得相同占空比的PWM信號,此時小
//可以前進或者后退;當傳入的兩個參數不相等的話,那么左右電機將獲得不同占空比
//的PWM,獲得的速度也就會不一樣,這樣就會實現小車的左轉或右轉的效果,當
//占空比設置為0時,小車的左右電機停止轉動,可以實現小車停車效果
Motor_Speed_Config(100,100);
}
}
//-----------------------------------------
//Name: PWM初始化函數  
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void PWM_Init(void){
//PWM周期 = (PR2 + 1) * 4 * Tosc * (TMR2預分頻值)
//PWM頻率 = 1/【PWM周期】
//其中Tosc這里為4MHz,TMR2預分頻值下面設置的為1
CCP1CON = 0B00001100; //設置CCP1為PWM模式,PWM占空比bit1:0,bit0:0;
CCP2CON = 0B00001100; //設置CCP2為PWM模式,PWM占空比bit1:0,bit0:0;
PR2 = 99;//頻頻:10.000KHZ周期:0.0001s
 
/*T2CKPS1:T2CKPS0:TMR2時鐘預分頻選擇位*/
/*0 0 = 預分頻值為1*/
/*0 1 = 預分頻值為4*/
/*1 x = 預分頻值為16*/
T2CKPS1 = 0;
T2CKPS0 = 0;//前分頻為1:1
TMR2IF = 0;//清零PIR1寄存器中的TMR2IF中斷標志位
TMR2ON = 1;//啟動TIMER2
//PWM占空比 = (CCPRxL:CCPxCON<5:4>) * Tosc * (TMR2預分頻值)   
CCPR1L = 0;//占空比初始值為0
CCPR2L = 0;//占空比初始值為0
//這里具體說明下占空比的計算方法:例如要設置占空比為80%,這里PWM
//周期設置為0.0001s,0.0001 * 80% = x * 1/4MHz * 1
//計算得到x = 320,因為CCP1CON = 0B00001100或者CCP2CON = 0B00001100;
//這么設置的,那么PWM占空比的bit1:0,bit0:0;CCPR1L或CCPR2L為其bit9-bit2,
//所以寫入CCPR1L或CCPR2L中的值為320除以4等于80,即輸出占空比為80%的PWM信號
//就往CCPR1L或CCPR2L中寫入80,這樣在RC1或RC2引腳上就可以輸出相應占空比的
//的PWM信號,設置PWM頻率為10KHz,有個好處就是,這里計算占空比很容易,設置
 
//占空比的數值和寫入CCPR1L或CCPR2L中的值一樣
/*T2CKPS1:T2CKPS0:TMR2時鐘預分頻選擇位*/
/*0 0 = 預分頻值為1*/
/*0 1 = 預分頻值為4*/
 /*1 x = 預分頻值為16*/
 T2CKPS1 = 0;
 T2CKPS0 = 0;//前分頻為1:1
 TMR2IF = 0;//清零PIR1寄存器中的TMR2IF中斷標志位
 TMR2ON = 1;//啟動TIMER2
}
//-----------------------------------------
//Name: IO配置函數 
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void IO_Config(void){
TRISA = 0B11111111;       //RA0-RA7設置為輸入
TRISB = 0B00001111;    //RB0-RB3設置為輸入,RB4-RB7設置為輸出
TRISC = 0B00000000;    //RC0-RC7設置為輸出
TRISD = 0B00000000;    //RD0-RD7設置為輸出
PORTB = 0B00000000;  //RB初始化輸出或輸入低電平 
PORTC = 0B00000000;  //RC初始化輸出低電平
PORTD = 0B00000000;  //RD初始化輸出低電平
}
//-----------------------------------------
//Name: 電機速度調節函數 
//Description: 
//Created By: xd
//Email: 58969288@qq.com
//Date: 2014-04-05
//-----------------------------------------
void Motor_Speed_Config(unsigned char PWM1,unsigned char PWM2){
CCPR1L = PWM1;
IN1 = 0;
IN2 = 1;
CCPR2L = PWM2;
IN3 = 0;
IN4 = 1; 
}
 
關閉窗口

相關文章

主站蜘蛛池模板: 欧美一区二区三区四区视频 | av国产精品毛片一区二区小说 | 人人干人人超 | 日韩综合在线视频 | 亚洲一区二区三区视频 | 一级特黄在线 | 亚洲国产在 | 久久精品久久久久久 | 中文字幕一区二区三区在线乱码 | av免费在线观看网站 | 日日噜噜噜夜夜爽爽狠狠视频97 | 北条麻妃99精品青青久久主播 | 日韩欧美在线观看 | av中文在线 | 一区欧美 | 国产免费一区二区 | 欧美一区二区免费视频 | 欧美在线一区二区三区 | 中文字幕欧美一区 | 久久久久久网站 | 国产永久免费 | 精品国产一区二区三区免费 | 国产精品一区二区久久久久 | 国产一区不卡在线观看 | 波多野结衣精品在线 | 别c我啊嗯国产av一毛片 | 久久婷婷香蕉热狠狠综合 | 色综合成人网 | 欧美日韩国产高清 | 可以在线观看av的网站 | 免费一区二区三区在线视频 | 日韩视频在线一区 | 欧美精品一区二区三区四区 在线 | 国产欧美一区二区三区在线看 | 伊人网在线综合 | 91视频免费| 九九视频网 | 99精品亚洲国产精品久久不卡 | 97av视频在线观看 | 国产免费看 | 盗摄精品av一区二区三区 |