国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

06:PWM與電機驅動【MSP430F5529】

這篇具有很好參考價值的文章主要介紹了06:PWM與電機驅動【MSP430F5529】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

電機型號:

工作方式:

原理圖以及接線:

根據官方例程,主要代碼為drive.c

#include <drive.h>
/*
 *  函數:PWM_Init()
 *  功能:初始化PWM
 *  P1.2
 *  P1.3
 */
void PWM_Init(void)
{
    //TA0CTL = 0;     //清除以前的設置
    //TA0CTL = MC_1;  //定時器TA選擇為增記數模式

    TA0CTL |= ID_0; //設置分頻系數

    /*設置PWM通道一P1.2的輸出模式*/
    //TA0CCTL1 = OUTMOD_7;    //高電平PWM輸出,占空比設置的是高電平的占空比
    TA0CCTL1 = OUTMOD_3;    //低電平PWM輸出,占空比設置的是低電平的占空比
    P1DIR |= BIT2;          //P1.2為輸出
    P1SEL |= BIT2;          //P1.2為輸出

    /*設置PWM通道二P1.3的輸出模式*/
    TA0CCTL2 = OUTMOD_7;    //高電平PWM輸出
    P1DIR |= BIT3;          //P1.3為輸出
    P1SEL |= BIT3;          //P1.3為輸出

    TA0CTL = TASSEL_2 + MC_1;
}
/*
 * 函數:TAPwmSetPermill(char Channel,unsigned int Percent)
 * 功能:設置每一路的參數
 * 入口參數:
 *          Channel:當前設置的通道數
 *          Percent:PWM有效時間的千分比(0~1000)
 */
void TAPwmSetPermill(char Channel,unsigned int Percent)
{
    unsigned long int Period;
    unsigned int Duty;
    Period = TA0CCR0;
    Duty   = Period * Percent /1000;
    switch(Channel)
    {
        case 1:
            TA0CCR1 = Duty;
            break;
        case 2:
            TA0CCR2 = Duty;
            break;
        case 3:
            TA0CCR3 = Duty;
            break;
        case 4:
            TA0CCR4 = Duty;
            break;
    }
}

drive.h

#ifndef __DRIVE_H
#define __DRIVE_H
#include <msp430.h>
#include <stdio.h>

void PWM_Init(void);
void TAPwmSetPermill(char Channel,unsigned int Percent);

#endif  

main.c

/*
 * 通道1:P1.2
 * 通道2:P1.3
 * 通道1輸出PWM信號,200HZ,20%占空比
 */

#include <msp430.h> 
#include <drive.h>

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer

	PWM_Init();

	TA0CCR0 = 5000;

	TAPwmSetPermill(1,400);     //1通道,40%的占空比
	TAPwmSetPermill(2,500);     //2通道,50%的占空比

	while(1);
}

(后面好像使用的時候會有什么沖突導致1或者2通道無法正常運行,不太記得了,可以到實物上實驗一下子)

下面是智能送藥小車使用PWM驅動電機相關代碼與注釋(在實物中,均能正常運行)

car.h

#ifndef __CAR_H
#define __CAR_H
#include <msp430.h>

void CAR_PWM_Init(void);
void CAR_RUN_Init(void);
void Capture_Init(void);
void CAR_Init(void);

void TAPwmSetPermill(char Channel,unsigned int Percent);

#endif

car.c

#include <car.h>

/*******************************
 * PWM初始化
 * 前輪:  左——P1.2    右——P1.3
 * 后輪:  左——P1.4    右——P1.5
 *******************************/
void CAR_PWM_Init()
{
    TA0CTL |= ID_0;

    P1DIR |= BIT2 + BIT3 + BIT4 + BIT5;
    P1SEL |= BIT2 + BIT3 + BIT4 + BIT5;

    TA0CCTL1 = OUTMOD_7;
    TA0CCTL2 = OUTMOD_7;
    TA0CCTL3 = OUTMOD_7;
    TA0CCTL4 = OUTMOD_7;

    TA0CTL = TASSEL_2 + MC_1 + TACLR;
    TA0CCR0 = 1000;

}
/*
 * 電機控制端GPIO設置
 *           AIN1        AIN2
 *  左前                  P6.0        P6.1
 *  右前                  P6.2        P6.3
 *  左后                  P6.4        P7.0
 *  右后                  P6.5        P6.6
 */
