[其它应用]

基于中颖SH79F168单片机的航模无刷电调方案

[复制链接]
6922|6
手机看帖
扫描二维码
随时随地手机跟帖
两只袜子|  楼主 | 2021-1-25 15:02 | 显示全部楼层 |阅读模式

摘要:本文提出了一种采用中颖8位单片机SH79F168作为主控芯片的航模无刷电调方案,用AD采样的方法进行反电动势检测以控制无位置传感器的无刷直流电机。该芯片内部集成了PWM、ADC、增强外部中断等有针对性的功能模块,使软硬件设计都大为简化。经实际项目应用,该系统运行稳定可靠,且与市面上的其它控制方案相比具有成本优势。

1 概述

无位置传感器的无刷直流电机(Brushless Direct Current Motor, BLDCM)由于其快速、可靠性高、体积小、重量轻等特点,在航模领域得到了广泛的应用。但是与有刷电机和有位置传感器的无刷直流电机相比,其控制算法要复杂得多。加上航模设计中对重量和体积的要求非常严格,因此要求硬件电路尽可能简单,更增加了软件的难度。

本文提出了一种基于中颖8位单片机SH79F168的控制方案,借助于该芯片片内集成的针对电机控制的功能模块,只需很少的外围电路即可搭建控制系统,实现基于反电动势法的无位置传感器BLDC控制,在保证稳定性和可靠性的基础上大大降低了系统成本。而且该芯片与传统8051完全兼容,易于上手,从而也降低了研发成本。

2 系统硬件设计

本方案选用中颖的8位单片机SH79F168做为主控芯片。该芯片采用优化的单机器周期8051核,内置16K FLASH存储器,兼容传统8051所有硬件资源,采用JTAG仿真方式,内置16.6M振荡器,同时扩展了如下功能:

双DPTR指针. 16位 x 8乘法器和16位/8除法器.

3通道12位带死区控制PWM,6路输出,输出极性可设为中心或边沿对齐模式;同时集成故障检测功能,可瞬时关闭PWM输出;

7通道10位ADC模块;

内置放大器和比较器,可用作电流放大采样和过流保护;

增强的外部中断,提供4种触发方式;

提供硬件抗干扰措施;

Flash自编程功能,方便存储参数;

主系统硬件架构如图1所示,从图中可以看出该系统大部分功能都由片内集成的模块完成。外围电路的简化一方面可以提高系统可靠性,另一方面也降低了成本。


图 1 系统硬件架构

三相逆变桥采用上桥PMOS用三极管驱动,下桥NMOS用PWM端口直接驱动的方式,如图2所示。


图 2  三相逆变桥

SH79F169片内集成了三通道6路PWM端口,可分别独立配置为PWM输出或者IO输出。将PWM01~PWM21配置为PWM输出,直接驱动三相逆变桥的下桥;PWM0~PWM2配置为IO端口,经过晶体管反相电路后驱动三相逆变桥的上桥。

外部中断输入INT4x配置为双沿触发,即输入信号的上升沿和下降沿都能触发中断,可用于捕捉调速给定信号。

3 系统软件设计

由于SH79F168的硬件已经完成了大量的任务,软件的部分相对简化很多。主程序流程图如图3所示。


图 3  主程序流程图

为便于理解,该流程图经过了尽量的简化,只保留最关键的步骤。主流程中没有列出“检测BEMF”和“换相”两个关键的步骤,因为它们分别在PWM中断和timer0中断中进行。

3.1 反电动势过零点检测

在PWM输出高期间,假设断开相绕组端电压为 ,反电动势为 ,供电电压为 ,则三者之间有如下关系[1]:


SH79F168提供PWM周期中断和占空比中断。当周期中断发生时不断检测断开相的端电压,并与 比较,直到检测到过零点或者PWM输出低(根据PWM占空比中断标志位判断),即可实现在PWM输出高期间的反电动势过零点检测。每次换相后就切换到另一个通道,检测下一个断开相的端电压,如此循环,实现实时检测。

需要注意是刚换相后的一段时间内,由于MOS管的续流,断开相绕组的电压会出现尖峰。为了准确检测反电动势,可以选择在刚换相的一到两个PWM周期内不进行采样,避开尖峰电压。

3.2 起动算法

BLDC电机的反电动势和转速正相关,在起动和低速运行阶段,电机产生的反电动势为零或很小,因此往往需要经过一段强制加速,使反电动势上升到能够检测过零点的水平。

航模电机一般在较低速时即会产生比较明显的反电动势,这个特点为起动提供了很大的便利。先给电机任意两相通电,使电机获得一个初速度,这时检测断开相电压并等待其发生过零。若检测到过零点则换相,若经过较长一段时间还没有检测到过零则强制换相,重复这个过程直至电机稳定运行。这种起动方式,不但实现简单,而且稳定可靠。在这种方式不能适用时,再根据应用场合考虑选用特定的起动方式,可参考文献[2],限于篇幅本文不详述。

3.3 换相计算

一般在用反电动势法进行BLDC控制的时候,需要对每两次换相的间隔时间进行计时,得到60°电角度时间,然后除以2作为检测到过零点后30°延时的定时值。这就需要用到两个定时器/计数器,一个用作计数器对每两次换相的间隔进行计数,另一个用作定时器实现30°延时。本方案中为了节省timer资源,用一个timer同时完成两项功能。

在每次换相后,检测到该通电状态下的过零点之间,timer0用作计数器;在检测到过零点之后,之前的计数值即为30°电角度,将其作为定时值装入timer0,timer0用作定时器开始定时。定时时间到后,在timer0中断中进行换相。然后timer0又用作计数器,如此循环。正常情况下,由于电机转速很高,每次换相到检测到过零点之间的时间很短,timer0在计数模式下不会发生中断。若timer0在计数模式时发生中断,必然是计数溢出,说明电机经过较长的时间还没有检测到过零点,而这可以作为电机堵转的标志。根据实际情况,可对timer0在计数模式下连续发生中断的次数进行计数,超过一定值即认为发生堵转。这样,timer0还实现了堵转保护的功能。


使用特权

评论回复
一点点0321| | 2021-1-31 23:40 | 显示全部楼层

使用特权

评论回复
qiang7260| | 2021-2-1 08:45 | 显示全部楼层
期待楼主的实际例程

使用特权

评论回复
yangzhen1001| | 2021-7-24 09:57 | 显示全部楼层

使用特权

评论回复
andygirl| | 2021-8-4 17:14 | 显示全部楼层
只是空洞洞的文字啊~~

使用特权

评论回复
guijial511| | 2021-8-6 08:19 | 显示全部楼层
有Demo代码嘛?

使用特权

评论回复
麻花油条| | 2021-8-6 16:02 | 显示全部楼层
楼主能来个实操例程吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1867

主题

6389

帖子

7

粉丝