基于stm32f103的 无刷直流电机驱动程序仅供参考
基于STM32的无刷直流电机控制器硬件电路设计及实验研究

基于STM32的无刷直流电机控制器硬件电路设计及实验研究张修太;翟亚芳;赵建周【摘要】The hardware circuit of Brushless DC motor controller is designed by taking STM32F103C8T6 as the core,which mainly includes PWM driving circuits made up of IR2310,inverter circuit formed by IRF3808,speed feedback circuit composed of incremental rotary encoder and so on. Speed servo control system or position servo control system can be composed of BLDM controller with computer or PLC through CAN communication interface or RS232 serial communication interface.By using the hardware in the loop simulation platform built by xPC target,the PI parameters are set up. The Speed servo response performance of the controller is tested. When the speed is 2 400 rpm,the response time of the controller is 0.32 s. The experimental results show that the system has the advantages of high reliability,high stability and fast response speed,which can meet the speed contrd performance requirements of upper limb rehabilitation robot's mechanical arm.%以STM32F103C8T6为核心,设计了无刷直流电机控制器硬件电路.电路主要包括IR2310构成的PWM驱动电路、IRF3808构成的逆变电路、增量式旋转编码构成的速度反馈电路.控制器具有CAN 和RS232通信接口,可与计算机或PLC构成速度或位置伺服系统.利用由xPC目标搭建的半实物仿真平台对PI参数进行整定.测试了控制器的速度伺服响应性能,给定速度为2400 rpm时,控制器响应时间为0.32 s.实验结果表明,系统工作可靠,稳定性好,响应速度快,可以满足上肢康复机器人的机械臂速度控制性能要求.【期刊名称】《电子器件》【年(卷),期】2018(041)001【总页数】4页(P141-144)【关键词】电机控制器;无刷直流电机;STM32;脉宽调制;CAN;PID;xPC目标;半实物仿真【作者】张修太;翟亚芳;赵建周【作者单位】安阳工学院电子信息与电气工程学院,河南安阳455000;安阳工学院电子信息与电气工程学院,河南安阳455000;安阳工学院电子信息与电气工程学院,河南安阳455000【正文语种】中文【中图分类】TP273.5无刷直流电机与有刷直流电机相比,具有功耗低、换向可靠,体积小、重量轻、输出扭矩大,使用寿命长等优点,在工业控制、医疗器械、家用电器等领域有广阔的应用前景。
STM32f103PWM(用于电调)程序

//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<0;//TIM2时钟使能
RCC->APB2ENR|=1<<2;//使能PORTA时钟PA0,PA1,PA2,PA3
GPIOA->CRL&=0XFFFFFFF0;//PA0清除之前的设置
GPIOA->CRL|=0X0000000B;//复用功能输出1011每四位控制一个IO低八位用CRL高八位CRH
//TIM2->CCER|=3<<4;//OC2输出使能,低电平有效
//TIM2->CCER|=3<<8;//OC3输出使能,低电平有效
//TIM2->CCER|=3<<12;//OC4输出使能,低电平有效
TIM2->CR1|=1<<7;//ARPE使能自动重载预装载
TIM2->CR1|=1<<0;//使能定时器2
GPIOA->CRL|=0X000000B0;//复用功能输出
GPIOA->CRL&=0XFFFFF0FF;//PA2清除之前的设置
GPIOA->CRL|=0X00000B00;//复用功能输出
GPIOA->CRL&=0XFFFF0FFF;//PA3清除之前的设置
GPIOA->CRL|=0X0000B000;//复用功能输出
TIM2->ARR=arr;//设定计数器自动重装值
TIM2->PSC=psc;//预分频器不分频
TIM2->CCMR1|=6<<4;//CH1 PWM1模式
TIM2->CCMR1|=6<<12;//CH2 PWM1模式
基于STM32F103的永磁同步电机控制系统设计

