SH79F3213电动车控制器代码功能说明
霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考…… 工程中坐标变换是库,算法是开源的,请知悉
一、整体概述
SH79F3213电动车控制器代码基于SH79F3213单片机开发,专为电动车电机控制打造,融合了霍尔位置检测、电机驱动控制、故障诊断、辅助功能控制等核心模块。代码采用模块化设计,各功能模块职责清晰、协同工作,实现了电动车电机从启动、运行到停机的全流程精准控制,同时具备完善的故障保护机制,保障系统稳定可靠运行。

霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考…… 工程中坐标变换是库,算法是开源的,请知悉

代码整体架构遵循“初始化-运行控制-故障处理”的逻辑流程,在初始化阶段完成硬件寄存器配置、数据初始化、参数校准等工作;运行控制阶段通过实时采集霍尔信号、电流、电压等数据,动态调整电机控制参数,实现电机的平稳运行;故障处理阶段则实时监测系统各类故障,一旦发现异常立即触发保护机制,确保设备和人员安全。
二、核心功能模块详解
(一)系统初始化模块
系统初始化是控制器正常运行的基础,主要包括硬件寄存器初始化和数据初始化两部分,为后续电机控制提供稳定的硬件环境和初始数据支撑。
1. 硬件寄存器初始化(InitSysReg函数)
该函数负责配置SH79F3213单片机的核心硬件寄存器,涵盖系统时钟、I/O端口、定时器、PWM(脉冲宽度调制)、ADC(模数转换)、捕获模块等关键外设,具体功能如下:
- 系统时钟配置:根据预设的时钟参数(如OSC2CLK、PLLMUL等),配置CLKCON、CLKCON1等寄存器,选择系统时钟源(OSC2CLK或PLLCLK)并设置分频系数,确保系统时钟稳定输出,为各外设提供准确的时钟信号。例如,当选择PLLCLK作为系统时钟时,会先将系统切换至OSC2CLK,待PLL稳定锁定后再切换至PLLCLK,避免时钟切换过程中的不稳定问题。
- I/O端口配置:根据I/O端口的功能需求(输入、输出、ADC输入、PWM输出等),配置P0~P5端口的控制寄存器(P0CR~P5CR)、初始电平寄存器(P0~P5)和上拉/下拉使能寄存器(P0PCR~P5PCR)。例如,将霍尔信号输入引脚配置为输入模式并使能上拉电阻,确保霍尔信号稳定采集;将PWM输出引脚配置为PWM模式,为电机驱动提供信号输出通道。
- 定时器配置:配置Timer0~Timer4定时器的工作模式、初始值和分频系数。其中,Timer0作为16位定时器,主要用于延时函数;Timer1作为8位自动重装定时器,用于生成UART通信的波特率;Timer2用于触发ADC采样;Timer3和Timer4则根据系统需求配置为特定的计时或计数模式,为系统提供精准的时间基准。
- PWM配置:配置PWM相关寄存器(PTCON、PWMCON1~PWMCON3、PWMOE等),设置PWM的工作模式(边缘对齐或中心对齐)、频率、死区时间、输出使能等参数。例如,设置PWM频率为特定值以匹配电机驱动需求,配置死区时间避免上下桥臂MOS管同时导通造成短路,使能PWM输出引脚以驱动电机。
- ADC配置:配置ADC相关寄存器(ADT、ADCON1~ADCON2、SEQCON等),设置ADC的采样时钟、采样时间、通道序列等参数,使ADC能够准确采集电机电流、母线电压、转把电压等模拟信号,为电机控制和故障诊断提供数据支持。
- 捕获模块配置:配置捕获模块寄存器(CAPCON1~CAPCON2、CAPSTAT等),设置捕获触发方式(上升沿、下降沿或双边沿)、滤波时间等参数,用于采集霍尔信号的跳变时刻,计算电机的转速和电角度增量。
2. 数据初始化(InitData函数)
该函数对系统运行过程中所需的各类数据进行初始化,包括电机控制参数、PID(比例-积分-微分)控制器参数、故障检测参数等,具体如下:
- 电机控制参数初始化:初始化电机启动参数(如启动角度、启动占空比)、运行参数(如最大占空比、角度累加量初始值)等,确保电机启动平稳,避免启动时电流过大或转速突变。
- PID控制器参数初始化:初始化PID控制器的比例系数(KP)、积分系数(KI)、积分限幅、输出限幅等参数,为电流环、速度环的稳定控制提供初始参数。例如,初始化Id(直轴电流)PID控制器的参数,使电流环能够快速响应电流指令,稳定电机电流。
- 故障检测参数初始化:初始化故障检测相关的计数变量、阈值参数等,如过压、欠压、堵转、霍尔错误等故障的检测阈值和计数初始值,为后续故障诊断模块提供判断依据。
- 辅助功能参数初始化:初始化弱磁控制、过调制、助力控制等辅助功能的参数,如弱磁启动阈值、过调制使能标志、助力等级参数等,确保辅助功能能够根据系统需求正常工作。
(二)霍尔位置检测与角度计算模块
霍尔位置检测与角度计算是电机矢量控制的核心,通过采集霍尔传感器输出的信号,确定电机转子的位置和转速,为电机的精准控制提供角度信息。
1. 霍尔信号采集与处理(ReadIoHall、PositionTest函数)
- 霍尔信号采集:通过指定的I/O端口采集霍尔传感器(HU、HV、HW)输出的信号,得到霍尔状态值(0~7)。在采集过程中,采用多次采样验证的方式(如PositionTest函数中连续5次采集霍尔信号,若值相同则确认当前霍尔位置),避免干扰信号导致的霍尔位置误判。
- 霍尔数据读取与校验:从EEPROM(电可擦除可编程只读存储器)中读取预存的霍尔角度数据和配置信息(如霍尔安装角度偏差、电机类型(60°或120°)),并对读取的数据进行校验。若校验失败(如数据校验和不匹配),则采用默认的固定角度数据,确保系统能够正常获取霍尔角度信息。
- 霍尔数据处理:根据读取的霍尔数据和电机运行方向(正转或反转),对霍尔角度进行处理。例如,当电机反转时,调整霍尔角度的计算方式,确保角度增加方向与电机实际转动方向一致;对于60°电机,根据特定规则调整霍尔电平变化端口和角度值,适配电机的霍尔分布特性。
2. 电角度计算(ComputeHallTime函数)
- 霍尔信号跳变时间捕获:通过捕获模块捕获霍尔信号跳变的时刻,记录相邻两次霍尔信号跳变之间的时间间隔。在捕获过程中,对捕获值进行有效性判断和滤波处理,避免异常值影响时间间隔计算。
- 转速计算:根据霍尔信号跳变的时间间隔和霍尔状态对应的机械角度(通常为60°电角度),计算电机的转速。例如,当霍尔信号从一个状态跳变到下一个状态时,电机转过60°电角度,通过时间间隔可计算出电机的电角速度,进而转换为机械转速。
- 电角度增量计算:根据计算出的转速和PWM周期,计算每个PWM周期内电机转过的电角度增量。在软件中,角度以2π为基值进行标幺化并采用特定的数据格式(如Q32格式)表示,确保角度计算的精度。例如,在16k载波频率下,根据电机转速计算出每个PWM周期内的电角度增量,为电机的实时角度更新提供依据。
(三)电机驱动控制模块
电机驱动控制模块是控制器的核心执行部分,根据霍尔位置检测模块提供的角度信息和电流、电压等采样数据,通过PWM信号控制MOS管的导通与关断,驱动电机按照期望的转速和转矩运行。
1. 电机启动控制(InitStartup函数、StartMotor相关逻辑)
- 启动前准备:在电机启动前,完成霍尔位置初始化、电流环和速度环参数初始化、PWM输出初始化等工作。例如,读取当前霍尔位置,确定电机的初始角度;初始化电流环PID控制器参数,为启动时的电流控制做好准备;配置PWM输出为初始状态,确保启动时PWM信号正常输出。
- 软启动控制:采用软启动方式,逐渐增加PWM占空比,避免启动时电流过大对电机和控制器造成冲击。在启动过程中,实时监测电机的电流和转速,根据电流反馈调整PWM占空比,确保电机平稳启动。例如,启动初期设置较小的PWM占空比,随着电机转速的上升逐渐增加占空比,直至电机达到设定转速。
2. 电机运行控制(PRO_RunControl函数、PWMISR函数)
- 运行状态判断:系统在运行过程中,根据转把电压、电机转速、故障检测结果等信息,判断电机的运行状态(启动、正常运行、减速、停机),并执行相应的控制逻辑。例如,当转把电压增加时,增加PWM占空比以提高电机转速;当转把电压减小或检测到刹车信号时,减小PWM占空比使电机减速。
- 电流环控制:通过ADC采集电机的相电流(Ia、Ib、Ic),将其转换为直轴电流(Id)和交轴电流(Iq),与电流指令进行比较,经过PID控制器计算得到电压指令(Vd、Vq)。再通过Park逆变换和Clarke逆变换,将电压指令转换为三相电压(Va、Vb、Vc),进而生成PWM信号控制MOS管导通,实现电机电流的稳定控制。
- 速度环控制:根据霍尔信号计算的电机转速与转速指令(由转把电压确定)进行比较,经过PID控制器计算得到电流指令(主要是Iq指令),为电流环提供控制目标,实现电机转速的稳定控制。例如,当实际转速低于指令转速时,增加Iq指令以提高电机转矩,从而提高转速;当实际转速高于指令转速时,减小Iq指令以降低转矩,使转速下降至指令值。
- PWM信号生成与更新:在PWM中断服务函数(PWMISR)中,根据电压指令更新PWM的占空比,确保PWM信号能够实时跟踪电压指令的变化。同时,在中断服务函数中还会进行电流采样、角度更新等操作,实现电机控制的实时性。
3. 弱磁控制与过调制(OverSpeedJudge函数、相关弱磁逻辑)
- 弱磁控制:当电机转速达到一定值后,为进一步提高转速,采用弱磁控制策略。通过减小Id指令,削弱电机的励磁磁场,从而提高电机的转速上限。在弱磁控制过程中,实时监测电机的反电势和母线电压,避免反电势过高导致母线电压异常。例如,当电机转速超过弱磁启动阈值时,逐渐减小Id指令,同时调整Iq指令以维持电机的转矩,确保电机在弱磁区域稳定运行。
- 过调制:在电机高速运行时,为充分利用母线电压,提高电机的输出能力,采用过调制技术。过调制通过调整PWM的调制方式,使输出电压的幅值超过母线电压的最大值,从而提高电机的转速和转矩。在过调制过程中,需要精确计算调制比,避免过调制过度导致电流畸变或电机不稳定。
(四)故障诊断与保护模块
故障诊断与保护模块是保障系统安全稳定运行的关键,实时监测系统的各类运行参数,当检测到故障时,立即触发相应的保护措施,避免故障扩大造成设备损坏或人员伤害。
1. 故障检测(JudgeError函数、相关检测函数)
- 过压/欠压检测:通过ADC实时采集母线电压,与预设的过压阈值和欠压阈值进行比较。当母线电压高于过压阈值或低于欠压阈值时,判定为过压故障或欠压故障,并设置相应的故障标志。例如,当母线电压超过设定的过压阈值时,触发过压保护,避免过高电压损坏控制器内部器件。
- 过流检测:通过ADC采集电机的相电流,计算母线电流或相电流的有效值,与预设的过流阈值进行比较。当电流超过过流阈值时,判定为过流故障,设置故障标志并触发过流保护,避免过大电流烧毁MOS管或电机。
- 堵转检测:通过监测霍尔信号的变化频率或电机的转速,判断电机是否堵转。当霍尔信号长时间没有变化(超过设定的堵转时间阈值)或电机转速长时间为零,且存在一定的输出转矩时,判定为堵转故障,触发堵转保护,避免电机堵转时电流过大造成损坏。
- 霍尔错误检测:监测霍尔信号的状态,若霍尔信号出现异常(如霍尔状态为0或7,不符合正常的霍尔状态序列),或霍尔信号跳变顺序异常,判定为霍尔错误故障,触发霍尔错误保护,避免电机因霍尔信号异常导致失控。
- MOS管故障检测(CheckMos函数):在系统初始化阶段或特定运行阶段,通过控制MOS管的导通与关断,检测MOS管是否损坏。例如,依次使能各个MOS管,检测对应的电流或电压信号,若检测到异常(如电流为零或电压异常),则判定对应的MOS管损坏,触发MOS管故障保护,避免损坏的MOS管影响系统正常运行。
2. 故障保护(StopMotor函数、DisplayLed函数)
- 电机停机:当检测到故障时,立即执行电机停机操作,关闭PWM输出,切断电机的驱动信号,使电机停止运行。例如,在StopMotor函数中,设置PWM占空比为零,使能PWM输出关闭功能,确保电机迅速停机。
- 故障报警:通过LED指示灯的闪烁次数或闪烁频率指示故障类型,方便用户和维修人员快速识别故障原因。例如,DisplayLed函数根据故障标志控制LED指示灯的闪烁,过压故障对应LED闪烁3次,欠压故障对应闪烁8次等,不同故障对应不同的闪烁次数,实现故障的可视化报警。
- 故障锁定:对于严重故障(如MOS管损坏、霍尔错误),在触发保护后进行故障锁定,避免故障未排除时系统重新启动导致二次损坏。只有在故障排除并进行特定的复位操作后,系统才能解除故障锁定,重新进入正常运行状态。
(五)辅助功能模块
辅助功能模块为电动车提供更多的实用功能,提升用户体验和系统性能,主要包括转把控制、刹车控制、助力控制等。
1. 转把控制(GetHand函数)
转把是用户控制电动车转速的输入设备,通过采集转把输出的电压信号,转换为电机的转速指令,具体功能如下:
- 转把电压采集:通过ADC采集转把输出的电压信号,对采集到的电压信号进行滤波处理,去除噪声干扰,确保转把信号稳定。
- 转速指令转换:将转把电压信号按照预设的比例关系转换为电机的转速指令。例如,转把电压在特定范围内线性对应电机的转速范围,转把电压最低时对应电机最低转速(或停机),转把电压最高时对应电机最高转速。
- 转把信号故障检测:检测转把电压是否在正常范围内(如0.8V~4.2V),若转把电压低于最低阈值或高于最高阈值,判定为转把故障,触发转把故障保护,避免转把信号异常导致电机失控。
2. 刹车控制(Break函数、BreakRun函数)
刹车控制用于实现电动车的减速或停车,同时具备能量回收功能,具体如下:
- 刹车信号检测:通过I/O端口检测刹车信号(高电平或低电平有效),当检测到刹车信号时,触发刹车控制逻辑。
- 电机减速/停机:根据刹车信号的强度或持续时间,调整PWM占空比,使电机减速或停机。例如,轻微刹车时,减小PWM占空比使电机缓慢减速;紧急刹车时,迅速将PWM占空比降至零,使电机快速停机。
- 能量回收(反充电):在刹车过程中,通过控制MOS管的导通与关断,将电机的动能转换为电能回充到电池中,实现能量回收,延长电动车的续航里程。例如,在BreakRun函数中,控制下桥臂MOS管导通,使电机处于发电状态,将电能回充到电池。
3. 助力控制(AssistJudge函数、InitAssist函数)
助力控制主要用于电动自行车等车型,根据骑行者的脚踏力提供相应的助力,减轻骑行者的负担,具体如下:
- 助力信号采集:通过助力传感器采集骑行者的脚踏频率或脚踏力信号,将其转换为电信号后通过ADC采集到控制器中。
- 助力等级调整:根据采集到的助力信号,结合预设的助力等级参数,计算出相应的助力电流或转速指令,为电机提供助力。例如,当脚踏频率较高或脚踏力较大时,增加助力等级,提供更大的助力;当脚踏频率较低或脚踏力较小时,减小助力等级,降低助力。
- 助力使能/禁用:根据系统状态(如转把信号、刹车信号)控制助力功能的使能或禁用。例如,当转把信号有效(用户手动加速)或检测到刹车信号时,禁用助力功能;当转把信号无效且无刹车信号时,使能助力功能,为骑行者提供助力。
三、系统运行流程
(一)上电初始化阶段
- 系统上电后,首先执行InitSysReg函数,完成硬件寄存器的配置,包括系统时钟、I/O端口、定时器、PWM、ADC、捕获模块等,为系统提供稳定的硬件环境。
- 执行InitData函数,初始化电机控制参数、PID控制器参数、故障检测参数等,为系统运行做好数据准备。
- 执行InitBreak、InitOverSpeed、InitLimitSpeed、InitAssist等辅助功能初始化函数,初始化刹车、弱磁、限速、助力等辅助功能的参数,使辅助功能能够正常工作。
- 执行GetAdZero函数,采集初始的ADC信号(如电机电流、母线电压、转把电压),校准ADC零点,为后续的信号采集提供基准。
- 执行ReadIoHall函数,从EEPROM中读取霍尔角度数据并进行校验,初始化霍尔位置信息,为电机角度计算提供初始数据。
(二)待机阶段
- 完成初始化后,系统进入待机阶段,此时转把电压低于启动阈值,电机未启动。
- 系统实时采集转把电压、刹车信号、母线电压等参数,监测系统状态。
- 当检测到转把电压达到启动阈值,且无刹车信号、无故障时,系统从待机阶段进入启动阶段;若检测到故障(如过压、欠压、转把故障),则进入故障处理阶段。
(三)启动阶段
- 系统执行电机启动逻辑,初始化启动参数(如启动角度、启动占空比),控制PWM输出逐渐增加,使电机平稳启动。
- 在启动过程中,实时采集电机电流、转速等参数,通过电流环和速度环控制,确保电机启动时电流稳定,转速平滑上升。
- 当电机转速达到一定值,且运行稳定后,系统从启动阶段进入正常运行阶段。
(四)正常运行阶段
- 系统实时采集转把电压,将其转换为转速指令,作为速度环的控制目标。
- 通过霍尔信号计算电机的实际转速,与转速指令进行比较,经过速度环PID控制器计算得到电流指令(Iq指令)。
- 通过ADC采集电机的相电流,转换为Id和Iq,与电流指令进行比较,经过电流环PID控制器计算得到电压指令(Vd和Vq)。
- 通过Park逆变换和Clarke逆变换,将电压指令转换为三相电压,生成PWM信号控制MOS管导通,驱动电机按照指令转速运行。
- 实时监测系统的运行参数(母线电压、电流、霍尔信号、MOS管状态等),若检测到故障,立即进入故障处理阶段;若检测到刹车信号,进入刹车阶段;若转把电压降至待机阈值,进入待机阶段。
- 根据电机转速和系统需求,适时启动弱磁控制或过调制功能,提高电机的转速上限和输出能力;若系统具备助力功能,根据助力信号提供相应的助力。
(五)刹车阶段
- 当检测到刹车信号时,系统进入刹车阶段,立即调整PWM占空比,使电机减速。
- 若系统具备能量回收功能,在刹车过程中控制电机进入发电状态,将动能转换为电能回充到电池。
- 当电机转速降至零或刹车信号消失后,若转把电压仍低于启动阈值,系统进入待机阶段;若转把电压达到启动阈值,系统进入启动阶段。
(六)故障处理阶段
- 当系统检测到故障(如过压、欠压、过流、堵转、霍尔错误、MOS管故障)时,立即进入故障处理阶段。
- 执行StopMotor函数,关闭PWM输出,使电机停机,避免故障扩大。
- 执行DisplayLed函数,通过LED指示灯的闪烁次数指示故障类型,方便用户和维修人员识别故障。
- 对严重故障进行故障锁定,只有在故障排除并进行复位操作后,系统才能重新进入上电初始化阶段,重新启动。
四、关键技术特点
(一)高精度的角度计算与控制
采用霍尔信号捕获和电角度增量计算技术,结合标幺化和特定的数据格式(如Q32),确保电机角度计算的精度;通过PID控制器实现电流环和速度环的精准控制,使电机能够按照指令精确运行,提高电机的控制性能和运行稳定性。
(二)完善的故障诊断与保护机制
涵盖过压、欠压、过流、堵转、霍尔错误、MOS管故障等多种故障类型的检测,检测精度高、响应速度快;故障保护措施全面,包括电机停机、故障报警、故障锁定等,能够有效避免故障扩大,保障系统安全。
(三)丰富的辅助功能
集成转把控制、刹车控制、能量回收、助力控制、弱磁控制、过调制等多种辅助功能,满足不同车型和用户的需求,提升电动车的实用性、舒适性和续航里程。
(四)模块化设计与高可扩展性
代码采用模块化设计,各功能模块独立封装,模块之间接口清晰,便于代码的维护、调试和升级;同时,系统预留了一定的扩展接口和参数配置空间,可根据不同的电机类型、车型需求进行灵活的功能扩展和参数调整。
五、总结
SH79F3213电动车控制器代码围绕电机的精准控制和系统的安全稳定运行展开,通过完善的硬件初始化、高精度的霍尔位置检测与角度计算、稳定的电机驱动控制、全面的故障诊断与保护以及丰富的辅助功能,实现了电动车电机从启动、运行到停机的全流程控制。该代码具有控制精度高、稳定性好、故障保护完善、功能丰富、可扩展性强等特点,能够满足不同类型电动车的控制需求,为电动车的安全、高效运行提供了可靠的技术支撑。



AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)