摘要:較高時,電機運行連續(xù)平穩(wěn)噪音小,但器件功耗會隨頻率升高而增大較低時,利于降低功耗,并能提高調(diào)速線性度,但過低的頻率可能導致電機轉(zhuǎn)動連貫性的降低。通常時,器件能夠穩(wěn)定的控制電機。
一、驅(qū)動芯片介紹
TB6612?的的用法:
? ? ?TB6612?是雙驅(qū)動,也就是可以驅(qū)動兩個電機下面分別是控制兩個電機的?IO?口:STBY?口接單片機的?IO?口? ?,清零電機全部停止,置?1 /0通過?AIN1?AIN2,BIN1,BIN2?來控制正反轉(zhuǎn)。
二、真值表
三、電路圖?
?
?四、PWM注意事項
(1)器件輸出狀態(tài)在驅(qū)動/制動之間切換時,電機轉(zhuǎn)速和 PWM 占空比之間能保持較好的線性關系,其運行控制效果好于器件在驅(qū)動/停止狀態(tài)之間切換,所以表 1 中的 INl/IN2 一般不采用 L/L 控制組合。
(2)fPWM 較高時,電機運行連續(xù)平穩(wěn)、噪音小,但器件功耗會隨頻率升高而增大;fPWM 較低時,利于降低功耗,并能提高調(diào)速線性度,但過低的頻率可能導致電機轉(zhuǎn)動連貫性的降低。通常 fPWM>1 kHz 時,器件能夠穩(wěn)定的控制電機。
五、廢話不多說上代碼!!
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://電機GPIO管腳初始化函數(shù)/**********************************************************************************/void GPIO_init(void){ //定義管腳的結(jié)構(gòu)體 GPIO_InitTypeDef GPIO_InitStruct; //打開所要使用的時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //將管腳PB4特殊功能關掉 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //配置PB4/5/8/9管腳的參數(shù),用于驅(qū)動電機 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){ //定義定時器的結(jié)構(gòu)體 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定義定時器PWM輸出通道的結(jié)構(gòu)體 TIM_OCInitTypeDef TIM_OCInitStruct; //打開TIME4的時鐘 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的預存寄存器 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //TIME4通道2初始化 TIM_OC2Init(TIM4, &TIM_OCInitStruct); //使能TIME4通道2的預存寄存器 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIME4 TIM_Cmd(TIM4, ENABLE);}/*******************************************************************************************************///小車前進函數(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);} //將設置PWMA的占空比的函數(shù)宏定義#define motor_right_speed(right_speed) {TIM_SetCompare2(TIM4, right_speed);}//將設置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
最后!!!我把代碼注釋詳細點,希望以后看的懂!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/118887.html
摘要:本次實驗的采用的舵機是度伺服,控制關系如下二舵機電路圖三高級定時器產(chǎn)生波相比普通定時器初始化中需要多加兩句重復計數(shù)器的值主輸出使能四代碼電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。 一、舵機工作原理 ? ? 控制信號由接收機的通道進入信號調(diào)制芯片,獲得直流的偏置電壓。它內(nèi)部有一個基準電...
基于STM32f103c8t6和L292N驅(qū)動設計避障小車(核心函數(shù)的建立為自己所寫) 一.項目感觸 完成這個項目自己一開始也是無法從本身上出發(fā),看著這個最小系統(tǒng)板和這個電機驅(qū)動模塊上面想著怎樣實現(xiàn)讓這兩塊板子實現(xiàn)四個電機上面轉(zhuǎn)動呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長的借鑒之路,首先作為一個開發(fā)者,我覺得學習的地方首選是B站,所以我找了相關的做智能小車的視頻 首先是B站智能小車教...
摘要:中央對齊模式向上計數(shù)時當時通道為無效電平,否則為有效電平向下計數(shù)時一旦通道為有效電平,否則為無效電平。一般來說,舵機接收的信號頻率為,即周期為。 STM32——P...
摘要:同時,該模塊中包括小車的加減速以及小車的轉(zhuǎn)向功能。在串口中斷處理程序中,由于我設定的主機指令以一個字節(jié)為單位,故串口檢測到一個字節(jié)的接收時就立即判斷當前指令對應的動作,指令與小車動作的映射見上位機編寫部分。 ...
摘要:前言傳感器工作原理代碼部分電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。電機管腳初始化函數(shù)定義管腳的結(jié)構(gòu)體打開所要使用的時鐘將管腳特殊功能關掉配置管腳的參數(shù),用于驅(qū)動電機。配置管腳的參數(shù)紅外傳感器。 前言:傳感器工作原理: 代碼部分:? ? main.c #include motor....
閱讀 2037·2021-11-19 11:37
閱讀 726·2021-11-11 16:54
閱讀 1176·2021-11-02 14:44
閱讀 3072·2021-09-02 15:40
閱讀 2377·2019-08-30 15:44
閱讀 967·2019-08-29 11:17
閱讀 1068·2019-08-26 14:06
閱讀 1561·2019-08-26 13:47