void CAR_RUN_Init(void)
{
    P6DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6;
    P6OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6);

    P7DIR |= BIT0;
    P7OUT &= ~BIT0;
}

/***************************
 * 輸入捕獲:
 * 前輪:  左——P2.0    右——P2.1
 * 后輪:  左——P2.2    右——P3.6
 ***************************/
//IO口存在沖突,待改進,改為兩個PWM以及兩個輸入捕獲端口,解決定時器不足問題
/*void Capture_Init(void)
{
    P2DIR &= ~(BIT4 + BIT5);
    P2SEL |=   BIT4 + BIT5;

    TA2CTL   = MC_2 + TASSEL_2 + ID_0 + TACLR;
    TA2CCTL1 = CM_1 + SCS + CAP + CCIE + CCIS_0;
    TA2CCTL2 = CM_1 + SCS + CAP + CCIE + CCIS_0;

    P3DIR &= ~(BIT5 + BIT6);
    P3SEL |=   BIT5 + BIT6;

    TB0CTL   = MC_2 + TASSEL_2 + ID_0 + TACLR;
    TB0CCTL1 = CM_1 + SCS + CAP + CCIE + CCIS_0;
    TB0CCTL2 = CM_1 + SCS + CAP + CCIE + CCIS_0;
}*/

void CAR_Init(void)//初始化
{
    CAR_PWM_Init();
    CAR_RUN_Init();
    //Capture_Init();
}

void TAPwmSetPermill(char Channel,unsigned int Percent)//選擇通道,設置該通道輸出的占空比,改變小車速度
{
    unsigned long int Period;
    unsigned int Duty;
    Period = TA0CCR0;
    Duty   = Period * Percent /1000;
    switch(Channel)
    {
        case 1:
            TA0CCR1 = Duty;
            break;
        case 2:
            TA0CCR2 = Duty;
            break;
        case 3:
            TA0CCR3 = Duty;
            break;
        case 4:
            TA0CCR4 = Duty;
            break;
    }
}

main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-552933.html

/*
 * 第四個版本
 * 紅外循跡四輪小車,旋轉式轉向,可前進與倒退
 *
 * 下一個版本改進計劃:
 *          小車改為兩個PWM驅動
 *          添加輸入捕獲,更新為閉環(huán)控制
 *          添加PID算法,運動控制更穩(wěn)定
 *          修改定時器工作方式,精確計算時間,計算行駛路程
 *          添加OLED,實時顯示參數
 */

#include <msp430.h> 
#include <car.h>
#include <redled.h>

void delay(int ms);
void RED_LED_Flag(void);

void CAR_F_R(int mode_1);
void CAR_R_F(unsigned int a,unsigned int b,unsigned int c,unsigned int d);
void CAR_TEXT(void);

int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;

	//RED_LED_Init();//開啟紅外功能,初始化
	CAR_Init();
	
	while(1)
	{
	    //RED_LED_Flag();//開啟小車全部功能
	    CAR_TEXT();//測試小車功能
	}
}
void CAR_TEXT(void)
{
    CAR_R_F(200,200,200,200);
    CAR_F_R(0);

}

//延時函數——偽
void delay(int ms)
{
    int i,j;
    for( i = 0; i < ms; i ++)
    {
        for( j = 0; j < 240; j ++);
    }
}

void RED_LED_Flag(void) //小車功能實現
{
    if( (P4IN & BIT1) != 0 && (P4IN & BIT2) != 0)//都識別到黑線
    {
        CAR_F_R(4);     //停止
        CAR_R_F(000,000,000,000);
    }
    if( (P4IN & BIT1) == 0 && (P4IN & BIT2) == 0)//都未識別到黑線
    {
        CAR_F_R(0);     //前進
        CAR_R_F(200,200,200,200);
    }
    if( (P4IN & BIT1) != 0 && (P4IN & BIT2) == 0)//左識別到黑線,左轉
    {
        CAR_F_R(6);     //旋轉左轉
        CAR_R_F(300,300,300,300);
    }
    if( (P4IN & BIT1) == 0 && (P4IN & BIT2) != 0)//右識別到黑線,右轉
    {
        CAR_F_R(5);     //旋轉右轉
        CAR_R_F(300,300,300,300);
    }
}

