1 简介
水流量分配器,是用于调节水通路及水流量的装置,是涉及水路调节或分配的电器设备中的重要部件。水流量分配器的核心是控制系统,主要功能是实现水路切换及水流量调节。水流量分配器的控制系统有多种实现形式,步进电机具有转动角度精准可控,转速和力矩线性可调等优点而得到广泛应用。图1是一种基于步进电机控制器的水流量分配器实物图。
图1 基于步进电机控制的水分配器
2 水分配器基本原理
水分配器通过转动进水口和出水口之间的堵水装置,从而改变出水路径和每一路水流量。其工作实现原理示意图如图2所示。
图2 水分配器工作实现原理示意图
3 硬件电路设计
步进电机的硬件驱动电路相对比较简单,以24BJY48-12V型步进电机为例,采用ULN2803A作为驱动芯片的硬件设计说明如下。
首先简单介绍步进电机的编 含义。
24——表示此步进电机的有效最大外径为24毫米;
B——表示表示是步进电机,“步”字的汉语拼音(Bu)开头字母;
Y——表示永磁式,“永”汉语拼音(Yong)开头字母;
J——表示减速型,“减”汉语拼音(Jian)开头字母;
48——表示4相8拍;
12V—表示本步进电机的额定工作电压是直流12V。
以上合作一起就说明这是一款额定工作电压为直流12V的永磁减速步进电机,驱动信 为4相8拍,有效外径是24mm。这种步进电机通常有五根线,其中一根是电源线,其它4根是驱动信 线。
步进电机的驱动电路相对比较简单,电路图如图3所示。
图3 步进电机驱动电路图
需要注意的是在信 的输入端应该设计下拉电阻以防止电机在驱动信 尚未复位或配置前电机发热。另外要考虑脉冲电流较大,在PCB layout时需要增强电流到地的回流能力。
4 软件设计
首先根据步进控制要求列出相位控制矩阵,如:
constmotor_single_step_tc_tSequenceTab[ 4]= { { 1, 1, 0, 0}, //step0 { 0, 1, 1, 0}, //step1 { 0, 0, 1, 1}, //step2 { 1, 0, 0, 1}, //step3 };
这是5线4相电机的简化驱动矩阵,采用4拍控制,更精准的可以采取8拍模式。电机的每一步进的脉冲保持宽度不小于2ms,过小则转动力矩不足,带不动负载,过大则电机转动缓慢。
其次PWM模块输出需要设置成对应相序的高低电平,然后持续一段时间(2-3ms)后输出下一步电平,TIM_SetCompare1(TIM1, PWM_PERIOD);在MCU的IO口输出为0,经过2803反相后输出为1;TIM_SetCompare1(TIM1, 0);在IO口输出为1,经过2803反相后输出为0。
电机正转:step0—> step1—>step2—> step3—> step0循环;
电机反转 step3—> step2—> step1—> step0—> step3循环;
采用STM32F103的驱动软件设计说明如下:
系统配置外部高速8MHz晶振,pll倍频到72MHz主频,系统时钟节拍设为1ms;PWM模块周期为1000uS。
PWM模块配置代码说明如下:
staticvoidnozzle_interface_init( void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE); GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_Init(GPIOB, &GPIO_InitStructure); /* TIM3 Configuration————————————————— ———————————————————————–*/ /* Time Base configuration */ TIM_TimeBaseStructure.TIM_Prescaler = 1; // 72000000 / 2 = 36000000 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 36000– 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; //TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); /* PWM频率72000000/2/36000=1KHZ,周期为1000uS。*/ /* Channel 1, 2,3 and 4 Configuration in PWMmode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC4Init(TIM3, &TIM_OCInitStructure); /* TIM3 counter enable */ TIM_Cmd(TIM3, ENABLE); TIM_SetCompare1(TIM3, 0); TIM_SetCompare2(TIM3, 0); TIM_SetCompare3(TIM3, 0); TIM_SetCompare4(TIM3, 0); /* TIM3 counter enable */ TIM_Cmd(TIM3, ENABLE); /* TIM3 Main Output Enable */ TIM_CtrlPWMOutputs(TIM3, ENABLE); }
配置完成后可以实际测试如下:
TIM_SetCompare1(TIM3, 0); //PWM CH1输出高电平,ULN2803反相后为低驱动步进电机;
TIM_SetCompare1(TIM3, PWM_PERIOD); //PWMCH1输出低电平,ULN2803反相后为高驱动步进电机;
TIM_SetCompare1(TIM3,PWM_PERIOD/2-1); //PWM输出周期为1ms,波形图如图4;
图4 PWM输出波形图
驱动控制代码如下:
voidspray_strength_control(uint8_tchDirection) { staticuint8_ts_chStep = 0; if(chDirection) { s_chStep ++; if( 3< s_chStep) { s_chStep= 0; } } else { if(s_chStep) { s_chStep–; } else{ s_chStep = 3; } } dispatch_control(( uint8_t*)&c_tSequenceTab[s_chStep]); }
应用控制代码编写的基本思想是首先找到水路控制的中心原点,记为0点,以0点位置为中心,步进电机正转特定度数和反转特定度数以对应需要的水路和流量。由于本部分涉及到结构和机械部分,存在较大差异,在系统设计和调试中需要反复测试和调整以实现精准控制。
更多精彩文章阅读
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!