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