void CAR_F_R(int mode_1)//控制前后行動,控制IN1,IN2
{
    switch(mode_1)
    {
       case 0://前行
            P6OUT &= ~(BIT0 + BIT2 + BIT4 + BIT5);      //0
            P6OUT |= BIT1 + BIT3 + BIT6;                //1
            P7OUT |= BIT0;
            break;

       case 1://后退
            P6OUT |= BIT0 + BIT2 + BIT4 + BIT5;     //1
            P6OUT &= ~(BIT1 + BIT3 + BIT6);         //0
            P7OUT &= ~BIT0;                         //0
            break;

       case 2://左轉
           P6OUT &= ~BIT0;      //0,P6.0
           P6OUT &= ~BIT1;      //0

           P6OUT &= ~BIT2;      //0,P6.2
           P6OUT |= BIT3;       //1

           P6OUT &= ~BIT4;      //0,P6.4
           P7OUT &= ~BIT0;      //0

           P6OUT &= ~BIT5;      //0
           P6OUT |= BIT6;       //1
           break;

       case 3://右轉
           P6OUT &= ~BIT0;      //0
           P6OUT |= BIT1;       //1

           P6OUT &= ~BIT2;      //0
           P6OUT &= ~BIT3;      //0

           P6OUT &= ~BIT4;      //0
           P7OUT |= BIT0;       //1

           P6OUT &= ~BIT5;      //0
           P6OUT &= ~BIT6;      //0
           break;

       case 4://停止
           P6OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6);      //0
           P7OUT &= ~BIT0;
           break;

       case 5://左旋轉
           P6OUT &= ~BIT0;      //0
           P6OUT |=  BIT1;      //1

           P6OUT |=  BIT2;      //1
           P6OUT &= ~BIT3;      //0

           P6OUT &= ~BIT4;      //0
           P7OUT |=  BIT0;      //1

           P6OUT |=  BIT5;      //1
           P6OUT &= ~BIT6;      //0
           break;

       case 6://右旋轉
           P6OUT |=  BIT0;      //1
           P6OUT &= ~BIT1;      //0

           P6OUT &= ~BIT2;      //0
           P6OUT |=  BIT3;      //1

           P6OUT |=  BIT4;      //1
           P7OUT &= ~BIT0;      //0

           P6OUT &= ~BIT5;      //0
           P6OUT |=  BIT6;      //1
           break;

        default:
            break;
    }
}

void CAR_R_F(unsigned int a,unsigned int b,unsigned int c,unsigned int d)//控制速度
{

    TAPwmSetPermill(1,a);
    TAPwmSetPermill(2,b);
    TAPwmSetPermill(3,c);
    TAPwmSetPermill(4,d);
}