一
]
矢量)这8 。 个矢 量将 空 间分 成 了6 区域 , 个 区域 称 个 每
为 一 个 扇 区 。 据 矢 量 合 成 原 理 可知 , 根 在 、 坐 标 系 中 的任 意 一 矢 量都 可 以 由8 基 本 矢 量 中 的 与这 一 个 个
矢 量 相 邻 的2 基 本 矢量 来 合 成 。 个
可 以计算 出 脉冲 宽度 。 本矢 量 的作 用 时 间计 算如 基
下:
r= +『 y+
u 了U + x 了
式 中: 、 表示相 邻 的两个空 问矢量 , 、 表示 相邻 的 这 2 空 间矢量 的 作用 时 间, 1 个 7表示 零 矢量 的作 用时 间 。 0 以第 三 扇 区为 例 , 有 : 则
制 要 求 , 合 S M3 F 0 的特 点 , 实 现 思 路 、 件 电路 设 计 及 软 件 编 程 设 计 进 行 了系统 的 说 明 , 完 整 地 阐述 了交 流 结 T 2 13 对 硬 较
电机 的S WM 控 制 的 实现 。 VP
关 键 词 : T 3 ;VP M ; 磁 同 步 电机 S M 2S W 永
(u a n esy f eh o g , e a me t f l t n sF z o 0 0 , hn) F j n i r t o cn l y D pr n E e r i , uh u 5 1 8 C ia i U v i T o t o co c 3
A sr c : me o f VP M v r be r u n ys s m b s dOl T 3 F 0 o t l r s i u sd. r r igt h q i me t f b t tA a h t do S W ai l fe e c t a q y e a e iS M 2 1 3c nr l i ds se Ac ̄ dn oter ur oe c o e e n o
基于stm32微控制器的直流电机驱动器设计

基于stm32微控制器的直流电机驱动器设计作者:闫要鹏来源:《电子技术与软件工程》2016年第20期摘要在各类电机设备中,直流电机以其良好的调速特性、启动和制动性能,在工业、冶金、机械制造等现代化工业部门得到了广泛的应用;为了增强电机驱动器的精确控制功能和可移植性,本次基于stm32微控制器对直流电机驱动器进行了研究。
【关键词】直流电机精确控制可移植性 stm32微控制器大部分直流电机驱动在系统中集成,依靠控制器对外部参数进行分析处理后输出的驱动指令来实现各种动作,在集成电路的条件下可完成直流电机的保护和驱动,但驱动部分无法移植;本次研究拟设计一种基于stm32微控制器的直流电机驱动器,实现电机控制、检测、保护、通讯、显示为一体,具有响应速度快、控制精度高的特点,同时也保证了可移植性。
1 总设计方案以stm32主控芯片为控制系统,其余组成部分为驱动电路、电源电路、检测电路、显示电路、通信电路等。
该驱动器拟设计成双电机驱动模式,在根据指令完成保护、驱动操作的同时还能对电机运行参数进行实时监测显示和反馈,如图1所示。
2 电路硬件设计2.1 控制系统本驱动器采用STM32F103RCT6微处理器,基于Cortex-M3内核,最高的时钟频率为72MHZ,拥有丰富的外设资源,包含了DMA控制器、ADC、还拥有专用于电机控制的高级定时器,有强大的边沿捕获能力和PWM功能,可以使设计大大的简化,系统总功耗降低;采用SWD仿真接口,引脚更少,连接更为简单安全,代码也能以更快的速度下载到Flash当中。
2.2 驱动电路驱动器采用VNH3SP30芯片作为电机驱动单元,VNH3SP30是意法半导体公司生产的专用于电机驱动的大电流功率集成芯片,最大电流为30A、电源电压高达40V,内含欠压、过压保护电路,具有过热报警输出和自动关断等功能。
STM32单片机通过光耦隔离来实现对驱动芯片的控制和信号反馈,单片机通过控制INA 和INB管脚高低电平来实现电机的正反转及制动,通过PWM信号控制电机转速,ENA和ENB管脚实现芯片的过热、过压、欠压及过流反馈,如图2所示。
基于STM32的电动摩托车无刷直流电机控制器的设计-毕业论文

