摘要:較高時(shí),電機(jī)運(yùn)行連續(xù)平穩(wěn)噪音小,但器件功耗會(huì)隨頻率升高而增大較低時(shí),利于降低功耗,并能提高調(diào)速線性度,但過低的頻率可能導(dǎo)致電機(jī)轉(zhuǎn)動(dòng)連貫性的降低。通常時(shí),器件能夠穩(wěn)定的控制電機(jī)。
一、驅(qū)動(dòng)芯片介紹
TB6612?的的用法:
? ? ?TB6612?是雙驅(qū)動(dòng),也就是可以驅(qū)動(dòng)兩個(gè)電機(jī)下面分別是控制兩個(gè)電機(jī)的?IO?口:STBY?口接單片機(jī)的?IO?口? ?,清零電機(jī)全部停止,置?1 /0通過?AIN1?AIN2,BIN1,BIN2?來控制正反轉(zhuǎn)。
二、真值表
三、電路圖?
?
?四、PWM注意事項(xiàng)
(1)器件輸出狀態(tài)在驅(qū)動(dòng)/制動(dòng)之間切換時(shí),電機(jī)轉(zhuǎn)速和 PWM 占空比之間能保持較好的線性關(guān)系,其運(yùn)行控制效果好于器件在驅(qū)動(dòng)/停止?fàn)顟B(tài)之間切換,所以表 1 中的 INl/IN2 一般不采用 L/L 控制組合。
(2)fPWM 較高時(shí),電機(jī)運(yùn)行連續(xù)平穩(wěn)、噪音小,但器件功耗會(huì)隨頻率升高而增大;fPWM 較低時(shí),利于降低功耗,并能提高調(diào)速線性度,但過低的頻率可能導(dǎo)致電機(jī)轉(zhuǎn)動(dòng)連貫性的降低。通常 fPWM>1 kHz 時(shí),器件能夠穩(wěn)定的控制電機(jī)。
五、廢話不多說上代碼??!
main.c
#include "motor.h"#include "stdio.h"#include "delay.h"#include "stm32f10x.h" u8 UART3_data,UART1_data; u8 UART3_rcv[20],UART3_rcv_count; u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;int main(void){// int left_speed=5,right_speed=5; int speed=5; delay_init(); GPIO_init(); TIME4_init(7199,10); car_go(speed); delay_s(2); car_left(0,2); delay_s(1); car_go(speed); delay_s(2); car_stop(); }
motor.c
#include "motor.h"http://電機(jī)GPIO管腳初始化函數(shù)/**********************************************************************************/void GPIO_init(void){ //定義管腳的結(jié)構(gòu)體 GPIO_InitTypeDef GPIO_InitStruct; //打開所要使用的時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //將管腳PB4特殊功能關(guān)掉 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //配置PB4/5/8/9管腳的參數(shù),用于驅(qū)動(dòng)電機(jī) GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //初始化PB4/5/8/9的管腳 GPIO_Init(GPIOB, &GPIO_InitStruct); //配置PB6/7管腳的參數(shù),用于產(chǎn)生PWM波 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //初始化PB6/7的管腳 GPIO_Init(GPIOB, &GPIO_InitStruct); //管腳全部先置零 GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5); }/***************************************************************************************************************///TIME4的初始化函數(shù)/********************************************************************************************/void TIME4_init(int presc,int arr){ //定義定時(shí)器的結(jié)構(gòu)體 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定義定時(shí)器PWM輸出通道的結(jié)構(gòu)體 TIM_OCInitTypeDef TIM_OCInitStruct; //打開TIME4的時(shí)鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //配置TIME4結(jié)構(gòu)體的參數(shù) TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Prescaler = presc; TIM_TimeBaseInitStruct.TIM_Period =arr; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct); //配置TIME4通道結(jié)構(gòu)體的參數(shù) TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable ; TIM_OCInitStruct.TIM_Pulse =0; //TIME4通道1初始化 TIM_OC1Init(TIM4, &TIM_OCInitStruct); //使能TIME4通道1的預(yù)存寄存器 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //TIME4通道2初始化 TIM_OC2Init(TIM4, &TIM_OCInitStruct); //使能TIME4通道2的預(yù)存寄存器 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIME4 TIM_Cmd(TIM4, ENABLE);}/*******************************************************************************************************///小車前進(jìn)函數(shù)/********************************************************************************************************/void car_go(int speed){ motor_left_speed(speed); motor_right_speed(speed); GPIO_SetBits(GPIOB, GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5);}/****************************************************************************************************************///小車左轉(zhuǎn)函數(shù)/****************************************************************************************************************/void car_left(int motor_left_speed,int motor_right_speed ){ motor_left_speed(motor_left_speed); motor_right_speed(motor_right_speed); GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5);}/****************************************************************************************************************///小車右轉(zhuǎn)函數(shù)/****************************************************************************************************************/void car_right(int motor_left_speed,int motor_right_speed ){ motor_left_speed(motor_left_speed); motor_right_speed(motor_right_speed); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5);}/****************************************************************************************************************///小車停止函數(shù)/****************************************************************************************************************/void car_stop(void){ GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_ResetBits(GPIOB,GPIO_Pin_5);}/****************************************************************************************************************///小車后退函數(shù)/****************************************************************************************************************/void car_back(int speed){ motor_left_speed(speed); motor_right_speed(speed); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_ResetBits(GPIOB,GPIO_Pin_9); GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_ResetBits(GPIOB,GPIO_Pin_4);}/****************************************************************************************************************///延遲一秒函數(shù)/****************************************************************************************************************/void delay_s(int s){ for(;s>0;s--) { delay_ms(1000); }}/****************************************************************************************************************/
motor.h
#ifndef __MOTOR_H__#define __MOTOR_H__//需要調(diào)用的庫#include "stm32f10x_rcc.h"#include "stm32f10x_gpio.h"#include "stm32f10x_tim.h"#include "delay.h"http://宏定義#define PERIOD 10 //周期為10ms,頻率為1Khz#define motor_left_speed(left_speed) {TIM_SetCompare1(TIM4, left_speed);} //將設(shè)置PWMA的占空比的函數(shù)宏定義#define motor_right_speed(right_speed) {TIM_SetCompare2(TIM4, right_speed);}//將設(shè)置PWMB的占空比的函數(shù)宏定義//自定義的函數(shù)void GPIO_init(void);void TIME4_init(int presc,int arr);void car_go(int speed);void car_left(int motor_left_speed,int motor_right_speed );void car_right(int motor_left_speed,int motor_right_speed );void car_stop(void);void car_back(int speed);void delay_s(int s);#endif
最后?。。∥野汛a注釋詳細(xì)點(diǎn),希望以后看的懂!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/118887.html
摘要:本次實(shí)驗(yàn)的采用的舵機(jī)是度伺服,控制關(guān)系如下二舵機(jī)電路圖三高級(jí)定時(shí)器產(chǎn)生波相比普通定時(shí)器初始化中需要多加兩句重復(fù)計(jì)數(shù)器的值主輸出使能四代碼電機(jī)初始化延遲初始化電機(jī)管腳初始化尋跡管腳初始化。 一、舵機(jī)工作原理 ? ? 控制信號(hào)由接收機(jī)的通道進(jìn)入信號(hào)調(diào)制芯片,獲得直流的偏置電壓。它內(nèi)部有一個(gè)基準(zhǔn)電...
基于STM32f103c8t6和L292N驅(qū)動(dòng)設(shè)計(jì)避障小車(核心函數(shù)的建立為自己所寫) 一.項(xiàng)目感觸 完成這個(gè)項(xiàng)目自己一開始也是無法從本身上出發(fā),看著這個(gè)最小系統(tǒng)板和這個(gè)電機(jī)驅(qū)動(dòng)模塊上面想著怎樣實(shí)現(xiàn)讓這兩塊板子實(shí)現(xiàn)四個(gè)電機(jī)上面轉(zhuǎn)動(dòng)呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長(zhǎng)的借鑒之路,首先作為一個(gè)開發(fā)者,我覺得學(xué)習(xí)的地方首選是B站,所以我找了相關(guān)的做智能小車的視頻 首先是B站智能小車教...
摘要:中央對(duì)齊模式向上計(jì)數(shù)時(shí)當(dāng)時(shí)通道為無效電平,否則為有效電平向下計(jì)數(shù)時(shí)一旦通道為有效電平,否則為無效電平。一般來說,舵機(jī)接收的信號(hào)頻率為,即周期為。 STM32——P...
摘要:同時(shí),該模塊中包括小車的加減速以及小車的轉(zhuǎn)向功能。在串口中斷處理程序中,由于我設(shè)定的主機(jī)指令以一個(gè)字節(jié)為單位,故串口檢測(cè)到一個(gè)字節(jié)的接收時(shí)就立即判斷當(dāng)前指令對(duì)應(yīng)的動(dòng)作,指令與小車動(dòng)作的映射見上位機(jī)編寫部分。 ...
摘要:前言傳感器工作原理代碼部分電機(jī)初始化延遲初始化電機(jī)管腳初始化尋跡管腳初始化。電機(jī)管腳初始化函數(shù)定義管腳的結(jié)構(gòu)體打開所要使用的時(shí)鐘將管腳特殊功能關(guān)掉配置管腳的參數(shù),用于驅(qū)動(dòng)電機(jī)。配置管腳的參數(shù)紅外傳感器。 前言:傳感器工作原理: 代碼部分:? ? main.c #include motor....
閱讀 2039·2021-11-19 11:37
閱讀 729·2021-11-11 16:54
閱讀 1179·2021-11-02 14:44
閱讀 3078·2021-09-02 15:40
閱讀 2382·2019-08-30 15:44
閱讀 970·2019-08-29 11:17
閱讀 1073·2019-08-26 14:06
閱讀 1567·2019-08-26 13:47