到了這里,關于06:PWM與電機驅動【MSP430F5529】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MSP430F5529——中斷理解

    MSP430F5529——中斷理解

    認識低功耗模式; MSP430的中斷,需要兩個部分,一部分是打開中斷,另外一部分是編寫中斷服務函數 首先我們得知道__bis_SR_register和_BIS_SR是一個玩意。查看宏定義可知 ?_BIS_SR()可傳入的參數 然后我們查看x的值,發(fā)現里面有八個可以傳入的值 我們這里只需要關系GIE就可以

    2024年02月16日
    瀏覽(32)
  • MSP430F5529庫函數學習——串口

    MSP430F5529庫函數學習——串口

    波特率計算網站;導入MSP430Ware,查看例程;原理圖和中文開發(fā)手冊獲取 目錄 GPIO_setAsPeripheralModuleFunctionInputPin()和GPIO_setAsPeripheralModuleFunctionOutputPin 函數聲明 ?作用 參數 selectedPort selectedPins 使用 USCI_A_UART_init() 函數聲明 ?作用 參數 baseAddress param ?USCI_A_UART_enable() 函數

    2024年02月16日
    瀏覽(31)
  • 05:OLED模塊【MSP430F5529】

    05:OLED模塊【MSP430F5529】

    目錄 實物圖 字模取字 ????????字模軟件 ? ? ? ? 取模步驟 ????????1.設置軟件 ????????2.取模 ????????3.輸出數據 ?代碼 type.h oledfont.h oled.h oled.c main.c 下面圖片中,可以看到OLED模塊的四個接口:GND,VCC,SCL,SDA GND VCC SCL SDA 接地 接電源3.3V/5V 接P3.5 接P3.6 ??????

    2024年02月16日
    瀏覽(29)
  • MSP430F5529學習筆記(6)——導入MSP430Ware,查看例程

    MSP430F5529學習筆記(6)——導入MSP430Ware,查看例程

    MSP430WARE下載; 目錄 在線版本 下載MSP430Ware 查看例程 導入例程? 離線版本 下載MSP430Ware ?查看例程 導入例程 MSP430Ware里面有很多例程和庫函數使用手冊,我們可以查看學習。非常重要 (1) 打開CCS——view——Resource Explorer ?之后我們會進入如下界面 (2) ?點擊MSP430——Embe

    2024年02月13日
    瀏覽(26)
  • MSP430F5529庫函數GPIO學習

    MSP430F5529庫函數GPIO學習

    導入MSP430Ware,查看例程;數據手冊以及原理圖獲取 建議不是很了解寄存器的看完我的MSP430F5529學習筆記? 目錄 GPIO_setAsOutputPin() 函數聲明 作用 參數 selectedPort selectedPins 修改的寄存器 使用 與GPIO_setAsOutputPin()參數一致的函數 ?GPIO_setOutputHighOnPin() GPIO_setOutputLowOnPin()

    2024年02月15日
    瀏覽(31)
  • msp430f5529學習筆記(2)時鐘系統(tǒng)

    msp430f5529學習筆記(2)時鐘系統(tǒng)

    寫在前~本章將會詳細的講解msp430f5529單片機的時鐘系統(tǒng)及其使用方法。如有不妥的地方歡迎各位大佬斧正?。?! 目錄 什么是時鐘系統(tǒng)和時鐘源 MSP430f5529時鐘源和時鐘系統(tǒng)介紹 產生時鐘信號的時鐘源: 時鐘配置 ? ? ? ?在單片機中,單片機每開始一個周期的工作就需要一個節(jié)

    2024年02月17日
    瀏覽(21)
  • MSP430F5529學習筆記(五)——串口|UART

    MSP430F5529學習筆記(五)——串口|UART

    ??????? 我們在使用MSP430的時候大家會發(fā)現插上usb線后電腦上有兩個端口標識,那么在進行串口通信時選擇哪個呢。其實如圖所示,上面的端口是用來進行串口通信的,下面的則是用來進行程序的下載,大家在使用的時候多加分辨即可。 ?????????當然熟悉單片機操作的

    2024年02月16日
    瀏覽(27)
  • 【2023電賽備賽】msp430f5529學習筆記(一)

    【2023電賽備賽】msp430f5529學習筆記(一)

    【寫在前】 本人目前是大二在讀生,第一次參加電賽,準備不充分,結果熬了四天,最后成績卻不如人意。有51和32的基礎,然后想立一個flag系統(tǒng)的學習一下主打超低功耗的msp430f5529單片機為比賽做準備(畢竟電賽限制TI的板子)。另一方面也是給電協的后繼者留下一些參考的

    2024年02月11日
    瀏覽(33)
  • MSP430F5529單片機入門學習筆記1

    MSP430F5529單片機入門學習筆記1

    本筆記整理自B站教程 MSP430F5529單片機學習視頻匯總 右邊部分寫錯了,看的時候注意 注意#include“driverlib.h”頭文件時要注意: 添加MSP430F5xx_6xx文件夾到當前工程下 MSP430F5xx_6xx文件夾是在導入的msp430ware_3_80_13_03包中找 把上述MSP430F5xx_6xx文件夾的路徑包含進來 有三個系統(tǒng)時鐘可

    2024年02月06日
    瀏覽(25)
  • MSP430F5529循跡小車 2022電賽 C題

    MSP430F5529循跡小車 2022電賽 C題

    編輯時間2022/8/21 選用材料:主控MSP430F5529、直流減速電機(帶光電編碼器)、TB6612電機驅動、超聲波測距、灰度傳感器、無線透傳、OLED屏顯示。 使用灰度傳感器巡線,超聲波檢測前后車距作為位置環(huán)反饋,通過位置環(huán)調節(jié)前后車距離。 :MSP430?? 循跡?? ?無線串口透

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包