使用AO3400MOS管的电机驱动电路

使用AO3400MOS管的电机驱动电路

使用AO3400驱动如下图所示的减速直流小电机。
使用AO3400MOS管的电机驱动电路_第1张图片
电路图
使用AO3400MOS管的电机驱动电路_第2张图片
比较经典的电机驱动电路了,AO3400是做为开关使用,SS14是续流二极管保护MOS管,R6为VGS提供偏置电压,说偏置其实不太合适,应是开启电压,还起到泄放电阻的作用,为什么要泄放?因为栅极下面的一层二氧化硅很薄,GS两端有等效电容,少量的静电就可以产生很高的电压,不把这些静电泄放容易把栅极击穿。IN1接单片机IO口,IO输出不同占空比的PWM,就能控制电机的不同速度的旋转。

程序
程序没什么好说的,就是配置IO,使其输出PWM,网上很多,我这边只贴出来。

void MOTOR_Init(void){
	//引脚初始化
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启PA的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//打开复用功能
	GPIO_InitStructure.GPIO_Pin = MOTOR_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(MOTOR_PORT, &GPIO_InitStructure); 
	GPIO_InitStructure.GPIO_Pin = Light_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP
	GPIO_Init(MOTOR_PORT, &GPIO_InitStructure);
	//GPIO_SetBits(MOTOR_PORT,MOTOR_PIN);
	// GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN);
	//定时器2初始化通道四输出PWM
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef OC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	TIM_DeInit(TIM2);											/* 重新启动定时器 */

  TIM_TimeBaseStructure.TIM_Period=1000-1;		 				/* 自动重装载寄存器周期的值(计数值) */
  TIM_TimeBaseStructure.TIM_Prescaler=71;						/* 时钟预分频数 72M/72 */
   // TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 		/* 外部时钟采样分频 */
	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; 
	TIM_TimeBaseStructure.TIM_ClockDivision=0;  
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 	/* 向上计数模式 */
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
	
	OC_InitStructure.TIM_OutputState= TIM_OutputState_Enable;		//输出使能
	OC_InitStructure.TIM_OutputNState=TIM_OutputNState_Disable;//互补输出使能不开
	OC_InitStructure.TIM_OCIdleState= TIM_OCIdleState_Reset; //输出通道空闲电平配置
	OC_InitStructure.TIM_OCMode=TIM_OCMode_PWM1; //输出PWM 采用模式1
	OC_InitStructure.TIM_OCPolarity=TIM_OCPolarity_High;		//输出通道电平极性配置,决定定时器通道的有效电平
	OC_InitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Set;//互补输出通道空闲电平配置
	OC_InitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; //互补输出通道电平极性配置,高电平有效
	TIM_OC4Init(TIM2, &OC_InitStructure); //通道4输出
	TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
	TIM_CtrlPWMOutputs(TIM2, ENABLE);
	TIM_Cmd(TIM2,ENABLE);	
}

你可能感兴趣的:(笔记)