2015届毕业生毕业论文题目: 基于STM32的电动摩托车无刷直流电机控制器的设计2015 年5月20日摘要电动摩托车具有零排放、低噪声等许多优点,是现代绿色环保交通工具,由于比较方便、快捷,所以许多人选择它作为自己的出行工具,成为大中城市公共交通的补充。
电动摩托车上一般用的都是无刷直流电机,所以电动摩托车控制器的质量非常重要。
本文首先介绍了无刷直流电机结构和换向原理,紧接着介绍了波脉宽调速原理直和流无刷电机的工作原理。
然后做相关的电路图设计,主控芯片的选择、电流检测电路、霍尔位置传感器信号检测电路、电源转换与电压采样电路、电机驱动电路设计、刹车和调速电路设计、STM32 芯片无刷电机控制接口电路,这些电路图设计是控制器的关键部分。
接着叙述了软件部分的设计,主要包括:主程序的设计、过流保护、欠压保护、电制动程序等。
通过输入程序可以改变PWM波的占空比,所以电枢电压的大小也可以调节,进而调节转速。
最后采用STM32单片机为控制核心,设计了电流检测保护电路、位置信号检测电路、电源转换电路、欠压保护电路等,由于单片机成本低、功能强大、运算能力强等优点,提高了控制系统的可靠性的同时,也降低了控制成本。
我们不仅完成电机控制器的设计,同时也加深了相关知识的理解和联系。
关键词:无刷直流电机、stm32、电路设计、目录1、绪论 (3)1.1电动车的现状 (3)1.2研究电动车的意义 (4)1.3本论文的主要工作 (4)2无刷直流电机控制系统的设计 (5)2.1. 直流无刷电机的结构 (5)2.2 直流无刷电机的工作原理和控制方法 (6)2.3 单片机选型 (8)2.4 无刷直流电机选型 (11)3系统硬件电路的设计 (13)3.1硬件系统总体结构设计 (13)3.2电源电路设计 (13)3.3无刷直流电机霍尔位置传感器接口电路设计 (14)3.4 刹车和调速电路设计 (15)3.5过流保护电路 (16)3.6三相全桥驱动电路 (17)3.7 过压、欠压保护电路 (18)4系统软件设计 (19)4.1 系统整体软件设计 (20)4.2直流无刷电机控制的软件设计 (22)4.3系统各部分功能在软件中的实现 (24)4.4 STM32检测霍尔信号和输出PWM软件设计 (25)5.总结和展望 (27)致谢 (29)参考文献 (30)附录 (31)1、绪论1.1电动车的现状随着我国经济的快速发展和城市化进程的加快,机动车保有量逐渐增加,环境污染也因此越来越严重,所以寻找低排放的技术和可再生资源称为一个重要课题。
基于STM32F103的永磁同步电机控制系统设计

ia ib
电机
图 1 控制系统原理图
首先要把电机方程中的同步旋转坐标系从三相 变换为两相(简称为3/ 2 变换)。3/ 2 变换包括了Clarke 变 换和Park 变换,前者是将三相同步旋转坐标系变换到两 相静止坐标系, 后者则是将两相静止坐标系变换到两 相同步旋转坐标系。Clarke 和Park 变换是空间磁场定向
自动化应用 2010 11期 2 7
变频节能及软起动系统
确定I G B T 的动作时间, 从而产生P W M 波。
2 系统硬件组成
本系统由永磁三相同步电动机、以S T M 3 2 F 1 0 3 控制 器为核心的控制电路、定子电流检测环节和以智能功率 模块P M 2 0 C S J 0 6 0 为主的逆变电路等构成。系统的所有控 制和调节全部由STM32F103控制器用软件控制来完成,控 制电路板直接输出S V P W M 信号, 经光电隔离接入驱动电 路板上的I P M模块,驱动P M S M , 实现对空调的变频控制。
式中: Ux、Uy表示相邻的两个空间矢量, Tx、Ty表示相邻的 这2个空间矢量的作用时间, T0表示零矢量的作用时间。 以第三扇区为例, 则有:
求解此方程就得到了在第三扇区由Uα、Uβ表示的 矢量作用时间表达式
其它扇区的求解过程和第三扇区一样, 这样就可 以得到8 个基本矢量的作用时间[ 3 ]。由作用时间便可以
1 系统控制原理 1.1 空间磁场定向控制[1]
为了使控制系统具有良好的变频调速性能, 控制
作者简介:张 程(1982-),硕士,研究方向为信号检测与控制。 收稿日期:2010-10-12 基金项目:福建省汽车与电驱动技术重点实验室开放基 金资助项目(项目编号2010002)
基于STM32的无刷直流电机驱动器设计

