NB6612電機驅動與C8T6連線配置雙電機
個人總結,如有不對,歡迎指正;
NB6612電機驅動可以同時驅動兩個直流電機。
一、電機引腳連線要求
1、STBY口接微控制器的IO口拉低電機全部停止,置1(拉高)通過AIN1 AIN2,BIN1,BIN2 來控制正反轉。
“需要電機轉動時需要給其一個高電平”
2、VM 接12V以內電源 (2.74-10.8V)
3、VCC 接5V電源“供電後電機才會轉”
4、3個GND 接一個電源負極即可
5、PWMA/B 接微控制器的PWM口
6、AIN1/2 ,接微控制器IO口, 驅動電機需要一個拉高(輸入高電平),一個拉低(輸入低電平)
BIN1/2 ,同AIN1/2
輸入真值表
|A/B IN1 | 0 |
A/B IN1 | 0 | 0 | 1 |
---|---|---|---|
A/B IN2 | 0 | 1 | 0 |
停止 | 正轉 | 反轉 |
7、A01 、AO2 接電機1的兩個腳
B01、BO2 接電機2的兩個腳
二、使用STM32F103C8T6如何連線電機驅動使兩個電機轉動
VM–>5v STBY–>3.3v VCC–>3.3v
PWMA–>IO口“配置了該IO口的定時器通道來配置PWM”
PWMB–>IO口“配置了該IO口的定時器通道來配置PWM”
AIN1–>IO口1“配置高或低”
AIN2–>IO口2“可先配置與AIN1相反,使電機轉動,檢查模組和電機是否正常,若想實現其他情況,按照上方真值表配置引數”
BIN1–>IO口3“配置高或低”
BIN2–>IO口4“可先配置與AIN1相反,使電機轉動,檢查模組和電機是否正常,若想實現其他情況,按照上方真值表配置引數”
GND–>GND
A01 、AO2 --> 接電機1的兩個腳
B01、BO2 --> 接電機2的兩個腳
timer.h
#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"
void TIM4_PWM_Init(u16 arr,u16 psc);
void PWM3_Init(u16 arr,u16 psc);
void LED_Init(void);//初始化
#endif
這裡配置定時器通道,我選擇了配置兩個定時器的不同通道。存在的問題:我配置一個定時器的兩個通道,驅動兩個電機時,只有一個可以轉。“找到解決方法後在此處改正”
timer.c
#include "pwm.h"
#include "led.h"
//TIM4 PWM部分初始化
//arr:自動重灌值
//psc:時鐘預分頻數
void TIM4_PWM_Init(u16 arr,u16 psc)
{
//**結構體宣告**//
GPIO_InitTypeDef GPIO_InitStructure; //宣告GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //宣告定時器
TIM_OCInitTypeDef TIM_OCInitStructure; //宣告PWM通道
//**時鐘使能**//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定時器TIM4時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB埠時鐘
//****//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //LED0-->PB.7 埠配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //複用推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根據設定引數初始化GPIOB.7
GPIO_SetBits(GPIOB,GPIO_Pin_7);
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設定在下一個更新事件裝入活動的自動重灌載暫存器週期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設定用來作為TIMx時脈頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設定時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的引數初始化TIMx的時間基數單位
//初始化TIM3 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈衝寬度調製模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC2Init(TIM4, &TIM_OCInitStructure); //根據T指定的引數初始化外設TIM3 OC2
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4_CH2預裝載暫存器
TIM_Cmd(TIM4, ENABLE); //使能TIM3
}
void PWM3_Init(u16 arr,u16 psc) //TIM3的pwm設定和相應的引腳設定
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外設時鐘使能
//設定該引腳為複用輸出功能,輸出TIM3 CH1 的PWM脈衝波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1 //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //複用推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //設定在下一個更新事件裝入活動的自動重灌載暫存器週期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設定用來作為TIMx時脈頻率除數的預分頻值 不分頻
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設定時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的引數初始化TIMx的時間基數單位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈衝寬度調製模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_Pulse = 0; //設定待裝入捕獲比較暫存器的脈衝值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根據TIM_OCInitStruct中指定的引數初始化外設TIMx
TIM_OC4Init(TIM3, &TIM_OCInitStructure); //根據TIM_OCInitStruct中指定的引數初始化外設TIMx
TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主輸出使能
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH1預裝載使能
//CH4預裝載使能
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的預裝載暫存器
TIM_Cmd(TIM3, ENABLE);
}
我這裡的設定的PWM通道為定時器4通道2和定時器3通道1,PWMA和PWMB分別和PB7和PA6連線。
三、如何配置定時器
“輸出PWM是屬於IO口的複用功能,所以在設定GPIO_Mode的時候一定要設定為GPIO_Mode_AF_PP也就是推輓複用。”
PWM輸出配置步驟
1.使能定時器和相關IO口時鐘
2.初始化IO口為複用功能輸出e.g.GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //複用推輓輸出
3.若把IO口作定時器的PWM輸出引腳,故需要重對映配置,故需要開啟AFIO時鐘。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
4.初始化定時器:ARR,PSC等
5.初始化輸出比較引數
6.使能預裝載暫存器`
TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)`
7.使能定時器 TIM_Cmd();
8.不斷改變比較值,來實現不同佔空比的效果
配置定時器通道
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外設時鐘使能
//設定該引腳為複用輸出功能,輸出TIM1 CH1的PWM脈衝波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //複用推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //設定在下一個更新事件裝入活動的自動重灌載暫存器週期的值 80K
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設定用來作為TIMx時脈頻率除數的預分頻值 不分頻
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設定時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的引數初始化TIMx的時間基數單位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈衝寬度調製模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_Pulse = 0; //設定待裝入捕獲比較暫存器的脈衝值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根據TIM_OCInitStruct中指定的引數初始化外設TIMx
TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主輸出使能
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1預裝載使能
TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預裝載暫存器
TIM_Cmd(TIM1, ENABLE); //使能TIM1
main.c
#include "delay.h"
#include "sys.h"
#include "pwm.h"
int main(void)
{
delay_init(); //延時函式初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設定NVIC中斷分組2:2位搶佔優先順序,2位響應優先順序
TIM4_PWM_Init(899,0); //不分頻。PWM頻率=72000000/900=80Khz
PWM3_Init(899,0); //不分頻。PWM頻率=72000000/900=80Khz
LED_Init();
while(1)
{
TIM_SetCompare1(TIM3,150); //TIM4->CCR1=400
TIM_SetCompare2(TIM4,150); //TIM4->CCR2=800
}
}
好,到此結束,接下來我們終於可以看的電機的轉動了!!
相關文章
- 個人電腦虛擬機器連線配置虛擬機
- 數位相機無法與電腦連線
- 雙電機功率分匯流電動拖拉機再生制動策略
- 電腦怎麼連線印表機裝置 電腦連線印表機操作步驟
- 電腦怎麼安裝印表機驅動程式 電腦印表機安裝驅動教程
- 步進電機Linux驅動Linux
- 怎麼用手機藍芽連線電腦 手機藍芽連線電腦的步驟藍芽
- 如何將 MacBook 連線到電視,怎麼把蘋果電腦連線到電視機Mac蘋果
- 暴力風扇無刷電機驅動方案
- fiddler 電腦 手機 連線抓包
- 華為手機如何連線到電腦
- 無線印表機怎麼連線電腦 WIN10連線無線印表機的方法Win10
- 臺式電腦怎麼連線手機熱點 臺式電腦連線手機wifi步驟介紹WiFi
- win10印表機驅動在電腦哪裡找 怎麼檢視電腦印表機驅動詳細教程Win10
- 虛擬機器與電腦主機網路配置虛擬機
- 電腦主機板跳線怎麼接?電腦機箱與主機板跳線接法圖解教程圖解
- win10怎樣設定手機和電腦的連線_win10電腦和手機的連線方法Win10
- 印表機usb連線電腦無法識別怎麼辦 印表機usb連線電腦無法識別的方法
- Arduino A4950 驅動直流電機 超詳細版UI
- 為什麼電腦連線不上手機熱點_電腦連不上手機熱點怎麼解決
- 樹莓派驅動的無人駕駛開發記錄--驅動電機樹莓派
- 基於STM32F1系列,驅動L298N電機驅動板實現直流電機的啟動、停止、調速功能
- 用智慧手機讓桌上型電腦連線無線
- 怎樣允許其他電腦連線本機MySQLMySql
- 電腦機箱風扇電源線接法教程 機箱風扇電源線怎麼接?
- Motor-CAD— 新能源驅動電機快速設計與優化工具優化
- 樹莓派 - L298N模組 驅動直流電機樹莓派
- 配置電信網通雙線雙IP的解決辦法
- iphone手機連線win10電腦充不進去電怎麼辦iPhoneWin10
- Profibus DP主站轉Modbus閘道器連線伺服與電機通訊
- 波士頓動力新版人形機器人Atlas問世,純電驅動機器人
- win10手機連不上電腦怎麼辦_win10電腦無法連線手機的解決方法Win10
- Qt 自動連線機制訊號與槽QT
- Win10電腦關機後USB連線印表機埠消失怎麼辦?Win10
- 筆記本投屏電視機怎麼弄 膝上型電腦連線電視的方法教程筆記
- 通過驅動建立與MySQL的連線MySql
- 無線路由器配置不佳可耗淨手機電量路由器
- 蘋果手機怎麼無線投屏,AirPlay怎麼連線電腦蘋果AI