基于STM32的无刷直流电机驱动器设计作者:马宗毅曾绍稳来源:《科技创新与应用》2016年第10期摘要:利用主控制器STM32所具有的优势,设计无位置传感器无刷直流电机为控制对象的驱动器,包括功率驱动电路、三相逆变电路、反电动势检测电路和电流与电压监测电路。
该驱动器设计成本较低,具有一定的应用价值。
关键词:STM32;无位置传感器;无刷直流电机1 概述与8位单片机有限指令和性能相比,32位STM32处理器的工作频率达到72MHZ,处理能力达到1.25DMIPS,能实现高端运算能力;与32位DSP高成本和高功效相比,32位STM32处理器具有出众的功耗控制和明显价格优势,同时其内部高度集成,具有创新而丰富的外设,更加利于控制系统的开发。
同时STM32中的STM32F103增强型系列具有专门为实现电机控制的高级定时器,以及转换速度为1MHZ、精度为12位的ADC[1]。
无刷直流电机既具有直流电机调速性能良好、运行效率较高等的特征,又具有交流电机构造简单、故障率低等的特点,具备两者优势,具有广阔应用前景。
无刷直流电机分为有位置传感器和无位置传感器两种,两者相比,后者具有许多优势:缩小了无刷电机的体积和成本;增强了抗干扰能力,扩大在高温、高腐蚀性等特殊场合的使用范围;提高了系统可靠性,降低电机的维护工作量[2]。
本设计以无位置传感器无刷直流电机为控制对象。
2 硬件设计2.1 硬件总体结构利用STM32较强控制性能及丰富外设,使硬件设计较为简单,所占空间较小,进一步降低成本,图1所示为驱动器硬件框图,以STM32为控制核心,包括电源电路、功率驱动电路、三相逆变电路、反电动势检测电路、电流监测电路、电压监测电路和串口通信电路。
在设计中选用STM32F103型号,其I/O口分配为:PA8端口(TIM1_CH1)、PA9(TIM1_CH2)端口和PA10(TIM1_CH3)端口分别与功率驱动电路的高边控制端HIN相连,PD9、PD10和PD11端口分别与低边控制端LIN相连;PA1(ADC1_IN1)、PA2(ADC1_IN2)和PA3(ADC1_IN3)端口与反电动势检测电路相连;PC0(ADC1_IN10)端口与电流监测电路相连;PC1(ADC1_IN11)端口与电压监测电路相连;PD5、PD6端口与通信电路相连;PC6、PC7端口分别与两个LED灯相连,作为警报信息;预留的IO管脚可用于后期的扩展开发。
STM32微处理器基于的直流电机驱动设计方案说明书

inverter bridge;controllingthe three-phase inverter bridge to convert the DC
is the control module. Each module circuit design is on separate PCBs, and the
upper and lower layers can be mutually plugged. This modular design approach
the switch tubes [3].
The drive circuit in this design has the special driver power chip IR2136 as
799
the center, thereby converting the PWM signal of the control module into a
over-current fault conditions. Its input end is compatible with LSTTL and CMOS
logic with a noise filter [4].
Fig.3. IR2136 and its peripheral circuit
800
supply convertsthe5V voltage to 3.3V to supply the CPU, external FLASH, and
hardware watchdog. In addition, the high-precision analog power supply
基于STM32F103的直流无刷电机电流控制

基于STM32F103的直流无刷电机电流控制摘要:STM32F103作为一种高性能、低功耗的微控制器,广泛应用于电机控制领域。
本文基于STM32F103设计了一种直流无刷电机电流控制系统。
通过ADC采样电机电流,通过PID算法控制PWM输出,达到对电机电流进行精确控制的目的。
实验结果表明,该系统可以有效地实现直流无刷电机电流控制,为直流无刷电机控制领域提供了一种有效的解决方案。
关键词:STM32F103、直流无刷电机、电流控制、PWM、PID算法正文:直流无刷电机具有体积小、转速高、效率高等优点,在智能电动工具、汽车电子等领域都有广泛的应用。
在直流无刷电机控制中,电流控制是一项非常重要的控制方法。
本文基于STM32F103设计了一种直流无刷电机电流控制系统。
该系统采用了PID算法控制PWM输出,以达到对电机电流的精确控制。
注意,为了保证控制效果,我们必须在电机电流采样后进行一定的滤波,以消除采样误差及外界干扰,保证系统的稳定性和精度。
本文中,我们使用了一阶低通滤波器进行电流滤波处理。
在硬件方面,我们采用了STM32F103微控制器作为主控核心,配合各类传感器和驱动芯片。
在软件方面,我们采用了Keil MDK-ARM软件开发工具和STM32F1开发包进行开发实现。
实验表明,该系统能够实现对直流无刷电机的稳定电流控制,并能够在实际应用中取得良好的效果。
该系统具有技术先进、成本低廉、易于移植等优点,可以为直流无刷电机控制领域提供一种有效的解决方案。
结论:本文基于STM32F103设计了一种直流无刷电机电流控制系统,采用了PID算法控制PWM输出,以达到对电机电流的精确控制。
实验结果表明,该系统能够有效地实现直流无刷电机电流控制,为直流无刷电机控制领域提供了一种有效的解决方案。
接下来,本文将进一步探讨STM32F103在直流无刷电机电流控制领域的应用。
首先,我们将介绍STM32F103的特点和优势,以及在电机控制中的应用。
基于STM32的无刷直流电机控制器

基于STM32的无刷直流电机控制器发布时间:2014-05-07 作者:周文君官洪运摘要:无刷直流电机是永磁式同步电机的一种。
它既具备交流电机结构简单、运行可靠、维护方便等优点,又具备直流电机运行效率高、调速性能好等特点,而且还有起动力矩大、起动电流小、噪声低、体积小等优点,因此被广泛应用于工业控制领域。
STM32F107系列芯片是具有ARM Cortex-M3内核的可用于工业控制领域的芯片,具有强大的处理能力和丰富的片载外设,非常适合制作低价位的无刷直流电机的控制器。
本文研究了模糊自适应PID控制算法在无刷直流电机中的应用,并设计了低价位的STM32F107VCT6来控制无刷直流电机,完成了无刷直流电机控制器的制作及调试工作。
实验结果表明,与传统的PID控制相比,模糊自适应PID控制的无刷直流电机控制系统具有转速响应快,超调量小等优点,使系统对扰动和参数变化都具有较强的鲁棒性,达到了较好的控制效果;而且基于STM32的控制器价位低。
关键词:无刷直流电机;自适应;PID控制;参数自整定;STM320 引言无刷直流电机的起动力矩大,起动电流小,运行效率高,调速性能好,噪声低,体积小,被广泛应用于工业生产控制领域。
但是,它又具有时变性、非线性、强耦合等特点,传统的PID 控制难以达到控制器的性能要求。
本文在传统的PID 控制基础上采用模糊自适应算法,自动实现对PID参数的自整定。
学者们研究出了许多以单片机或DSP 为核心的数字控制器。
然而,以单片机为核心的控制器虽然性能好,但运算速度和内存有限,难以运行许多复杂的控制算法;以DSP (Digital Signal Processor)为核心的控制器虽然可以实现一些复杂的控制算法,但是DSP芯片的成本相对较高,设计复杂,研发周期长,成本高。
意法半导体公司在2007 年推出了最新的32 位闪存微控制器——STM32系列芯片,使用ARM 公司最新的突破性的Cortex-M3 内核,能满足现代嵌入式系统的要求,并且特别为无刷直流电机提供了 6 路脉宽调制信号(PWM)输出。
基于stm32的电动摩托车无刷直流电机控制器的

2015届毕业生毕业论文题目: 基于STM32的电动摩托车无刷直流电机控制器的设计2015 年5月20日摘要电动摩托车具有零排放、低噪声等许多优点,是现代绿色环保交通工具,由于比较方便、快捷,所以许多人选择它作为自己的出行工具,成为大中城市公共交通的补充。
电动摩托车上一般用的都是无刷直流电机,所以电动摩托车控制器的质量非常重要。
本文首先介绍了无刷直流电机结构和换向原理,紧接着介绍了波脉宽调速原理直和流无刷电机的工作原理。
然后做相关的电路图设计,主控芯片的选择、电流检测电路、霍尔位置传感器信号检测电路、电源转换与电压采样电路、电机驱动电路设计、刹车和调速电路设计、STM32 芯片无刷电机控制接口电路,这些电路图设计是控制器的关键部分。
接着叙述了软件部分的设计,主要包括:主程序的设计、过流保护、欠压保护、电制动程序等。
通过输入程序可以改变PWM波的占空比,所以电枢电压的大小也可以调节,进而调节转速。
最后采用STM32单片机为控制核心,设计了电流检测保护电路、位置信号检测电路、电源转换电路、欠压保护电路等,由于单片机成本低、功能强大、运算能力强等优点,提高了控制系统的可靠性的同时,也降低了控制成本。
我们不仅完成电机控制器的设计,同时也加深了相关知识的理解和联系。
关键词:无刷直流电机、stm32、电路设计、目录1、绪论 (3)1.1电动车的现状 (3)1.2研究电动车的意义 (4)1.3本论文的主要工作 (4)2无刷直流电机控制系统的设计 (5)2.1. 直流无刷电机的结构 (5)2.2 直流无刷电机的工作原理和控制方法 (6)2.3 单片机选型 (8)2.4 无刷直流电机选型 (11)3系统硬件电路的设计 (13)3.1硬件系统总体结构设计 (13)3.2电源电路设计 (13)3.3无刷直流电机霍尔位置传感器接口电路设计 (14)3.4 刹车和调速电路设计 (15)3.5过流保护电路 (16)3.6三相全桥驱动电路 (17)3.7 过压、欠压保护电路 (18)4系统软件设计 (19)4.1 系统整体软件设计 (20)4.2直流无刷电机控制的软件设计 (22)4.3系统各部分功能在软件中的实现 (24)4.4 STM32检测霍尔信号和输出PWM软件设计 (25)5.总结和展望 (27)致谢 (29)参考文献 (30)附录 (31)1、绪论1.1电动车的现状随着我国经济的快速发展和城市化进程的加快,机动车保有量逐渐增加,环境污染也因此越来越严重,所以寻找低排放的技术和可再生资源称为一个重要课题。
基于STM32直流电机控制程序

/* TIM2_CH3 toggling with frequency = 732.4 Hz */
if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
capture = TIM_GetCapture3(TIM2);
TIM_OC1Init(TIM4,&TIM_OCInitStructure); //PWM_L初始化
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应
TIM_OCInitStructure.TIM_Pulse=PWM_R; //左轮PWM的占空比
在梦里,她吃着她的乳儿的婚酒,
坐在辉煌的结彩的堂上,
而她的娇美的媳妇亲切的叫她“婆婆”
…………
大堰河,深爱她的乳儿!
大堰河,在她的梦没有做醒的时候已死了。
她死时,乳儿不在她的旁侧,
她死时,平时打骂她的丈夫也为她流泪,
五个儿子,个个哭得很悲,
她死时,轻轻地呼着她的乳儿的名字,
大堰河,已死了,
她死时,乳儿不在她的旁侧。
STM32直流减速电机控制
直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制,以后的文章中会专门叙述)。
因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。
STM32F103DS1302驱动程序

#include "stm32f10x_conf.h"#include "mrhh_f1.h"#include "HPF_TIME.h"#include "HpfDS1302Drive.h"//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯F103IO¿ÚÅäÖÃ// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------#if 1#define clkreset GPIOE->BRR=GPIO_Pin_1#define clkset GPIOE->BSRR=GPIO_Pin_1#define rstreset GPIOE->BRR=GPIO_Pin_2#define rstset GPIOE->BSRR=GPIO_Pin_2#define datreset GPIOE->BRR=GPIO_Pin_0#define datset GPIOE->BSRR=GPIO_Pin_0#define datred GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)//¶ÁÈ¡Êý¾Ý#define DS1302Enable HpfDS1302WritByte(control_add,0x80) //´ò¿ª±£»¤#define DS1302DisEnable HpfDS1302WritByte(control_add,0x00)//¹Ø±Õ±£»¤#define testdat 0x25#define cheaken 0#endif#define dstim 1Ds1302Time DSTime={21,16,1,1,12,0,0,1};void HpfDS1302PinInData(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//ÉÏÀ-ÊäÈëGPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStructure);}void HpfDS1302PinOutData(void){GPIO_InitTypeDef GPIO_InitSyructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitSyructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÃâÊä³öGPIO_InitSyructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitSyructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitSyructure);}void HpfDS1302PinClkRst(void){GPIO_InitTypeDef GPIO_InitSyructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitSyructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÃâÊä³öGPIO_InitSyructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;GPIO_InitSyructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitSyructure);}void HpfDS1302Init(void){HpfDS1302PinClkRst();clkreset;rstreset;//¼Ä´æÆ÷Ö±½ÓÅäÖÃÊä³öµÍµçƽ}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯Ð´ÈëÒ»¸öµØÖ·ºÍÊý¾Ý// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------void HpfDS1302WritByte(u8 addr,u8 data) //дÈëÊý¾ÝÔÚÉÏÉýÑØÓÐЧ{u8 i;HpfDS1302PinOutData();addr&=0xfe; //дÊý¾Ý£¬µØÖ·×îµÍλΪ¸ßrstreset;clkreset;HpfDealyUs(dstim);rstset;HpfDealyUs(dstim);for(i=0;i<8;i++) // дÈëµØÖ·{clkreset;HpfDealyUs(dstim);if(addr&0x01)datset;elsedatreset;clkset;HpfDealyUs(dstim);addr>>=1;// HpfDealyUs(10);}for(i=0;i<8;i++) //дÈëÊý¾Ýdata{clkreset;HpfDealyUs(dstim);if(data&0x01)datset;elsedatreset;clkset;HpfDealyUs(dstim);data>>=1;}rstreset; //Í£Ö¹×ÜÏßclkreset;}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯¶ÁÈ¡Ò»¸öÊý¾Ý// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------u8 HpfDS1302ReadByte(u8 addr)//¶ÁÈ¡Ò»¸öÊý¾ÝÔÚϽµÑØÓÐЧ£¬Ð´ÈëµØÖ·ÔÚÉÏÉýÑØÓÐЧ{u8 i,tem=0;addr|=0x01; //¶ÁÊý¾Ý£¬µØÖ·×îµÍλΪ1rstreset;clkreset;HpfDealyUs(dstim);rstset; //Æô¶¯×ÜÏßHpfDealyUs(dstim);HpfDS1302PinOutData();for(i=0;i<8;i++){clkreset;HpfDealyUs(dstim);if(addr&0x01)datset;elsedatreset;clkset;HpfDealyUs(dstim);addr>>=1;}HpfDS1302PinInData();for(i=0;i<8;i++){clkreset;HpfDealyUs(dstim);if(datred)tem|=0x80;if(i<7)tem>>=1;clkset;HpfDealyUs(dstim);}rstreset;clkreset;return tem;}u8 HpfDSBCDToNum(u8 BCD) //8421BCDÂëת»»ÎªÊý×Ö{u8 temp,temp1;temp1=BCD&0x0f;temp=((BCD&0xf0)>>4)*10+temp1;return temp;}u8 HpfDSNumToBCD(u8 NUM) //Êý×Öת»»Îª8421BCDÂë{u8 temp;temp=((NUM/10)<<4)|(NUM%10);return temp;}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯»ñÈ¡Óû§Ê±¼ä²¢×ª»»ÎªbcdÂë²¢¸´ÖƵ½DS1302bufferÖÐ// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------void HpfDSTimrSet(void){HpfWTime *p;Ds1302Time *s;p=GetWRTime();s=&DSTime;s->century=p->MyYear/100+1;s->year=HpfDSNumToBCD(p->MyYear-(s->century-1)*100);s->month=HpfDSNumToBCD(p->MyMon);s->day=HpfDSNumToBCD(p->MyDay);s->hh=HpfDSNumToBCD(p->MyHH);s->mm=HpfDSNumToBCD(p->MyMM);s->ss=HpfDSNumToBCD(p->MySS);s->week=HpfDSNumToBCD(GetWNLWeek(p,s->day));}//---------------------------------------------------------------------------------------------------------------// DS1302°ÑbufferÖеÄʱ¼äÊý¾ÝдÈëµ½ds1302ÖÐ// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------void HpfDS1302WritData(void){Ds1302Time *s;s=&DSTime;DS1302DisEnable; //¹Ø±Õд±£»¤HpfDS1302WritByte(sec_add,0x80); //ÔÝͣʱÖÓHpfDS1302WritByte(year_add,s->year);HpfDS1302WritByte(month_add,s->month);HpfDS1302WritByte(day_add,s->day);HpfDS1302WritByte(hh_add,s->hh);HpfDS1302WritByte(min_add,s->mm);HpfDS1302WritByte(sec_add,s->ss);HpfDS1302WritByte(week_add,s->week);HpfDS1302WritByte(RAM_Address29,testdat);DS1302Enable;}//---------------------------------------------------------------------------------------------------------------// DS1302¶Áȡʱ¼äÊý¾Ý²¢×ª»»ÎªÊý×Ö²¢´æÈ뻺´æÆ÷ÖÐ// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------void HpfDS1302ReadData(void){Ds1302Time *s;s=&DSTime;s->year=HpfDSBCDToNum(HpfDS1302ReadByte(year_add));s->month=HpfDSBCDToNum(HpfDS1302ReadByte(month_add));s->day=HpfDSBCDToNum(HpfDS1302ReadByte(day_add));s->hh=HpfDSBCDToNum(HpfDS1302ReadByte(hh_add));s->mm=HpfDSBCDToNum(HpfDS1302ReadByte(min_add));s->ss=HpfDSBCDToNum(HpfDS1302ReadByte(sec_add));s->week=HpfDSBCDToNum(HpfDS1302ReadByte(week_add));}//---------------------------------------------------------------------------------------------------------------// DS1302°Ñʱ¼äͬ²½µ½Óû§Ê±¼ä// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------void HpfDS1302TimeSyn(void){HpfWTime *p;p=GetWRTime();p->MyYear=(DSTime.century-1)*100+DSTime.year;p->MyMon=DSTime.month;p->MyDay=DSTime.day;p->MyHH=DSTime.hh;p->MyMM=DSTime.mm;p->MySS=DSTime.ss;}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯»ñÈ¡»º´æÆ÷µØÖ·// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------Ds1302Time *HpfDS1302GetTime(void){HpfDS1302Init();HpfDS1302ReadData();return &DSTime;}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯RAM²Ù×÷// Ver1.0 By MrHDS// 2016,4.23////bufferΪ»º´æÆ÷µØÖ·£¬ramaddrΪÄÚ´æµØÖ·£¬numΪÁ¬Ðø²Ù×÷µÄ·¶Î§£¬rwΪ1£¬±íʾдÈëÊý¾Ý£¬Îª0±íʾ¶ÁÈ¡Êý¾Ý////////////---------------------------------------------------------------------------------------------------------------void HpfDs1302RamWR(u8 *buffer,u8 ramaddr,u8 num,u8 rw){u8 i;if(ramaddr==RAM_Address29)return;if(rw){for(i=0;i<num;i++){DS1302DisEnable;HpfDS1302WritByte(ramaddr+(i<<1),buffer[i]);DS1302Enable;}}else{for(i=0;i<num;i++)buffer[i]=HpfDS1302ReadByte(ramaddr+(i<<1));}}//---------------------------------------------------------------------------------------------------------------// DS1302Çý¶¯¼ì²éÉ豸ÊÇ·ñºÃ»µ¡£·µ»Ø0±íʾÕý³££¬·µ»Ø1±íʾÊý¾Ý»òÉ豸³öÎÊÌâ//µ±cheakenΪ1ʱ£¬·µ»Ø1±íʾÉ豸Õý³££¬Ê±¼äδ³õʼ»¯£¬·µ»Ø2±íʾӲ¼þ¹ÊÕÏ// Ver1.0 By MrHDS// 2016,4.23//---------------------------------------------------------------------------------------------------------------u8 HpfDS1302Check(void){u8 testnum;// DS1302DisEnable;testnum=HpfDS1302ReadByte(RAM_Address29);// DS1302Enable;if(testnum==testdat)return 0;else{#if cheakenDS1302DisEnable;HpfDS1302WritByte(RAM_Address29,testdat);DS1302Enable;HpfDealyUs(10);testnum=HpfDS1302ReadByte(RAM_Address29);if(testnum==testdat)return 1;#elsereturn 1;#endif}#if !cheakenreturn 2;#endif}。
基于STM32的无刷直流电机驱动板设计

基于STM32的无刷直流电机驱动板设计作者:李曦周冬梅来源:《科技传播》2015年第17期摘要无刷直流电机因体积小,转速高等特点因此应用十分广泛,并且工业控制领域中,直流电机作为执行元件得到了广泛的应用。
设计基于STM32的直流电机驱动系统,驱动系统集成了电机控制、电源、通讯、驱动电路,驱动24V直流电机工作。
关键词 STM32;直流电机;驱动系统中图分类号TM3 文献标识码 A 文章编号 1674-6708(2015)146-0139-02无刷直流电机因其具有快速、可控、高效率、高可靠性和体积小等优点,已经广泛应用于日常生活、汽车、航空、消费电子、医学电子、工业自动化等领域的各种装置和仪表上。
无刷直流电机利用电子换相器取代了机械电刷和机械换向器,不仅有直流电机优点而且也具备了交流电机结构简单,维护方便方便等特点。
本文以STM32作为主控制控制芯片,主控芯片基于Cortex-M3内核,最高的时钟频率为72MHz,拥有丰富的外设资源,包含了7通道DMA控制器、两个12位的ADC、还拥有专用于电机控制的高级定时器1,有强大的边沿捕获能力和PWM功能,可以使设计大大的简化,系统总体功耗降低。
1总体设计方案开发板主要由STM32主控芯片,半桥驱动电路,电源电路,串口通信接口电路,霍尔传感器位置检测电路构成,其总体设计框图如图1所示。
图1 总体设计框图2 电路硬件设计2.1 驱动电路设计驱动电路由IR2103s驱动芯片和半桥电路组成。
IR2103s是高电压、高功率MOSFET和IGBT驱动芯片,具有独立的高端和低端输出通道,其高端电压可达600V,驱动电路如图2所示。
图2 驱动电路电机的控制信号分别由PWMH1、PWML1,PWMH2、PWML2, PWMH2、PWML2连接STM32的PA8,PA9,PA10,PB12,PB14,PB15。
2.2 电源电路设计电源电路包括主控芯片STM32处理器供电电源3.3V,通信接口及霍尔元件检测电路供电电源5.5V,和驱动电路供电电源12V,MOSEFET供电电源24V,主要由TIP122达林顿晶体管和7805s稳压管和AMS1117稳压器把输入电压分别整流为12V,5V和3.3V的电压分别供给驱动电路,STM32控制芯片和串口通信电路,三端线性稳压芯片AMS1117内部还集成了过流保护和限流电路,稳定输出3.3V的电压,内部保护电路完善,为模块稳定工作提供了保证。